Issue Details (XML | Word | Printable)

Key: CSC-663
Type: New Feature New Feature
Status: Closed Closed
Resolution: Fixed
Priority: Minor Minor
Assignee: Ron Smith
Reporter: Ron Smith
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Fornax Cartridge Sculptor

Generate Builder classes for domain classes

Created: 16/Oct/11 03:19 AM   Updated: 21/Jan/12 10:02 PM
Component/s: Generator
Affects Version/s: 2.1.0
Fix Version/s: 2.1.0

Time Tracking:
Original Estimate: 8 hours
Original Estimate - 8 hours
Remaining Estimate: 8 hours
Remaining Estimate - 8 hours
Time Spent: Not Specified
Remaining Estimate - 8 hours


 Description  « Hide
Add optional feature to generate a builder class for each domain object class.
The builder class provides a fluent interface to build domain objects in a manner that can be easier to work with and read.

Example of builder class use:

Person sam = new PersonBuilder()
  .firstName("Sam")
  .lastName("Smith")
  .phone("1111111111")
  .email("sam@some.com")
  .build();

Example using static import:

import static sample.builder.PersonBuilder.person;
import static sample.builder.AddressBuilder.address;

Person sam = person().
  .firstName("Sam")
  .lastName("Smith")
  .phone("1111111111")
  .email("sam@some.com")
  .homeAddress(
    address().street("111 some way").zip("11111").build())
  .build();

Builders always provide a no-args constructor in addition to the minimal constructor. They support setting attributes, single and multi-references into the domain class.


 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Repository Revision Date User Message
Fornax SVN #7727 Sat Oct 29 01:28:33 CEST 2011 rsmith7209 CSC-663 - Generate Builder classes for domain classes
Files Changed
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/.classpath
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/pom.xml
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/main/java/org/fornax/cartridges/sculptor/generator/util/GenerationHelper.java
ADD /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/main/resources/templates/domain/Builder.xpt
ADD /trunk/cartridges/sculptor/fornax-cartridges-sculptor-examples-library/src/test/java/org/fornax/cartridges/sculptor/examples/library/media/domain/BookBuilderTest.java
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/main/resources/templates/Root.xpt
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/main/resources/extensions/helper.ext
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/test/resources/library.btdesign
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/main/java/org/fornax/cartridges/sculptor/generator/util/GeneratorProperties.java
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/test/java/org/fornax/cartridges/sculptor/generator/transformation/TransformationTestBase.java
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/main/resources/extensions/properties.ext
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/main/resources/default-sculptor-generator.properties

Ron Smith added a comment - 11/Nov/11 03:59 AM
Made additional changes to not generate builder for abstract classes.
Also, fornax-utilities-xtendtools 1.0.1 which this feature depends on is now in the Fornax repository, so this feature should build clean.

Ron Smith made changes - 11/Nov/11 04:00 AM
Field Original Value New Value
Status Open [ 1 ] Resolved [ 5 ]
Resolution Fixed [ 1 ]
Repository Revision Date User Message
Fornax SVN #7734 Tue Nov 22 06:42:04 CET 2011 rsmith7209 CSC-663 - Generate Builder classes for domain classes : Use regular constructor instead of limited constructor when building domain objects. Update DDDSample to expose domain object constructors from base class as required for builders.
Files Changed
MODIFY /trunk/cartridges/sculptor/DDDSample/src/test/java/org/sculptor/dddsample/location/domain/LocationTest.java
MODIFY /trunk/cartridges/sculptor/DDDSample/src/test/java/org/sculptor/dddsample/location/domain/SampleLocations.java
MODIFY /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/main/resources/templates/domain/Builder.xpt
MODIFY /trunk/cartridges/sculptor/DDDSample/src/main/java/org/sculptor/dddsample/cargo/domain/DeliveryHistory.java
MODIFY /trunk/cartridges/sculptor/DDDSample/src/main/java/org/sculptor/dddsample/location/domain/Location.java

Repository Revision Date User Message
Fornax SVN #7738 Sat Dec 10 23:37:17 CET 2011 rsmith7209 CSC-663 : Generate builder classes for domain classes : Add template unit test and TemplateTestBase
Files Changed
ADD /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/test/java/org/fornax/cartridges/sculptor/generator/templates
ADD /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/test/java/org/fornax/cartridges/sculptor/generator/templates/BuilderTemplatesTest.java
ADD /trunk/cartridges/sculptor/fornax-cartridges-sculptor-generator/src/test/java/org/fornax/cartridges/sculptor/generator/templates/TemplateTestBase.java

Patrik Nordwall made changes - 21/Jan/12 10:02 PM
Status Resolved [ 5 ] Closed [ 6 ]