From 7cfe1ef8ee8c1c51d406b2646cde765fccb85fb9 Mon Sep 17 00:00:00 2001
From: bentmann
Date: Sun, 31 May 2009 16:56:49 +0000
Subject: [PATCH 01/13] [MODELLO-191] Add support to generate clone() methods
o Created feature branch
From e2fa3a1ee1738c0465d6e5b402d0a11da7693fe0 Mon Sep 17 00:00:00 2001
From: bentmann
Date: Sun, 31 May 2009 17:03:30 +0000
Subject: [PATCH 02/13] [MODELLO-191] Add support to generate clone() methods
---
.../plugin/java/JavaModelloGenerator.java | 219 ++++++++++++++++++
.../metadata/JavaAssociationMetadata.java | 25 ++
.../java/metadata/JavaClassMetadata.java | 30 +++
.../java/metadata/JavaMetadataPlugin.java | 6 +
4 files changed, 280 insertions(+)
diff --git a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java
index 5834282b1..6a366abaa 100644
--- a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java
+++ b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java
@@ -50,6 +50,9 @@
import java.io.IOException;
import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
@@ -61,6 +64,11 @@
public class JavaModelloGenerator
extends AbstractJavaModelloGenerator
{
+
+ private Collection immutableTypes =
+ new HashSet( Arrays.asList( new String[] { "boolean", "Boolean", "byte", "Byte", "char", "Character", "short",
+ "Short", "int", "Integer", "long", "Long", "float", "Float", "double", "Double", "String" } ) );
+
public void generate( Model model, Properties parameters )
throws ModelloException
{
@@ -227,6 +235,13 @@ private void generateJava()
jClass.addMethod( toString );
}
+ JMethod[] cloneMethods = generateClone( modelClass );
+ if ( cloneMethods.length > 0 )
+ {
+ jClass.addInterface( Cloneable.class.getName() );
+ jClass.addMethods( cloneMethods );
+ }
+
if ( modelClass.getCodeSegments( getGeneratedVersion() ) != null )
{
for ( Iterator iterator = modelClass.getCodeSegments( getGeneratedVersion() ).iterator();
@@ -419,6 +434,210 @@ private JMethod generateHashCode( ModelClass modelClass )
return hashCode;
}
+ private JMethod[] generateClone( ModelClass modelClass )
+ throws ModelloException
+ {
+ String cloneModeClass = getCloneMode( modelClass );
+
+ if ( JavaClassMetadata.CLONE_NONE.equals( cloneModeClass ) )
+ {
+ return new JMethod[0];
+ }
+
+ JType returnType;
+ if ( useJava5 )
+ {
+ returnType = new JClass( modelClass.getName() );
+ }
+ else
+ {
+ returnType = new JClass( "Object" );
+ }
+
+ JMethod clone = new JMethod( "clone", returnType, null );
+
+ JSourceCode sc = clone.getSourceCode();
+
+ sc.add( "try" );
+ sc.add( "{" );
+ sc.indent();
+
+ sc.add( modelClass.getName() + " copy = (" + modelClass.getName() + ") super.clone();" );
+
+ sc.add( "" );
+
+ for ( Iterator j = modelClass.getFields( getGeneratedVersion() ).iterator(); j.hasNext(); )
+ {
+ ModelField modelField = (ModelField) j.next();
+
+ String thisField = "this." + modelField.getName();
+ String copyField = "copy." + modelField.getName();
+
+ if ( "DOM".equals( modelField.getType() ) )
+ {
+ sc.add( "if ( " + thisField + " != null )" );
+ sc.add( "{" );
+ sc.addIndented( copyField
+ + " = new org.codehaus.plexus.util.xml.Xpp3Dom( (org.codehaus.plexus.util.xml.Xpp3Dom) "
+ + thisField + " );" );
+ sc.add( "}" );
+ sc.add( "" );
+ }
+ else if ( ModelDefault.PROPERTIES.equals( modelField.getType() ) )
+ {
+ sc.add( "if ( " + thisField + " != null )" );
+ sc.add( "{" );
+ sc.addIndented( copyField + " = (" + ModelDefault.PROPERTIES + ") " + thisField + ".clone();" );
+ sc.add( "}" );
+ sc.add( "" );
+ }
+ else if ( modelField instanceof ModelAssociation )
+ {
+ ModelAssociation modelAssociation = (ModelAssociation) modelField;
+
+ String cloneModeAssoc = getCloneMode( modelAssociation, cloneModeClass );
+
+ boolean deepClone =
+ JavaAssociationMetadata.CLONE_DEEP.equals( cloneModeAssoc )
+ && !immutableTypes.contains( modelAssociation.getTo() );
+
+ if ( modelAssociation.isOneMultiplicity() )
+ {
+ if ( deepClone )
+ {
+ sc.add( "if ( " + thisField + " != null )" );
+ sc.add( "{" );
+ sc.addIndented( copyField + " = (" + modelAssociation.getTo() + ") " + thisField + ".clone();" );
+ sc.add( "}" );
+ sc.add( "" );
+ }
+ }
+ else
+ {
+ sc.add( "if ( " + thisField + " != null )" );
+ sc.add( "{" );
+ sc.indent();
+ sc.add( copyField + " = " + getDefaultValue( modelAssociation ) + ";" );
+
+ if ( isCollection( modelField.getType() ) )
+ {
+ if ( deepClone )
+ {
+ if ( useJava5 )
+ {
+ sc.add( "for ( " + modelAssociation.getTo() + " item : " + thisField + " )" );
+ }
+ else
+ {
+ sc.add( "for ( java.util.Iterator it = " + thisField + ".iterator(); it.hasNext(); )" );
+ }
+ sc.add( "{" );
+ sc.indent();
+ if ( useJava5 )
+ {
+ sc.add( copyField + ".add( item.clone() );" );
+ }
+ else
+ {
+ sc.add( copyField + ".add( ( (" + modelAssociation.getTo() + ") it.next() ).clone() );" );
+ }
+ sc.unindent();
+ sc.add( "}" );
+ }
+ else
+ {
+ sc.add( copyField + ".addAll( " + thisField + " );" );
+ }
+ }
+ else if ( isMap( modelField.getType() ) )
+ {
+ sc.add( copyField + ".clear();" );
+ sc.add( copyField + ".putAll( " + thisField + " );" );
+ }
+
+ sc.unindent();
+ sc.add( "}" );
+ sc.add( "" );
+ }
+ }
+ }
+
+ sc.add( "return copy;" );
+
+ sc.unindent();
+ sc.add( "}" );
+ sc.add( "catch ( " + Exception.class.getName() + " ex )" );
+ sc.add( "{" );
+ sc.indent();
+ sc.add( "throw (" + RuntimeException.class.getName() + ") new " + UnsupportedOperationException.class.getName()
+ + "( getClass().getName()" );
+ sc.addIndented( "+ \" does not support clone()\" ).initCause( ex );" );
+ sc.unindent();
+ sc.add( "}" );
+
+ return new JMethod[] { clone };
+ }
+
+ private String getCloneMode( ModelClass modelClass )
+ throws ModelloException
+ {
+ String cloneMode = null;
+
+ for ( ModelClass currentClass = modelClass;; )
+ {
+ JavaClassMetadata javaClassMetadata = (JavaClassMetadata) currentClass.getMetadata( JavaClassMetadata.ID );
+
+ cloneMode = javaClassMetadata.getCloneMode();
+
+ if ( cloneMode != null )
+ {
+ break;
+ }
+
+ String superClass = currentClass.getSuperClass();
+ if ( StringUtils.isEmpty( superClass ) || !isClassInModel( superClass, getModel() ) )
+ {
+ break;
+ }
+
+ currentClass = getModel().getClass( superClass, getGeneratedVersion() );
+ }
+
+ if ( cloneMode == null )
+ {
+ cloneMode = JavaClassMetadata.CLONE_NONE;
+ }
+ else if ( !JavaClassMetadata.CLONE_MODES.contains( cloneMode ) )
+ {
+ throw new ModelloException( "The Java Modello Generator cannot use '" + cloneMode
+ + "' as a value for , " + "only the following values are acceptable "
+ + JavaClassMetadata.CLONE_MODES );
+ }
+
+ return cloneMode;
+ }
+
+ private String getCloneMode( ModelAssociation modelAssociation, String cloneModeClass )
+ throws ModelloException
+ {
+ JavaAssociationMetadata javaAssociationMetadata =
+ (JavaAssociationMetadata) modelAssociation.getAssociationMetadata( JavaAssociationMetadata.ID );
+
+ String cloneModeAssoc = javaAssociationMetadata.getCloneMode();
+ if ( cloneModeAssoc == null )
+ {
+ cloneModeAssoc = cloneModeClass;
+ }
+ else if ( !JavaAssociationMetadata.CLONE_MODES.contains( cloneModeAssoc ) )
+ {
+ throw new ModelloException( "The Java Modello Generator cannot use '" + cloneModeAssoc
+ + "' as a value for , " + "only the following values are acceptable "
+ + JavaAssociationMetadata.CLONE_MODES );
+ }
+
+ return cloneModeAssoc;
+ }
+
/**
* Utility method that adds a period to the end of a string, if the last
* non-whitespace character of the string is not a punctuation mark or an
diff --git a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaAssociationMetadata.java b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaAssociationMetadata.java
index 9939f8582..fbfee977d 100644
--- a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaAssociationMetadata.java
+++ b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaAssociationMetadata.java
@@ -50,6 +50,18 @@ public class JavaAssociationMetadata
INIT_TYPES.add( FIELD_INIT );
}
+ public static final String CLONE_SHALLOW = "shallow";
+ public static final String CLONE_DEEP = "deep";
+
+ public final static List CLONE_MODES;
+
+ static
+ {
+ CLONE_MODES = new ArrayList();
+ CLONE_MODES.add( CLONE_SHALLOW );
+ CLONE_MODES.add( CLONE_DEEP );
+ }
+
private boolean adder = true;
private boolean bidi;
@@ -58,6 +70,8 @@ public class JavaAssociationMetadata
private String initializationMode;
+ private String cloneMode;
+
public boolean isAdder()
{
return adder;
@@ -104,4 +118,15 @@ public void setInitializationMode( String initializationMode )
this.initializationMode = initializationMode;
}
}
+
+ public String getCloneMode()
+ {
+ return cloneMode;
+ }
+
+ public void setCloneMode( String cloneMode )
+ {
+ this.cloneMode = cloneMode;
+ }
+
}
diff --git a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaClassMetadata.java b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaClassMetadata.java
index 98cbef8a4..6e42ea1b8 100644
--- a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaClassMetadata.java
+++ b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaClassMetadata.java
@@ -22,6 +22,9 @@
* SOFTWARE.
*/
+import java.util.ArrayList;
+import java.util.List;
+
import org.codehaus.modello.metadata.ClassMetadata;
/**
@@ -33,10 +36,26 @@ public class JavaClassMetadata
{
public static final String ID = JavaClassMetadata.class.getName();
+ public static final String CLONE_NONE = "none";
+ public static final String CLONE_SHALLOW = "shallow";
+ public static final String CLONE_DEEP = "deep";
+
+ public final static List CLONE_MODES;
+
+ static
+ {
+ CLONE_MODES = new ArrayList();
+ CLONE_MODES.add( CLONE_NONE );
+ CLONE_MODES.add( CLONE_SHALLOW );
+ CLONE_MODES.add( CLONE_DEEP );
+ }
+
private boolean abstractMode;
private boolean enabled;
+ private String cloneMode;
+
public void setAbstract( boolean abstractMode )
{
this.abstractMode = abstractMode;
@@ -56,4 +75,15 @@ public void setEnabled( boolean generate )
{
this.enabled = generate;
}
+
+ public String getCloneMode()
+ {
+ return cloneMode;
+ }
+
+ public void setCloneMode( String cloneMode )
+ {
+ this.cloneMode = cloneMode;
+ }
+
}
diff --git a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java
index 4da5e4542..aee07d6d0 100644
--- a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java
+++ b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java
@@ -59,6 +59,8 @@ public class JavaMetadataPlugin
public static final String JAVA_USE_INTERFACE = "java.useInterface";
+ public static final String JAVA_CLONE = "java.clone";
+
// ----------------------------------------------------------------------
// Map to Metadata
// ----------------------------------------------------------------------
@@ -76,6 +78,8 @@ public ClassMetadata getClassMetadata( ModelClass clazz, Map data )
metadata.setAbstract( getBoolean( data, JAVA_ABSTRACT, false ) );
+ metadata.setCloneMode( getString( data, JAVA_CLONE ) );
+
return metadata;
}
@@ -105,6 +109,8 @@ public AssociationMetadata getAssociationMetadata( ModelAssociation association,
metadata.setInitializationMode( getString( data, JAVA_INIT ) );
+ metadata.setCloneMode( getString( data, JAVA_CLONE ) );
+
return metadata;
}
}
From 3d929b09c9a8fd7c378c1ac5a488a2b66d3af8a9 Mon Sep 17 00:00:00 2001
From: bentmann
Date: Thu, 4 Jun 2009 20:30:52 +0000
Subject: [PATCH 03/13] [MODELLO-191] Add support to generate clone() methods
o Added attribute java.clone.hook to enable clone hook for custom fields (i.e. fields managed by code segments)
---
.../plugin/java/JavaModelloGenerator.java | 27 ++++++++++++++++---
.../java/metadata/JavaClassMetadata.java | 12 +++++++++
.../java/metadata/JavaMetadataPlugin.java | 4 +++
3 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java
index 6a366abaa..bef2bbefd 100644
--- a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java
+++ b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java
@@ -454,9 +454,9 @@ private JMethod[] generateClone( ModelClass modelClass )
returnType = new JClass( "Object" );
}
- JMethod clone = new JMethod( "clone", returnType, null );
+ JMethod cloneMethod = new JMethod( "clone", returnType, null );
- JSourceCode sc = clone.getSourceCode();
+ JSourceCode sc = cloneMethod.getSourceCode();
sc.add( "try" );
sc.add( "{" );
@@ -562,6 +562,19 @@ else if ( isMap( modelField.getType() ) )
}
}
+ String cloneHook = getCloneHook( modelClass );
+
+ if ( StringUtils.isNotEmpty( cloneHook ) && !"false".equalsIgnoreCase( cloneHook ) )
+ {
+ if ( "true".equalsIgnoreCase( cloneHook ) )
+ {
+ cloneHook = "cloneHook";
+ }
+
+ sc.add( cloneHook + "( copy );" );
+ sc.add( "" );
+ }
+
sc.add( "return copy;" );
sc.unindent();
@@ -575,7 +588,7 @@ else if ( isMap( modelField.getType() ) )
sc.unindent();
sc.add( "}" );
- return new JMethod[] { clone };
+ return new JMethod[] { cloneMethod };
}
private String getCloneMode( ModelClass modelClass )
@@ -638,6 +651,14 @@ else if ( !JavaAssociationMetadata.CLONE_MODES.contains( cloneModeAssoc ) )
return cloneModeAssoc;
}
+ private String getCloneHook( ModelClass modelClass )
+ throws ModelloException
+ {
+ JavaClassMetadata javaClassMetadata = (JavaClassMetadata) modelClass.getMetadata( JavaClassMetadata.ID );
+
+ return javaClassMetadata.getCloneHook();
+ }
+
/**
* Utility method that adds a period to the end of a string, if the last
* non-whitespace character of the string is not a punctuation mark or an
diff --git a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaClassMetadata.java b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaClassMetadata.java
index 6e42ea1b8..ca1632712 100644
--- a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaClassMetadata.java
+++ b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaClassMetadata.java
@@ -56,6 +56,8 @@ public class JavaClassMetadata
private String cloneMode;
+ private String cloneHook;
+
public void setAbstract( boolean abstractMode )
{
this.abstractMode = abstractMode;
@@ -86,4 +88,14 @@ public void setCloneMode( String cloneMode )
this.cloneMode = cloneMode;
}
+ public String getCloneHook()
+ {
+ return cloneHook;
+ }
+
+ public void setCloneHook( String cloneHook )
+ {
+ this.cloneHook = cloneHook;
+ }
+
}
diff --git a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java
index aee07d6d0..550e75f45 100644
--- a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java
+++ b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java
@@ -61,6 +61,8 @@ public class JavaMetadataPlugin
public static final String JAVA_CLONE = "java.clone";
+ public static final String JAVA_CLONE_HOOK = "java.clone.hook";
+
// ----------------------------------------------------------------------
// Map to Metadata
// ----------------------------------------------------------------------
@@ -80,6 +82,8 @@ public ClassMetadata getClassMetadata( ModelClass clazz, Map data )
metadata.setCloneMode( getString( data, JAVA_CLONE ) );
+ metadata.setCloneHook( getString( data, JAVA_CLONE_HOOK ) );
+
return metadata;
}
From 961874a9ee1741bc1f91eac25473227b9e8e20db Mon Sep 17 00:00:00 2001
From: bentmann
Date: Fri, 5 Jun 2009 17:18:41 +0000
Subject: [PATCH 04/13] [MODELLO-191] Add support to generate clone() methods
o Documented new attributes in the model and bumped model version to 1.0.1 to account for additions
---
pom.xml | 2 +-
src/main/mdo/modello.mdo | 166 ++++++++++++++++++++++++---------------
2 files changed, 102 insertions(+), 66 deletions(-)
diff --git a/pom.xml b/pom.xml
index de4f92932..153cc3b2a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -493,7 +493,7 @@
src/main/mdo/modello.mdo
- 1.0.0
+ 1.0.1
diff --git a/src/main/mdo/modello.mdo b/src/main/mdo/modello.mdo
index 6958bd82e..f8a4c5e51 100644
--- a/src/main/mdo/modello.mdo
+++ b/src/main/mdo/modello.mdo
@@ -27,17 +27,17 @@
Common attributes for most of the elements.
- 1.0.0
+ 1.0.0+
name
- 1.0.0
+ 1.0.0+
String
The name of the element.
description
- 1.0.0
+ 1.0.0+
String
A user-level description of the element.
@@ -45,7 +45,7 @@
comment
- 1.0.0
+ 1.0.0+
String
A private comment about the element.
@@ -53,7 +53,7 @@
versionRange
- 1.0.0
+ 1.0.0+
String
deprecatedVersion
- 1.0.0
+ 1.0.0+
String
@@ -75,12 +75,12 @@
Root tag for the description of a model.
- 1.0.0
+ 1.0.0+
BaseElement
namespace
- 1.0.0
+ 1.0.0+
String
schemaLocation
- 1.0.0
+ 1.0.0+
String
xsdNamespace
- 1.0.0
+ 1.0.0+
String
@@ -114,7 +114,7 @@
xsdTargetNamespace
- 1.0.0
+ 1.0.0+
String
@@ -126,14 +126,14 @@
id
- 1.0.0
+ 1.0.0+
true
String
Unique identifier of this model.
defaults
- 1.0.0
+ 1.0.0+
ModelDefault
*
@@ -144,14 +144,14 @@
versionDefinition
- 1.0.0
+ 1.0.0+
VersionDefinition
interfaces
- 1.0.0
+ 1.0.0+
ModelInterface
*
@@ -162,7 +162,7 @@
classes
- 1.0.0
+ 1.0.0+
true
ModelClass
@@ -177,14 +177,14 @@
ModelDefault
- 1.0.0
+ 1.0.0+
A default setting for some of the property of this model.
key
- 1.0.0
+ 1.0.0+
true
String
checkDeprecation,
@@ -193,7 +193,7 @@
value
- 1.0.0
+ 1.0.0+
true
String
The value of this property.
@@ -203,11 +203,11 @@
VersionDefinition
- 1.0.0
+ 1.0.0+
type
- 1.0.0
+ 1.0.0+
true
String
field,
@@ -215,7 +215,7 @@
value
- 1.0.0
+ 1.0.0+
String
field, the name of the field containing the model
version.]]>
@@ -225,13 +225,13 @@
ModelInterface
- 1.0.0
+ 1.0.0+
An interface provided by the model.
BaseElement
superInterface
- 1.0.0
+ 1.0.0+
String
The name of the super interface for this interface.
@@ -239,7 +239,7 @@
packageName
- 1.0.0
+ 1.0.0+
String
The destination package name for this interface.
@@ -247,7 +247,7 @@
codeSegments
- 1.0.0
+ 1.0.0+
CodeSegment
*
@@ -261,7 +261,7 @@
CodeSegment
- 1.0.0
+ 1.0.0+
A segment of code to be appended to this element.
@@ -269,7 +269,7 @@
code
- 1.0.0
+ 1.0.0+
String
The code block.
@@ -278,13 +278,13 @@
ModelClass
- 1.0.0
+ 1.0.0+
A class for this model.
BaseElement
rootElement
- 1.0.0
+ 1.0.0+
boolean
Indicates that this class is the root of the model (only one class in a model can have this attribute set
@@ -294,7 +294,7 @@
tagName
- 1.0.0
+ 1.0.0+
String
Define a tag name to be used in XML content, which can be different from the class name.
@@ -303,7 +303,7 @@
enabled
- 1.0.0
+ 1.0.0+
boolean
true
@@ -313,16 +313,42 @@
abstractMode
- 1.0.0
+ 1.0.0+
boolean
Mark this class as abstract.
see org.codehaus.modello.plugin.java.metadata.JavaMetadataPlugin
+
+ javaClone
+ 1.0.1+
+ String
+ clone() method for this class. Allowed values are
+ none
, shallow
and deep
. The value is inherited from super classes
+ and defaults to none
if no super class declares otherwise.]]>
+
+ see org.codehaus.modello.plugin.java.metadata.JavaMetadataPlugin
+
+
+ javaCloneHook
+ 1.0.1+
+ String
+ clone() method.
+ The value of this attribute specifies the simple name of the hook method which is assumed to be provided as
+ part of some code segment. For convenience, the boolean literal true
can also be given to use
+ the default method name cloneHook
. The hook method itself must have a single parameter whose
+ type matches this class in order to receive the cloned object for further manipulation before completion of
+ the clone operation. Besides, the hook method must not have a return value and must not throw a checked
+ exception.]]>
+
+ see org.codehaus.modello.plugin.java.metadata.JavaMetadataPlugin
+
compositor
- 1.0.0
+ 1.0.0+
String
all
interfaces
- 1.0.0
+ 1.0.0+
String
*
@@ -343,7 +369,7 @@
superClass
- 1.0.0
+ 1.0.0+
String
The name of the super class for this class.
@@ -351,7 +377,7 @@
packageName
- 1.0.0
+ 1.0.0+
String
The destination package name for this class.
@@ -359,7 +385,7 @@
fields
- 1.0.0
+ 1.0.0+
ModelField
*
@@ -370,7 +396,7 @@
codeSegments
- 1.0.0
+ 1.0.0+
CodeSegment
*
@@ -384,7 +410,7 @@
ModelField
- 1.0.0
+ 1.0.0+
A field to be defined in a class.
@@ -392,7 +418,7 @@
getter
- 1.0.0
+ 1.0.0+
boolean
true
@@ -402,7 +428,7 @@
setter
- 1.0.0
+ 1.0.0+
boolean
true
@@ -412,7 +438,7 @@
separator
- 1.0.0
+ 1.0.0+
String
blank.]]>
@@ -421,7 +447,7 @@
attribute
- 1.0.0
+ 1.0.0+
boolean
Consider this field as an XML attribute instead of an element.
@@ -430,7 +456,7 @@
trim
- 1.0.0
+ 1.0.0+
boolean
true
@@ -440,7 +466,7 @@
tagName
- 1.0.0
+ 1.0.0+
String
Define a tag name to be used in XML content, which can be different from the field name.
@@ -449,7 +475,7 @@
format
- 1.0.0
+ 1.0.0+
String
The date format to use when parsing/writing a date (see java SimpleDateFormat).
@@ -458,7 +484,7 @@
alias
- 1.0.0
+ 1.0.0+
String
Alias name for this field (a parser should allow for this name instead of the given name).
@@ -466,7 +492,7 @@
type
- 1.0.0
+ 1.0.0+
true
String
defaultValue
- 1.0.0
+ 1.0.0+
String
The default value for this field.
required
- 1.0.0
+ 1.0.0+
boolean
Whether this field is required in model or not.
@@ -500,7 +526,7 @@
identifier
- 1.0.0
+ 1.0.0+
boolean
Whether this field is part of the identification of the object or not.
@@ -508,7 +534,7 @@
association
- 1.0.0
+ 1.0.0+
ModelAssociation
@@ -522,7 +548,7 @@
ModelAssociation
- 1.0.0
+ 1.0.0+
An association allows for mapping of a field to a complex type,
or to a many-multiplicity field.
@@ -530,7 +556,7 @@
adder
- 1.0.0
+ 1.0.0+
boolean
true
bidi
- 1.0.0
+ 1.0.0+
boolean
true
interfaceName
- 1.0.0
+ 1.0.0+
String
add, remove
,
@@ -565,7 +591,7 @@
initializationMode
- 1.0.0
+ 1.0.0+
String
lazy
see org.codehaus.modello.plugin.java.metadata.JavaMetadataPlugin
+
+ javaClone
+ 1.0.1+
+ String
+ shallow and
+ deep
. If the value is not specified, the clone mode of the container class will be used.]]>
+
+ see org.codehaus.modello.plugin.java.metadata.JavaMetadataPlugin
+
associationTagName
- 1.0.0
+ 1.0.0+
String
Define a tag name to be used for every element inside a multiple association. By default, the name is
@@ -585,7 +621,7 @@
itemsStyle
- 1.0.0
+ 1.0.0+
String
wrapped
mapStyle
- 1.0.0
+ 1.0.0+
String
inline
reference
- 1.0.0
+ 1.0.0+
boolean
see org.codehaus.modello.plugins.xml.metadata.XmlMetadataPlugin
to
- 1.0.0
+ 1.0.0+
true
String
multiplicity
- 1.0.0
+ 1.0.0+
String
Can be 1 if only one such child is allowed, or * if any
From f87fa2e9ee820755ce9bb996ff4d9e4715a6f1ad Mon Sep 17 00:00:00 2001
From: bentmann
Date: Fri, 5 Jun 2009 20:08:32 +0000
Subject: [PATCH 05/13] [MODELLO-191] Add support to generate clone() methods
o Fixed cloning of date
---
.../modello/plugin/java/JavaModelloGenerator.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java
index bef2bbefd..5d28b1adf 100644
--- a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java
+++ b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/JavaModelloGenerator.java
@@ -483,6 +483,14 @@ private JMethod[] generateClone( ModelClass modelClass )
sc.add( "}" );
sc.add( "" );
}
+ else if ( "Date".equalsIgnoreCase( modelField.getType() ) || "java.util.Date".equals( modelField.getType() ) )
+ {
+ sc.add( "if ( " + thisField + " != null )" );
+ sc.add( "{" );
+ sc.addIndented( copyField + " = (java.util.Date) " + thisField + ".clone();" );
+ sc.add( "}" );
+ sc.add( "" );
+ }
else if ( ModelDefault.PROPERTIES.equals( modelField.getType() ) )
{
sc.add( "if ( " + thisField + " != null )" );
From 04579294fac3d2812b5aae2df14a1044fb1d6ce5 Mon Sep 17 00:00:00 2001
From: bentmann
Date: Fri, 5 Jun 2009 20:09:50 +0000
Subject: [PATCH 06/13] [MODELLO-191] Add support to generate clone() methods
o Added ITs to check syntax and semantics of generated clone() methods
---
modello-maven-plugin/pom.xml | 63 ++++++
.../src/it/clone-java5/pom.xml | 72 +++++++
.../src/it/clone-java5/src/main/mdo/thing.mdo | 187 ++++++++++++++++++
.../src/test/java/test/CloneTest.java | 88 +++++++++
modello-maven-plugin/src/it/clone/pom.xml | 71 +++++++
.../src/it/clone/src/main/mdo/thing.mdo | 187 ++++++++++++++++++
.../clone/src/test/java/test/CloneTest.java | 87 ++++++++
modello-maven-plugin/src/it/settings.xml | 55 ++++++
8 files changed, 810 insertions(+)
create mode 100644 modello-maven-plugin/src/it/clone-java5/pom.xml
create mode 100644 modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo
create mode 100644 modello-maven-plugin/src/it/clone-java5/src/test/java/test/CloneTest.java
create mode 100644 modello-maven-plugin/src/it/clone/pom.xml
create mode 100644 modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo
create mode 100644 modello-maven-plugin/src/it/clone/src/test/java/test/CloneTest.java
create mode 100644 modello-maven-plugin/src/it/settings.xml
diff --git a/modello-maven-plugin/pom.xml b/modello-maven-plugin/pom.xml
index cad07f48c..f17dd044b 100644
--- a/modello-maven-plugin/pom.xml
+++ b/modello-maven-plugin/pom.xml
@@ -112,4 +112,67 @@
+
+
+
+ run-its
+
+
+
+ org.apache.maven.plugins
+ maven-invoker-plugin
+ 1.3
+
+ src/it
+ ${project.build.directory}/it
+
+ */pom.xml
+
+ verify.bsh
+ src/it/settings.xml
+ ${project.build.directory}/local-repo
+ true
+
+ 1.5.8
+ 3.8.2
+
+
+ clean
+ test
+
+
+
+
+ integration-test
+
+ install
+ run
+
+
+
+
+
+
+
+
+ run-its-java14
+
+ 1.4
+
+
+
+
+ org.apache.maven.plugins
+ maven-invoker-plugin
+ 1.3
+
+
+ clone-java5/**
+
+
+
+
+
+
+
diff --git a/modello-maven-plugin/src/it/clone-java5/pom.xml b/modello-maven-plugin/src/it/clone-java5/pom.xml
new file mode 100644
index 000000000..83f32c6ea
--- /dev/null
+++ b/modello-maven-plugin/src/it/clone-java5/pom.xml
@@ -0,0 +1,72 @@
+
+
+
+ 4.0.0
+
+ org.codehaus.modello.its
+ clone
+ 0.1-SNAPSHOT
+
+ Clone IT
+
+ Test the generation of clone() methods.
+
+
+
+
+ org.codehaus.plexus
+ plexus-utils
+ @plexusUtilsVersion@
+
+
+ junit
+ junit
+ @junitVersion@
+
+
+
+
+ test
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 2.0.2
+
+ 1.5
+ 1.5
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 2.2
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.4.3
+
+
+ org.codehaus.modello
+ modello-maven-plugin
+ @project.version@
+
+ 1.0.0
+ true
+
+ src/main/mdo/thing.mdo
+
+
+
+
+ standard
+
+ java
+
+
+
+
+
+
+
diff --git a/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo b/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo
new file mode 100644
index 000000000..0ab8a725e
--- /dev/null
+++ b/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo
@@ -0,0 +1,187 @@
+
+
+
+ thing
+ Thing
+
+
+ package
+ test
+
+
+
+
+
+ SuperThing
+ 1.0.0
+
+
+ Thing
+ SuperThing
+ 1.0.0
+
+
+
+ someBoolean
+ 1.0.0
+ boolean
+
+
+ someChar
+ 1.0.0
+ char
+
+
+ someByte
+ 1.0.0
+ byte
+
+
+ someShort
+ 1.0.0
+ short
+
+
+ someInt
+ 1.0.0
+ int
+
+
+ someLong
+ 1.0.0
+ long
+
+
+ someFloat
+ 1.0.0
+ float
+
+
+ someDouble
+ 1.0.0
+ double
+
+
+ someString
+ 1.0.0
+ String
+
+
+ someDate
+ 1.0.0
+ Date
+
+
+ someDom
+ 1.0.0
+ DOM
+
+
+
+ someProperties
+ 1.0.0
+ Properties
+
+ String
+ *
+
+
+
+ someStringList
+ 1.0.0
+ List
+
+ String
+ *
+
+
+
+ someStringSet
+ 1.0.0
+ Set
+
+ String
+ *
+
+
+
+
+ deepThingyList
+ 1.0.0
+ List
+
+ Thingy
+ *
+
+
+
+ deepThingySet
+ 1.0.0
+ Set
+
+ Thingy
+ *
+
+
+
+
+ shallowThingyList
+ 1.0.0
+ List
+
+ Thingy
+ *
+
+
+
+ shallowThingySet
+ 1.0.0
+ Set
+
+ Thingy
+ *
+
+
+
+
+
+ 1.0.0
+
+
+
+
+
+
+ Thingy
+ SuperThing
+ 1.0.0
+
+
+
diff --git a/modello-maven-plugin/src/it/clone-java5/src/test/java/test/CloneTest.java b/modello-maven-plugin/src/it/clone-java5/src/test/java/test/CloneTest.java
new file mode 100644
index 000000000..b38dce6c0
--- /dev/null
+++ b/modello-maven-plugin/src/it/clone-java5/src/test/java/test/CloneTest.java
@@ -0,0 +1,88 @@
+package test;
+
+import java.util.Date;
+
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+import junit.framework.TestCase;
+
+public class CloneTest
+ extends TestCase
+{
+
+ public void testNullSafe()
+ throws Exception
+ {
+ Thing orig = new Thing();
+
+ Thing copy = (Thing) orig.clone();
+
+ assertNotNull( copy );
+ assertNotSame( orig, copy );
+ }
+
+ public void testClone()
+ throws Exception
+ {
+ Thing orig = new Thing();
+ orig.setSomeBoolean( true );
+ orig.setSomeChar( 'X' );
+ orig.setSomeByte( (byte) 7 );
+ orig.setSomeShort( (short) 11 );
+ orig.setSomeInt( 13 );
+ orig.setSomeLong( 17 );
+ orig.setSomeFloat( -2.5f );
+ orig.setSomeDouble( 3.14 );
+ orig.setSomeString( "test" );
+ orig.setSomeDate( new Date() );
+ orig.setSomeDom( new Xpp3Dom( "test" ) );
+ orig.addSomeStringList( "string" );
+ orig.addSomeStringSet( "string" );
+ orig.addDeepThingyList( new Thingy() );
+ orig.addDeepThingySet( new Thingy() );
+ orig.addShallowThingyList( new Thingy() );
+ orig.addShallowThingySet( new Thingy() );
+ orig.addSomeProperty( "key", "value" );
+ orig.customProperties.setProperty( "key", "value" );
+
+ // NOTE: This has no cast and checks for covariant return value
+ Thing copy = orig.clone();
+
+ assertNotNull( copy );
+ assertNotSame( orig, copy );
+
+ assertEquals( orig.isSomeBoolean(), copy.isSomeBoolean() );
+ assertEquals( orig.getSomeChar(), copy.getSomeChar() );
+ assertEquals( orig.getSomeByte(), copy.getSomeByte() );
+ assertEquals( orig.getSomeShort(), copy.getSomeShort() );
+ assertEquals( orig.getSomeInt(), copy.getSomeInt() );
+ assertEquals( orig.getSomeLong(), copy.getSomeLong() );
+ assertEquals( orig.getSomeFloat(), copy.getSomeFloat(), 0.1 );
+ assertEquals( orig.getSomeDouble(), copy.getSomeDouble(), 0.1 );
+ assertEquals( orig.getSomeString(), copy.getSomeString() );
+
+ assertEquals( orig.getSomeDate(), copy.getSomeDate() );
+ assertNotSame( orig.getSomeDate(), copy.getSomeDate() );
+ assertEquals( orig.getSomeDom(), copy.getSomeDom() );
+ assertNotSame( orig.getSomeDom(), copy.getSomeDom() );
+
+ assertEquals( orig.getSomeStringList(), copy.getSomeStringList() );
+ assertNotSame( orig.getSomeStringList(), copy.getSomeStringList() );
+ assertEquals( orig.getSomeStringSet(), copy.getSomeStringSet() );
+ assertNotSame( orig.getSomeStringSet(), copy.getSomeStringSet() );
+
+ assertNotSame( orig.getDeepThingyList(), copy.getDeepThingyList() );
+ assertNotSame( orig.getDeepThingyList().iterator().next(), copy.getDeepThingyList().iterator().next() );
+ assertNotSame( orig.getDeepThingySet(), copy.getDeepThingySet() );
+ assertNotSame( orig.getDeepThingySet().iterator().next(), copy.getDeepThingySet().iterator().next() );
+
+ assertNotSame( orig.getShallowThingyList(), copy.getShallowThingyList() );
+ assertSame( orig.getShallowThingyList().iterator().next(), copy.getShallowThingyList().iterator().next() );
+ assertNotSame( orig.getShallowThingySet(), copy.getShallowThingySet() );
+ assertSame( orig.getShallowThingySet().iterator().next(), copy.getShallowThingySet().iterator().next() );
+
+ assertEquals( orig.customProperties, copy.customProperties );
+ assertNotSame( orig.customProperties, copy.customProperties );
+ }
+
+}
diff --git a/modello-maven-plugin/src/it/clone/pom.xml b/modello-maven-plugin/src/it/clone/pom.xml
new file mode 100644
index 000000000..e3e73755d
--- /dev/null
+++ b/modello-maven-plugin/src/it/clone/pom.xml
@@ -0,0 +1,71 @@
+
+
+
+ 4.0.0
+
+ org.codehaus.modello.its
+ clone
+ 0.1-SNAPSHOT
+
+ Clone IT
+
+ Test the generation of clone() methods.
+
+
+
+
+ org.codehaus.plexus
+ plexus-utils
+ @plexusUtilsVersion@
+
+
+ junit
+ junit
+ @junitVersion@
+
+
+
+
+ test
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 2.0.2
+
+ 1.4
+ 1.4
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 2.2
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.4.3
+
+
+ org.codehaus.modello
+ modello-maven-plugin
+ @project.version@
+
+ 1.0.0
+
+ src/main/mdo/thing.mdo
+
+
+
+
+ standard
+
+ java
+
+
+
+
+
+
+
diff --git a/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo b/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo
new file mode 100644
index 000000000..0ab8a725e
--- /dev/null
+++ b/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo
@@ -0,0 +1,187 @@
+
+
+
+ thing
+ Thing
+
+
+ package
+ test
+
+
+
+
+
+ SuperThing
+ 1.0.0
+
+
+ Thing
+ SuperThing
+ 1.0.0
+
+
+
+ someBoolean
+ 1.0.0
+ boolean
+
+
+ someChar
+ 1.0.0
+ char
+
+
+ someByte
+ 1.0.0
+ byte
+
+
+ someShort
+ 1.0.0
+ short
+
+
+ someInt
+ 1.0.0
+ int
+
+
+ someLong
+ 1.0.0
+ long
+
+
+ someFloat
+ 1.0.0
+ float
+
+
+ someDouble
+ 1.0.0
+ double
+
+
+ someString
+ 1.0.0
+ String
+
+
+ someDate
+ 1.0.0
+ Date
+
+
+ someDom
+ 1.0.0
+ DOM
+
+
+
+ someProperties
+ 1.0.0
+ Properties
+
+ String
+ *
+
+
+
+ someStringList
+ 1.0.0
+ List
+
+ String
+ *
+
+
+
+ someStringSet
+ 1.0.0
+ Set
+
+ String
+ *
+
+
+
+
+ deepThingyList
+ 1.0.0
+ List
+
+ Thingy
+ *
+
+
+
+ deepThingySet
+ 1.0.0
+ Set
+
+ Thingy
+ *
+
+
+
+
+ shallowThingyList
+ 1.0.0
+ List
+
+ Thingy
+ *
+
+
+
+ shallowThingySet
+ 1.0.0
+ Set
+
+ Thingy
+ *
+
+
+
+
+
+ 1.0.0
+
+
+
+
+
+
+ Thingy
+ SuperThing
+ 1.0.0
+
+
+
diff --git a/modello-maven-plugin/src/it/clone/src/test/java/test/CloneTest.java b/modello-maven-plugin/src/it/clone/src/test/java/test/CloneTest.java
new file mode 100644
index 000000000..be516e75a
--- /dev/null
+++ b/modello-maven-plugin/src/it/clone/src/test/java/test/CloneTest.java
@@ -0,0 +1,87 @@
+package test;
+
+import java.util.Date;
+
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+import junit.framework.TestCase;
+
+public class CloneTest
+ extends TestCase
+{
+
+ public void testNullSafe()
+ throws Exception
+ {
+ Thing orig = new Thing();
+
+ Thing copy = (Thing) orig.clone();
+
+ assertNotNull( copy );
+ assertNotSame( orig, copy );
+ }
+
+ public void testClone()
+ throws Exception
+ {
+ Thing orig = new Thing();
+ orig.setSomeBoolean( true );
+ orig.setSomeChar( 'X' );
+ orig.setSomeByte( (byte) 7 );
+ orig.setSomeShort( (short) 11 );
+ orig.setSomeInt( 13 );
+ orig.setSomeLong( 17 );
+ orig.setSomeFloat( -2.5f );
+ orig.setSomeDouble( 3.14 );
+ orig.setSomeString( "test" );
+ orig.setSomeDate( new Date() );
+ orig.setSomeDom( new Xpp3Dom( "test" ) );
+ orig.addSomeStringList( "string" );
+ orig.addSomeStringSet( "string" );
+ orig.addDeepThingyList( new Thingy() );
+ orig.addDeepThingySet( new Thingy() );
+ orig.addShallowThingyList( new Thingy() );
+ orig.addShallowThingySet( new Thingy() );
+ orig.addSomeProperty( "key", "value" );
+ orig.customProperties.setProperty( "key", "value" );
+
+ Thing copy = (Thing) orig.clone();
+
+ assertNotNull( copy );
+ assertNotSame( orig, copy );
+
+ assertEquals( orig.isSomeBoolean(), copy.isSomeBoolean() );
+ assertEquals( orig.getSomeChar(), copy.getSomeChar() );
+ assertEquals( orig.getSomeByte(), copy.getSomeByte() );
+ assertEquals( orig.getSomeShort(), copy.getSomeShort() );
+ assertEquals( orig.getSomeInt(), copy.getSomeInt() );
+ assertEquals( orig.getSomeLong(), copy.getSomeLong() );
+ assertEquals( orig.getSomeFloat(), copy.getSomeFloat(), 0.1 );
+ assertEquals( orig.getSomeDouble(), copy.getSomeDouble(), 0.1 );
+ assertEquals( orig.getSomeString(), copy.getSomeString() );
+
+ assertEquals( orig.getSomeDate(), copy.getSomeDate() );
+ assertNotSame( orig.getSomeDate(), copy.getSomeDate() );
+ assertEquals( orig.getSomeDom(), copy.getSomeDom() );
+ assertNotSame( orig.getSomeDom(), copy.getSomeDom() );
+
+ assertEquals( orig.getSomeStringList(), copy.getSomeStringList() );
+ assertNotSame( orig.getSomeStringList(), copy.getSomeStringList() );
+ assertEquals( orig.getSomeStringSet(), copy.getSomeStringSet() );
+ assertNotSame( orig.getSomeStringSet(), copy.getSomeStringSet() );
+
+ assertNotSame( orig.getDeepThingyList(), copy.getDeepThingyList() );
+ assertNotSame( orig.getDeepThingyList().iterator().next(), copy.getDeepThingyList().iterator().next() );
+ assertNotSame( orig.getDeepThingySet(), copy.getDeepThingySet() );
+ assertNotSame( orig.getDeepThingySet().iterator().next(), copy.getDeepThingySet().iterator().next() );
+
+ assertNotSame( orig.getShallowThingyList(), copy.getShallowThingyList() );
+ assertSame( orig.getShallowThingyList().iterator().next(), copy.getShallowThingyList().iterator().next() );
+ assertNotSame( orig.getShallowThingySet(), copy.getShallowThingySet() );
+ assertSame( orig.getShallowThingySet().iterator().next(), copy.getShallowThingySet().iterator().next() );
+
+ assertEquals( orig.customProperties, copy.customProperties );
+ assertNotSame( orig.customProperties, copy.customProperties );
+ }
+
+}
diff --git a/modello-maven-plugin/src/it/settings.xml b/modello-maven-plugin/src/it/settings.xml
new file mode 100644
index 000000000..c8f77f0b7
--- /dev/null
+++ b/modello-maven-plugin/src/it/settings.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ it-repo
+
+ true
+
+
+
+ local.central
+ @localRepositoryUrl@
+
+ true
+
+
+ true
+
+
+
+
+
+ local.central
+ @localRepositoryUrl@
+
+ true
+
+
+ true
+
+
+
+
+
+
From f72ae296a506c39268589a4dadb3acd8f8b80b53 Mon Sep 17 00:00:00 2001
From: bentmann
Date: Sat, 6 Jun 2009 11:33:31 +0000
Subject: [PATCH 07/13] [MODELLO-191] Add support to generate clone() methods
o Extended ITs to check 1:1 associations
---
.../src/it/clone-java5/src/main/mdo/thing.mdo | 16 ++++++++++++++++
.../src/test/java/test/CloneTest.java | 4 ++++
.../src/it/clone/src/main/mdo/thing.mdo | 16 ++++++++++++++++
.../it/clone/src/test/java/test/CloneTest.java | 4 ++++
4 files changed, 40 insertions(+)
diff --git a/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo b/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo
index 0ab8a725e..a03d9e8ba 100644
--- a/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo
+++ b/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo
@@ -122,6 +122,14 @@ under the License.
+
+ deepThingy
+ 1.0.0
+
+ Thingy
+ 1
+
+
deepThingyList
1.0.0
@@ -141,6 +149,14 @@ under the License.
+
+ shallowThingy
+ 1.0.0
+
+ Thingy
+ 1
+
+
shallowThingyList
1.0.0
diff --git a/modello-maven-plugin/src/it/clone-java5/src/test/java/test/CloneTest.java b/modello-maven-plugin/src/it/clone-java5/src/test/java/test/CloneTest.java
index b38dce6c0..15d2f0e15 100644
--- a/modello-maven-plugin/src/it/clone-java5/src/test/java/test/CloneTest.java
+++ b/modello-maven-plugin/src/it/clone-java5/src/test/java/test/CloneTest.java
@@ -38,8 +38,10 @@ public void testClone()
orig.setSomeDom( new Xpp3Dom( "test" ) );
orig.addSomeStringList( "string" );
orig.addSomeStringSet( "string" );
+ orig.setDeepThingy( new Thingy() );
orig.addDeepThingyList( new Thingy() );
orig.addDeepThingySet( new Thingy() );
+ orig.setShallowThingy( new Thingy() );
orig.addShallowThingyList( new Thingy() );
orig.addShallowThingySet( new Thingy() );
orig.addSomeProperty( "key", "value" );
@@ -71,11 +73,13 @@ public void testClone()
assertEquals( orig.getSomeStringSet(), copy.getSomeStringSet() );
assertNotSame( orig.getSomeStringSet(), copy.getSomeStringSet() );
+ assertNotSame( orig.getDeepThingy(), copy.getDeepThingy() );
assertNotSame( orig.getDeepThingyList(), copy.getDeepThingyList() );
assertNotSame( orig.getDeepThingyList().iterator().next(), copy.getDeepThingyList().iterator().next() );
assertNotSame( orig.getDeepThingySet(), copy.getDeepThingySet() );
assertNotSame( orig.getDeepThingySet().iterator().next(), copy.getDeepThingySet().iterator().next() );
+ assertSame( orig.getShallowThingy(), copy.getShallowThingy() );
assertNotSame( orig.getShallowThingyList(), copy.getShallowThingyList() );
assertSame( orig.getShallowThingyList().iterator().next(), copy.getShallowThingyList().iterator().next() );
assertNotSame( orig.getShallowThingySet(), copy.getShallowThingySet() );
diff --git a/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo b/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo
index 0ab8a725e..a03d9e8ba 100644
--- a/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo
+++ b/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo
@@ -122,6 +122,14 @@ under the License.
+
+ deepThingy
+ 1.0.0
+
+ Thingy
+ 1
+
+
deepThingyList
1.0.0
@@ -141,6 +149,14 @@ under the License.
+
+ shallowThingy
+ 1.0.0
+
+ Thingy
+ 1
+
+
shallowThingyList
1.0.0
diff --git a/modello-maven-plugin/src/it/clone/src/test/java/test/CloneTest.java b/modello-maven-plugin/src/it/clone/src/test/java/test/CloneTest.java
index be516e75a..41f8e167c 100644
--- a/modello-maven-plugin/src/it/clone/src/test/java/test/CloneTest.java
+++ b/modello-maven-plugin/src/it/clone/src/test/java/test/CloneTest.java
@@ -38,8 +38,10 @@ public void testClone()
orig.setSomeDom( new Xpp3Dom( "test" ) );
orig.addSomeStringList( "string" );
orig.addSomeStringSet( "string" );
+ orig.setDeepThingy( new Thingy() );
orig.addDeepThingyList( new Thingy() );
orig.addDeepThingySet( new Thingy() );
+ orig.setShallowThingy( new Thingy() );
orig.addShallowThingyList( new Thingy() );
orig.addShallowThingySet( new Thingy() );
orig.addSomeProperty( "key", "value" );
@@ -70,11 +72,13 @@ public void testClone()
assertEquals( orig.getSomeStringSet(), copy.getSomeStringSet() );
assertNotSame( orig.getSomeStringSet(), copy.getSomeStringSet() );
+ assertNotSame( orig.getDeepThingy(), copy.getDeepThingy() );
assertNotSame( orig.getDeepThingyList(), copy.getDeepThingyList() );
assertNotSame( orig.getDeepThingyList().iterator().next(), copy.getDeepThingyList().iterator().next() );
assertNotSame( orig.getDeepThingySet(), copy.getDeepThingySet() );
assertNotSame( orig.getDeepThingySet().iterator().next(), copy.getDeepThingySet().iterator().next() );
+ assertSame( orig.getShallowThingy(), copy.getShallowThingy() );
assertNotSame( orig.getShallowThingyList(), copy.getShallowThingyList() );
assertSame( orig.getShallowThingyList().iterator().next(), copy.getShallowThingyList().iterator().next() );
assertNotSame( orig.getShallowThingySet(), copy.getShallowThingySet() );
From 0448af8cd9e72ff8a34b9e0e06766e90cac980c1 Mon Sep 17 00:00:00 2001
From: bentmann
Date: Sat, 6 Jun 2009 11:34:19 +0000
Subject: [PATCH 08/13] o Set svn:eol-style=native
---
.../src/it/clone-java5/src/main/mdo/thing.mdo | 406 +++++++++---------
.../src/it/clone/src/main/mdo/thing.mdo | 406 +++++++++---------
2 files changed, 406 insertions(+), 406 deletions(-)
diff --git a/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo b/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo
index a03d9e8ba..aa8a806d2 100644
--- a/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo
+++ b/modello-maven-plugin/src/it/clone-java5/src/main/mdo/thing.mdo
@@ -1,203 +1,203 @@
-
-
-
- thing
- Thing
-
-
- package
- test
-
-
-
-
-
- SuperThing
- 1.0.0
-
-
- Thing
- SuperThing
- 1.0.0
-
-
-
- someBoolean
- 1.0.0
- boolean
-
-
- someChar
- 1.0.0
- char
-
-
- someByte
- 1.0.0
- byte
-
-
- someShort
- 1.0.0
- short
-
-
- someInt
- 1.0.0
- int
-
-
- someLong
- 1.0.0
- long
-
-
- someFloat
- 1.0.0
- float
-
-
- someDouble
- 1.0.0
- double
-
-
- someString
- 1.0.0
- String
-
-
- someDate
- 1.0.0
- Date
-
-
- someDom
- 1.0.0
- DOM
-
-
-
- someProperties
- 1.0.0
- Properties
-
- String
- *
-
-
-
- someStringList
- 1.0.0
- List
-
- String
- *
-
-
-
- someStringSet
- 1.0.0
- Set
-
- String
- *
-
-
-
-
- deepThingy
- 1.0.0
-
- Thingy
- 1
-
-
-
- deepThingyList
- 1.0.0
- List
-
- Thingy
- *
-
-
-
- deepThingySet
- 1.0.0
- Set
-
- Thingy
- *
-
-
-
-
- shallowThingy
- 1.0.0
-
- Thingy
- 1
-
-
-
- shallowThingyList
- 1.0.0
- List
-
- Thingy
- *
-
-
-
- shallowThingySet
- 1.0.0
- Set
-
- Thingy
- *
-
-
-
-
-
- 1.0.0
-
-
-
-
-
-
- Thingy
- SuperThing
- 1.0.0
-
-
-
+
+
+
+ thing
+ Thing
+
+
+ package
+ test
+
+
+
+
+
+ SuperThing
+ 1.0.0
+
+
+ Thing
+ SuperThing
+ 1.0.0
+
+
+
+ someBoolean
+ 1.0.0
+ boolean
+
+
+ someChar
+ 1.0.0
+ char
+
+
+ someByte
+ 1.0.0
+ byte
+
+
+ someShort
+ 1.0.0
+ short
+
+
+ someInt
+ 1.0.0
+ int
+
+
+ someLong
+ 1.0.0
+ long
+
+
+ someFloat
+ 1.0.0
+ float
+
+
+ someDouble
+ 1.0.0
+ double
+
+
+ someString
+ 1.0.0
+ String
+
+
+ someDate
+ 1.0.0
+ Date
+
+
+ someDom
+ 1.0.0
+ DOM
+
+
+
+ someProperties
+ 1.0.0
+ Properties
+
+ String
+ *
+
+
+
+ someStringList
+ 1.0.0
+ List
+
+ String
+ *
+
+
+
+ someStringSet
+ 1.0.0
+ Set
+
+ String
+ *
+
+
+
+
+ deepThingy
+ 1.0.0
+
+ Thingy
+ 1
+
+
+
+ deepThingyList
+ 1.0.0
+ List
+
+ Thingy
+ *
+
+
+
+ deepThingySet
+ 1.0.0
+ Set
+
+ Thingy
+ *
+
+
+
+
+ shallowThingy
+ 1.0.0
+
+ Thingy
+ 1
+
+
+
+ shallowThingyList
+ 1.0.0
+ List
+
+ Thingy
+ *
+
+
+
+ shallowThingySet
+ 1.0.0
+ Set
+
+ Thingy
+ *
+
+
+
+
+
+ 1.0.0
+
+
+
+
+
+
+ Thingy
+ SuperThing
+ 1.0.0
+
+
+
diff --git a/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo b/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo
index a03d9e8ba..aa8a806d2 100644
--- a/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo
+++ b/modello-maven-plugin/src/it/clone/src/main/mdo/thing.mdo
@@ -1,203 +1,203 @@
-
-
-
- thing
- Thing
-
-
- package
- test
-
-
-
-
-
- SuperThing
- 1.0.0
-
-
- Thing
- SuperThing
- 1.0.0
-
-
-
- someBoolean
- 1.0.0
- boolean
-
-
- someChar
- 1.0.0
- char
-
-
- someByte
- 1.0.0
- byte
-
-
- someShort
- 1.0.0
- short
-
-
- someInt
- 1.0.0
- int
-
-
- someLong
- 1.0.0
- long
-
-
- someFloat
- 1.0.0
- float
-
-
- someDouble
- 1.0.0
- double
-
-
- someString
- 1.0.0
- String
-
-
- someDate
- 1.0.0
- Date
-
-
- someDom
- 1.0.0
- DOM
-
-
-
- someProperties
- 1.0.0
- Properties
-
- String
- *
-
-
-
- someStringList
- 1.0.0
- List
-
- String
- *
-
-
-
- someStringSet
- 1.0.0
- Set
-
- String
- *
-
-
-
-
- deepThingy
- 1.0.0
-
- Thingy
- 1
-
-
-
- deepThingyList
- 1.0.0
- List
-
- Thingy
- *
-
-
-
- deepThingySet
- 1.0.0
- Set
-
- Thingy
- *
-
-
-
-
- shallowThingy
- 1.0.0
-
- Thingy
- 1
-
-
-
- shallowThingyList
- 1.0.0
- List
-
- Thingy
- *
-
-
-
- shallowThingySet
- 1.0.0
- Set
-
- Thingy
- *
-
-
-
-
-
- 1.0.0
-
-
-
-
-
-
- Thingy
- SuperThing
- 1.0.0
-
-
-
+
+
+
+ thing
+ Thing
+
+
+ package
+ test
+
+
+
+
+
+ SuperThing
+ 1.0.0
+
+
+ Thing
+ SuperThing
+ 1.0.0
+
+
+
+ someBoolean
+ 1.0.0
+ boolean
+
+
+ someChar
+ 1.0.0
+ char
+
+
+ someByte
+ 1.0.0
+ byte
+
+
+ someShort
+ 1.0.0
+ short
+
+
+ someInt
+ 1.0.0
+ int
+
+
+ someLong
+ 1.0.0
+ long
+
+
+ someFloat
+ 1.0.0
+ float
+
+
+ someDouble
+ 1.0.0
+ double
+
+
+ someString
+ 1.0.0
+ String
+
+
+ someDate
+ 1.0.0
+ Date
+
+
+ someDom
+ 1.0.0
+ DOM
+
+
+
+ someProperties
+ 1.0.0
+ Properties
+
+ String
+ *
+
+
+
+ someStringList
+ 1.0.0
+ List
+
+ String
+ *
+
+
+
+ someStringSet
+ 1.0.0
+ Set
+
+ String
+ *
+
+
+
+
+ deepThingy
+ 1.0.0
+
+ Thingy
+ 1
+
+
+
+ deepThingyList
+ 1.0.0
+ List
+
+ Thingy
+ *
+
+
+
+ deepThingySet
+ 1.0.0
+ Set
+
+ Thingy
+ *
+
+
+
+
+ shallowThingy
+ 1.0.0
+
+ Thingy
+ 1
+
+
+
+ shallowThingyList
+ 1.0.0
+ List
+
+ Thingy
+ *
+
+
+
+ shallowThingySet
+ 1.0.0
+ Set
+
+ Thingy
+ *
+
+
+
+
+
+ 1.0.0
+
+
+
+
+
+
+ Thingy
+ SuperThing
+ 1.0.0
+
+
+
From 87570e8120fedd008726c356bf7071a3deb65ff1 Mon Sep 17 00:00:00 2001
From: bentmann
Date: Sat, 27 Jun 2009 09:56:15 +0000
Subject: [PATCH 09/13] [MODELLO-191] Add support to generate clone() methods
o Bumped version of model to 1.1.0 to catch up with the targetted Modello version
---
pom.xml | 2 +-
src/main/mdo/modello.mdo | 19 ++++++++++---------
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/pom.xml b/pom.xml
index 153cc3b2a..73fb8f272 100644
--- a/pom.xml
+++ b/pom.xml
@@ -493,7 +493,7 @@
src/main/mdo/modello.mdo
- 1.0.1
+ 1.1.0
diff --git a/src/main/mdo/modello.mdo b/src/main/mdo/modello.mdo
index f8a4c5e51..f7e703904 100644
--- a/src/main/mdo/modello.mdo
+++ b/src/main/mdo/modello.mdo
@@ -1,7 +1,7 @@
-
modello
@@ -10,7 +10,7 @@
This is a reference for the Modello descriptor used to describe a model with Modello.
An XSD is available at
- http://modello.codehaus.org/xsd/modello-1.0.0.xsd.
+ http://modello.codehaus.org/xsd/modello-1.1.0.xsd.
]]>
@@ -322,18 +322,18 @@
javaClone
- 1.0.1+
+ 1.1.0+
String
clone() method for this class. Allowed values are
none
, shallow
and deep
. The value is inherited from super classes
- and defaults to none
if no super class declares otherwise.]]>
+ and defaults to none
if no super class declares otherwise. Since Modello 1.1]]>
see org.codehaus.modello.plugin.java.metadata.JavaMetadataPlugin
javaCloneHook
- 1.0.1+
+ 1.1.0+
String
clone() method.
@@ -342,7 +342,7 @@
the default method name cloneHook
. The hook method itself must have a single parameter whose
type matches this class in order to receive the cloned object for further manipulation before completion of
the clone operation. Besides, the hook method must not have a return value and must not throw a checked
- exception.]]>
+ exception. Since Modello 1.1]]>
see org.codehaus.modello.plugin.java.metadata.JavaMetadataPlugin
@@ -601,11 +601,12 @@
javaClone
- 1.0.1+
+ 1.1.0+
String
shallow and
- deep
. If the value is not specified, the clone mode of the container class will be used.]]>
+ deep
. If the value is not specified, the clone mode of the container class will be used.
+ Since Modello 1.1]]>
see org.codehaus.modello.plugin.java.metadata.JavaMetadataPlugin
From be7ea8dceb795d06a87c5895413dea2e7d2a1d7c Mon Sep 17 00:00:00 2001
From: bentmann
Date: Sat, 27 Jun 2009 10:06:33 +0000
Subject: [PATCH 10/13] [MODELLO-191] Add support to generate clone() methods
o Bumped version of model to 1.1.0 to catch up with the targetted Modello version
---
.../codehaus/modello/plugin/xsd/ModelloXsdGeneratorTest.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/modello-plugins/modello-plugin-xsd/src/test/java/org/codehaus/modello/plugin/xsd/ModelloXsdGeneratorTest.java b/modello-plugins/modello-plugin-xsd/src/test/java/org/codehaus/modello/plugin/xsd/ModelloXsdGeneratorTest.java
index c136e638d..82379d8fe 100644
--- a/modello-plugins/modello-plugin-xsd/src/test/java/org/codehaus/modello/plugin/xsd/ModelloXsdGeneratorTest.java
+++ b/modello-plugins/modello-plugin-xsd/src/test/java/org/codehaus/modello/plugin/xsd/ModelloXsdGeneratorTest.java
@@ -59,7 +59,7 @@ public void testXsdGenerator()
Properties parameters = new Properties();
parameters.setProperty( ModelloParameterConstants.OUTPUT_DIRECTORY, getOutputDirectory().getAbsolutePath() );
parameters.setProperty( ModelloParameterConstants.PACKAGE_WITH_VERSION, Boolean.toString( false ) );
- parameters.setProperty( ModelloParameterConstants.VERSION, "1.0.0" );
+ parameters.setProperty( ModelloParameterConstants.VERSION, "1.1.0" );
Model model = modello.loadModel( getTestFile( "../../src/main/mdo/modello.mdo" ) );
@@ -82,7 +82,7 @@ public void testXsdGenerator()
saxParser.setProperty( "http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema" );
saxParser.setProperty( "http://java.sun.com/xml/jaxp/properties/schemaSource",
- new File( getOutputDirectory(), "modello-1.0.0.xsd" ) );
+ new File( getOutputDirectory(), "modello-1.1.0.xsd" ) );
// first self-test: validate Modello model with xsd generated from it
saxParser.parse( getTestFile( "../../src/main/mdo/modello.mdo" ), new Handler() );
From 9f546c2a07363fe8882cb61fe602df5c2dda1540 Mon Sep 17 00:00:00 2001
From: bentmann
Date: Sat, 27 Jun 2009 12:00:36 +0000
Subject: [PATCH 11/13] o Pulled -r1252 from trunk
---
modello-core/pom.xml | 2 +-
modello-maven-plugin/pom.xml | 2 +-
.../modello/maven/ModelloDom4jReaderMojo.java | 2 +-
.../modello/maven/ModelloDom4jWriterMojo.java | 2 +-
.../modello-plugin-converters/pom.xml | 2 +-
modello-plugins/modello-plugin-dom4j/pom.xml | 2 +-
.../features/Dom4jFeaturesVerifier.java | 2 +-
modello-plugins/modello-plugin-java/pom.xml | 2 +-
.../java/metadata/JavaMetadataPlugin.java | 2 +-
.../java/FeaturesJava5GeneratorTest.java | 74 +++++++++++++++++++
.../features-version/JavaVerifier.java | 2 +-
.../test/verifiers/features/JavaVerifier.java | 4 +-
modello-plugins/modello-plugin-jdom/pom.xml | 2 +-
.../features/JDOMFeaturesVerifier.java | 2 +-
modello-plugins/modello-plugin-stax/pom.xml | 2 +-
.../features/StaxFeaturesVerifier.java | 2 +-
modello-plugins/modello-plugin-xdoc/pom.xml | 2 +-
modello-plugins/modello-plugin-xml/pom.xml | 2 +-
modello-plugins/modello-plugin-xpp3/pom.xml | 2 +-
.../features/Xpp3FeaturesVerifier.java | 2 +-
modello-plugins/modello-plugin-xsd/pom.xml | 2 +-
modello-plugins/pom.xml | 2 +-
modello-test/pom.xml | 2 +-
.../AbstractModelloJavaGeneratorTest.java | 18 ++++-
pom.xml | 6 +-
src/site/apt/release-notes.apt | 19 +++++
26 files changed, 136 insertions(+), 27 deletions(-)
create mode 100644 modello-plugins/modello-plugin-java/src/test/java/org/codehaus/modello/plugin/java/FeaturesJava5GeneratorTest.java
diff --git a/modello-core/pom.xml b/modello-core/pom.xml
index 00ff85cfc..b31466b4d 100644
--- a/modello-core/pom.xml
+++ b/modello-core/pom.xml
@@ -3,7 +3,7 @@
modello
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-maven-plugin/pom.xml b/modello-maven-plugin/pom.xml
index f17dd044b..51fd2d1fd 100644
--- a/modello-maven-plugin/pom.xml
+++ b/modello-maven-plugin/pom.xml
@@ -3,7 +3,7 @@
modello
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloDom4jReaderMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloDom4jReaderMojo.java
index cfb4b3f17..ce2833dc0 100644
--- a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloDom4jReaderMojo.java
+++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloDom4jReaderMojo.java
@@ -5,7 +5,7 @@
/**
* Creates a DOM4J reader from the model.
*
- * @version $Id:$
+ * @version $Id$
* @goal dom4j-reader
* @phase generate-sources
*/
diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloDom4jWriterMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloDom4jWriterMojo.java
index b67cd27e8..47b7ce9ff 100644
--- a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloDom4jWriterMojo.java
+++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloDom4jWriterMojo.java
@@ -5,7 +5,7 @@
/**
* Creates a DOM4J writer from the model.
*
- * @version $Id:$
+ * @version $Id$
* @goal dom4j-writer
* @phase generate-sources
*/
diff --git a/modello-plugins/modello-plugin-converters/pom.xml b/modello-plugins/modello-plugin-converters/pom.xml
index 7c3b81fcb..9be1e7469 100644
--- a/modello-plugins/modello-plugin-converters/pom.xml
+++ b/modello-plugins/modello-plugin-converters/pom.xml
@@ -3,7 +3,7 @@
modello-plugins
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-plugins/modello-plugin-dom4j/pom.xml b/modello-plugins/modello-plugin-dom4j/pom.xml
index 107a4e611..d355623a9 100644
--- a/modello-plugins/modello-plugin-dom4j/pom.xml
+++ b/modello-plugins/modello-plugin-dom4j/pom.xml
@@ -3,7 +3,7 @@
modello-plugins
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-plugins/modello-plugin-dom4j/src/test/verifiers/features/Dom4jFeaturesVerifier.java b/modello-plugins/modello-plugin-dom4j/src/test/verifiers/features/Dom4jFeaturesVerifier.java
index ecdd2c40f..49faf6b2a 100644
--- a/modello-plugins/modello-plugin-dom4j/src/test/verifiers/features/Dom4jFeaturesVerifier.java
+++ b/modello-plugins/modello-plugin-dom4j/src/test/verifiers/features/Dom4jFeaturesVerifier.java
@@ -42,7 +42,7 @@
import java.io.StringWriter;
/**
- * @author Hervé Boutemy
+ * @author Herve Boutemy
* @version $Id$
*/
public class Dom4jFeaturesVerifier
diff --git a/modello-plugins/modello-plugin-java/pom.xml b/modello-plugins/modello-plugin-java/pom.xml
index 93bb00e07..3c8327777 100644
--- a/modello-plugins/modello-plugin-java/pom.xml
+++ b/modello-plugins/modello-plugin-java/pom.xml
@@ -3,7 +3,7 @@
modello-plugins
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java
index 550e75f45..1658ea182 100644
--- a/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java
+++ b/modello-plugins/modello-plugin-java/src/main/java/org/codehaus/modello/plugin/java/metadata/JavaMetadataPlugin.java
@@ -91,7 +91,7 @@ public FieldMetadata getFieldMetadata( ModelField field, Map data )
{
JavaFieldMetadata metadata = new JavaFieldMetadata();
- metadata.setSetter( getBoolean( data, JAVA_GETTER, true ) );
+ metadata.setGetter( getBoolean( data, JAVA_GETTER, true ) );
String fieldType = field.getType();
metadata.setBooleanGetter( ( fieldType != null ) && fieldType.endsWith( "oolean" ) );
diff --git a/modello-plugins/modello-plugin-java/src/test/java/org/codehaus/modello/plugin/java/FeaturesJava5GeneratorTest.java b/modello-plugins/modello-plugin-java/src/test/java/org/codehaus/modello/plugin/java/FeaturesJava5GeneratorTest.java
new file mode 100644
index 000000000..e38820714
--- /dev/null
+++ b/modello-plugins/modello-plugin-java/src/test/java/org/codehaus/modello/plugin/java/FeaturesJava5GeneratorTest.java
@@ -0,0 +1,74 @@
+package org.codehaus.modello.plugin.java;
+
+/*
+ * Copyright (c) 2004, Codehaus.org
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import org.codehaus.modello.AbstractModelloJavaGeneratorTest;
+import org.codehaus.modello.ModelloParameterConstants;
+import org.codehaus.modello.core.ModelloCore;
+import org.codehaus.modello.model.Model;
+
+import java.util.Properties;
+
+/**
+ * @author Benjamin Bentmann
+ * @version $Id$
+ */
+public class FeaturesJava5GeneratorTest
+ extends AbstractModelloJavaGeneratorTest
+{
+
+ public FeaturesJava5GeneratorTest()
+ {
+ super( "features" );
+ }
+
+ public void testJavaGenerator()
+ throws Throwable
+ {
+ String javaVersion = System.getProperty( "java.specification.version", "1.5" );
+
+ if ( "1.5".compareTo( javaVersion ) > 0 )
+ {
+ System.out.println( "Skipped Java 5 feature test, not supported by current test environment ("
+ + javaVersion + ")" );
+ return;
+ }
+
+ ModelloCore modello = (ModelloCore) lookup( ModelloCore.ROLE );
+
+ Properties parameters = new Properties();
+ parameters.setProperty( ModelloParameterConstants.OUTPUT_DIRECTORY, getOutputDirectory().getAbsolutePath() );
+ parameters.setProperty( ModelloParameterConstants.PACKAGE_WITH_VERSION, Boolean.toString( false ) );
+ parameters.setProperty( ModelloParameterConstants.VERSION, "2.0.0" );
+ parameters.setProperty( ModelloParameterConstants.USE_JAVA5, Boolean.toString( true ) );
+
+ Model model = modello.loadModel( getXmlResourceReader( "/features.mdo" ) );
+
+ modello.generate( model, "java", parameters );
+
+ compile( getOutputDirectory(), getOutputClasses(), true );
+
+ verify( "JavaVerifier", "java" );
+ }
+
+}
diff --git a/modello-plugins/modello-plugin-java/src/test/verifiers/features-version/JavaVerifier.java b/modello-plugins/modello-plugin-java/src/test/verifiers/features-version/JavaVerifier.java
index 71cd955cc..8405ed0e4 100644
--- a/modello-plugins/modello-plugin-java/src/test/verifiers/features-version/JavaVerifier.java
+++ b/modello-plugins/modello-plugin-java/src/test/verifiers/features-version/JavaVerifier.java
@@ -26,7 +26,7 @@
import junit.framework.Assert;
/**
- * @author Hervé Boutemy
+ * @author Herve Boutemy
* @version $Id$
*/
public class JavaVerifier
diff --git a/modello-plugins/modello-plugin-java/src/test/verifiers/features/JavaVerifier.java b/modello-plugins/modello-plugin-java/src/test/verifiers/features/JavaVerifier.java
index 6ed97e8a7..c6eba7d4e 100644
--- a/modello-plugins/modello-plugin-java/src/test/verifiers/features/JavaVerifier.java
+++ b/modello-plugins/modello-plugin-java/src/test/verifiers/features/JavaVerifier.java
@@ -56,7 +56,7 @@
import junit.framework.Assert;
/**
- * @author Hervé Boutemy
+ * @author Herve Boutemy
* @version $Id$
*/
public class JavaVerifier
@@ -103,7 +103,7 @@ private void checkField( Class clazz, String attributeName, Class type, String g
Assert.assertEquals( attributeName + " attribute type", type, field.getType() );
Assert.assertTrue( attributeName + " attribute should be private", Modifier.isPrivate( field.getModifiers() ) );
- Method getter = clazz.getMethod( getterName, null );
+ Method getter = clazz.getMethod( getterName, (Class[]) null );
Assert.assertNotNull( getterName + "() method", getter );
Assert.assertEquals( getterName + "() method return type", type, getter.getReturnType() );
Assert.assertTrue( getterName + "() method should be public", Modifier.isPublic( getter.getModifiers() ) );
diff --git a/modello-plugins/modello-plugin-jdom/pom.xml b/modello-plugins/modello-plugin-jdom/pom.xml
index 7bce8a1f2..6ce13a41c 100644
--- a/modello-plugins/modello-plugin-jdom/pom.xml
+++ b/modello-plugins/modello-plugin-jdom/pom.xml
@@ -3,7 +3,7 @@
modello-plugins
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-plugins/modello-plugin-jdom/src/test/verifiers/features/JDOMFeaturesVerifier.java b/modello-plugins/modello-plugin-jdom/src/test/verifiers/features/JDOMFeaturesVerifier.java
index 7f9cd99f5..e31bf25cc 100644
--- a/modello-plugins/modello-plugin-jdom/src/test/verifiers/features/JDOMFeaturesVerifier.java
+++ b/modello-plugins/modello-plugin-jdom/src/test/verifiers/features/JDOMFeaturesVerifier.java
@@ -44,7 +44,7 @@
import java.io.StringWriter;
/**
- * @author Hervé Boutemy
+ * @author Herve Boutemy
* @version $Id$
*/
public class JDOMFeaturesVerifier
diff --git a/modello-plugins/modello-plugin-stax/pom.xml b/modello-plugins/modello-plugin-stax/pom.xml
index aae926f58..fa22dfbbd 100644
--- a/modello-plugins/modello-plugin-stax/pom.xml
+++ b/modello-plugins/modello-plugin-stax/pom.xml
@@ -3,7 +3,7 @@
modello-plugins
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-plugins/modello-plugin-stax/src/test/verifiers/features/StaxFeaturesVerifier.java b/modello-plugins/modello-plugin-stax/src/test/verifiers/features/StaxFeaturesVerifier.java
index d7bdc1049..86594af7b 100644
--- a/modello-plugins/modello-plugin-stax/src/test/verifiers/features/StaxFeaturesVerifier.java
+++ b/modello-plugins/modello-plugin-stax/src/test/verifiers/features/StaxFeaturesVerifier.java
@@ -44,7 +44,7 @@
import javax.xml.stream.XMLStreamException;
/**
- * @author Hervé Boutemy
+ * @author Herve Boutemy
* @version $Id$
*/
public class StaxFeaturesVerifier
diff --git a/modello-plugins/modello-plugin-xdoc/pom.xml b/modello-plugins/modello-plugin-xdoc/pom.xml
index 93fb54047..c611d6471 100644
--- a/modello-plugins/modello-plugin-xdoc/pom.xml
+++ b/modello-plugins/modello-plugin-xdoc/pom.xml
@@ -3,7 +3,7 @@
modello-plugins
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-plugins/modello-plugin-xml/pom.xml b/modello-plugins/modello-plugin-xml/pom.xml
index 60052c1ac..5274660f7 100644
--- a/modello-plugins/modello-plugin-xml/pom.xml
+++ b/modello-plugins/modello-plugin-xml/pom.xml
@@ -3,7 +3,7 @@
modello-plugins
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-plugins/modello-plugin-xpp3/pom.xml b/modello-plugins/modello-plugin-xpp3/pom.xml
index b4a2528e6..41409e9a3 100644
--- a/modello-plugins/modello-plugin-xpp3/pom.xml
+++ b/modello-plugins/modello-plugin-xpp3/pom.xml
@@ -3,7 +3,7 @@
modello-plugins
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-plugins/modello-plugin-xpp3/src/test/verifiers/features/Xpp3FeaturesVerifier.java b/modello-plugins/modello-plugin-xpp3/src/test/verifiers/features/Xpp3FeaturesVerifier.java
index 62c25d27a..faf7b98a1 100644
--- a/modello-plugins/modello-plugin-xpp3/src/test/verifiers/features/Xpp3FeaturesVerifier.java
+++ b/modello-plugins/modello-plugin-xpp3/src/test/verifiers/features/Xpp3FeaturesVerifier.java
@@ -42,7 +42,7 @@
import java.io.StringWriter;
/**
- * @author Hervé Boutemy
+ * @author Herve Boutemy
* @version $Id$
*/
public class Xpp3FeaturesVerifier
diff --git a/modello-plugins/modello-plugin-xsd/pom.xml b/modello-plugins/modello-plugin-xsd/pom.xml
index 1b3544646..ad9d67703 100644
--- a/modello-plugins/modello-plugin-xsd/pom.xml
+++ b/modello-plugins/modello-plugin-xsd/pom.xml
@@ -3,7 +3,7 @@
modello-plugins
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-plugins/pom.xml b/modello-plugins/pom.xml
index e0c7dd211..b612ab46f 100644
--- a/modello-plugins/pom.xml
+++ b/modello-plugins/pom.xml
@@ -3,7 +3,7 @@
modello
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-test/pom.xml b/modello-test/pom.xml
index f49e7f2cf..099d400e6 100644
--- a/modello-test/pom.xml
+++ b/modello-test/pom.xml
@@ -3,7 +3,7 @@
modello
org.codehaus.modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
4.0.0
diff --git a/modello-test/src/main/java/org/codehaus/modello/AbstractModelloJavaGeneratorTest.java b/modello-test/src/main/java/org/codehaus/modello/AbstractModelloJavaGeneratorTest.java
index 2b533a53e..3cf27e79b 100755
--- a/modello-test/src/main/java/org/codehaus/modello/AbstractModelloJavaGeneratorTest.java
+++ b/modello-test/src/main/java/org/codehaus/modello/AbstractModelloJavaGeneratorTest.java
@@ -156,7 +156,13 @@ protected String getModelloVersion()
protected void compile( File generatedSources, File destinationDirectory )
throws IOException, CompilerException
{
- addDependency( "junit", "junit", "3.8.1" );
+ compile( generatedSources, destinationDirectory, false );
+ }
+
+ protected void compile( File generatedSources, File destinationDirectory, boolean useJava5 )
+ throws IOException, CompilerException
+ {
+ addDependency( "junit", "junit", "3.8.2" );
addDependency( "org.codehaus.plexus", "plexus-utils", "1.5.8" ); // version must be the same as in pom.xml
addDependency( "org.codehaus.modello", "modello-test", getModelloVersion() );
@@ -179,6 +185,16 @@ protected void compile( File generatedSources, File destinationDirectory )
configuration.setSourceLocations( Arrays.asList( sourceDirectories ) );
configuration.setOutputLocation( destinationDirectory.getAbsolutePath() );
configuration.setDebug( true );
+ if ( useJava5 )
+ {
+ configuration.setSourceVersion( "1.5" );
+ configuration.setTargetVersion( "1.5" );
+ }
+ else
+ {
+ configuration.setSourceVersion( "1.4" );
+ configuration.setTargetVersion( "1.4" );
+ }
List messages = compiler.compile( configuration );
diff --git a/pom.xml b/pom.xml
index 73fb8f272..6dfdbb972 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
modello
pom
Modello
- 1.0.2-SNAPSHOT
+ 1.1-SNAPSHOT
http://modello.codehaus.org/
Modello is a framework for code generation from a simple model.
@@ -245,7 +245,7 @@
maven-release-plugin
- 2.0-beta-7
+ 2.0-beta-9
https://svn.codehaus.org/modello/tags
@@ -317,7 +317,7 @@
junit
junit
- 3.8.1
+ 3.8.2
test
diff --git a/src/site/apt/release-notes.apt b/src/site/apt/release-notes.apt
index a24d40654..2db476a59 100644
--- a/src/site/apt/release-notes.apt
+++ b/src/site/apt/release-notes.apt
@@ -8,6 +8,25 @@
Modello
+* 1.0.2 Release Notes (2009-06-11)
+
+ The full list of changes can be found in our {{{http://jira.codehaus.org/secure/IssueNavigator.jspa?fixfor=15080&sorter/field=issuekey&sorter/order=DESC&reset=true}issue management system}}, and is reproduced below.
+
+
+** Bug
+
+ * [MODELLO-88] - converters goal generates wrong class names for continuum-model - won't compile
+
+ * [MODELLO-188] - Modello plugins are not available from ModelloCli or a standalone Modello instance
+
+ * [MODELLO-189] - Generated Xpp3Reader does not reconstruct modelEncoding
+
+ * [MODELLO-199] - java.getter attribute for field not initialize at all
+
+** Improvement
+
+ * [MODELLO-190] - Use StringBuilder for toString() when Java 1.5 is enabled
+
* 1.0.1 Release Notes (2009-03-09)
The full list of changes can be found in our {{{http://jira.codehaus.org/secure/IssueNavigator.jspa?fixfor=14892&sorter/field=issuekey&sorter/order=DESC&reset=true}issue management system}}, and is reproduced below.
From 2e62aedbefe3a969c26159211535999d889bbd88 Mon Sep 17 00:00:00 2001
From: bentmann
Date: Sat, 27 Jun 2009 13:11:22 +0000
Subject: [PATCH 12/13] o Pulled -r1254 from trunk
---
.../codehaus/modello/plugin/xsd/XsdGenerator.java | 3 ++-
modello-test/src/main/resources/features.mdo | 11 ++++++++++-
modello-test/src/main/resources/features.xml | 13 ++++++++-----
3 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/modello-plugins/modello-plugin-xsd/src/main/java/org/codehaus/modello/plugin/xsd/XsdGenerator.java b/modello-plugins/modello-plugin-xsd/src/main/java/org/codehaus/modello/plugin/xsd/XsdGenerator.java
index ad6c3ca04..75369179d 100644
--- a/modello-plugins/modello-plugin-xsd/src/main/java/org/codehaus/modello/plugin/xsd/XsdGenerator.java
+++ b/modello-plugins/modello-plugin-xsd/src/main/java/org/codehaus/modello/plugin/xsd/XsdGenerator.java
@@ -382,7 +382,8 @@ else if ( hasContentField )
}
writeFieldDocumentation( w, field );
- if ( List.class.getName().equals( field.getType() ) )
+ if ( List.class.getName().equals( field.getType() )
+ || Set.class.getName().equals( field.getType() ) )
{
ModelAssociation association = (ModelAssociation) field;
diff --git a/modello-test/src/main/resources/features.mdo b/modello-test/src/main/resources/features.mdo
index 0b4e8aa50..bbe6e6833 100644
--- a/modello-test/src/main/resources/features.mdo
+++ b/modello-test/src/main/resources/features.mdo
@@ -441,13 +441,22 @@
- stringReferences
+ listStrings
1.0.0+
String
*
+
+ setStrings
+ 1.0.0+
+ Set
+
+ String
+ *
+
+
map
2.0.0+
diff --git a/modello-test/src/main/resources/features.xml b/modello-test/src/main/resources/features.xml
index 2956107a9..1abc5d538 100644
--- a/modello-test/src/main/resources/features.xml
+++ b/modello-test/src/main/resources/features.xml
@@ -41,11 +41,14 @@
first
-
- first
- second
- third
-
+
+ first
+ second
+ third
+
+
+ first
+
theValue
From 733ce32cab20649dcb1856e828bf1cc2deb0b087 Mon Sep 17 00:00:00 2001
From: bentmann
Date: Sat, 27 Jun 2009 13:19:22 +0000
Subject: [PATCH 13/13] [MODELLO-191] Add support to generate clone() methods
o Added unit tests
---
.../test/verifiers/features/JavaVerifier.java | 93 +++++++++
modello-test/src/main/resources/features.mdo | 183 +++++++++++++++++-
2 files changed, 274 insertions(+), 2 deletions(-)
diff --git a/modello-plugins/modello-plugin-java/src/test/verifiers/features/JavaVerifier.java b/modello-plugins/modello-plugin-java/src/test/verifiers/features/JavaVerifier.java
index c6eba7d4e..a434d2600 100644
--- a/modello-plugins/modello-plugin-java/src/test/verifiers/features/JavaVerifier.java
+++ b/modello-plugins/modello-plugin-java/src/test/verifiers/features/JavaVerifier.java
@@ -39,10 +39,14 @@
import org.codehaus.modello.test.features.SubClassLevel2;
import org.codehaus.modello.test.features.SubClassLevel3;
import org.codehaus.modello.test.features.SubInterface;
+import org.codehaus.modello.test.features.Thing;
+import org.codehaus.modello.test.features.Thingy;
import org.codehaus.modello.test.features.XmlAttributes;
import org.codehaus.modello.test.features.XmlFeatures;
import org.codehaus.modello.test.features.other.SubInterfaceInPackage;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -83,6 +87,8 @@ public void verify()
verifyInterfaces();
verifyMisc();
+
+ verifyClone();
}
/**
@@ -338,4 +344,91 @@ public void verifyMisc()
throw new VerifierException( "java.util.Properties model default value was ignored" );
}
}
+
+ /**
+ * Verify generated clone() methods.
+ */
+ public void verifyClone()
+ {
+ checkCloneNullSafe();
+
+ checkClone();
+ }
+
+ private void checkCloneNullSafe()
+ {
+ Thing orig = new Thing();
+
+ Thing copy = (Thing) orig.clone();
+
+ assertNotNull( copy );
+ assertNotSame( orig, copy );
+ }
+
+ private void checkClone()
+ {
+ Thing orig = new Thing();
+ orig.setSomeBoolean( true );
+ orig.setSomeChar( 'X' );
+ orig.setSomeByte( (byte) 7 );
+ orig.setSomeShort( (short) 11 );
+ orig.setSomeInt( 13 );
+ orig.setSomeLong( 17 );
+ orig.setSomeFloat( -2.5f );
+ orig.setSomeDouble( 3.14 );
+ orig.setSomeString( "test" );
+ orig.setSomeDate( new Date() );
+ orig.setSomeDom( new Xpp3Dom( "test" ) );
+ orig.addSomeStringList( "string" );
+ orig.addSomeStringSet( "string" );
+ orig.setDeepThingy( new Thingy() );
+ orig.addDeepThingyList( new Thingy() );
+ orig.addDeepThingySet( new Thingy() );
+ orig.setShallowThingy( new Thingy() );
+ orig.addShallowThingyList( new Thingy() );
+ orig.addShallowThingySet( new Thingy() );
+ orig.addSomeProperty( "key", "value" );
+ orig.customProperties.setProperty( "key", "value" );
+
+ Thing copy = (Thing) orig.clone();
+
+ assertNotNull( copy );
+ assertNotSame( orig, copy );
+
+ assertEquals( orig.isSomeBoolean(), copy.isSomeBoolean() );
+ assertEquals( orig.getSomeChar(), copy.getSomeChar() );
+ assertEquals( orig.getSomeByte(), copy.getSomeByte() );
+ assertEquals( orig.getSomeShort(), copy.getSomeShort() );
+ assertEquals( orig.getSomeInt(), copy.getSomeInt() );
+ assertEquals( orig.getSomeLong(), copy.getSomeLong() );
+ assertEquals( orig.getSomeFloat(), copy.getSomeFloat(), 0.1 );
+ assertEquals( orig.getSomeDouble(), copy.getSomeDouble(), 0.1 );
+ assertEquals( orig.getSomeString(), copy.getSomeString() );
+
+ assertEquals( orig.getSomeDate(), copy.getSomeDate() );
+ assertNotSame( orig.getSomeDate(), copy.getSomeDate() );
+ assertEquals( orig.getSomeDom(), copy.getSomeDom() );
+ assertNotSame( orig.getSomeDom(), copy.getSomeDom() );
+
+ assertEquals( orig.getSomeStringList(), copy.getSomeStringList() );
+ assertNotSame( orig.getSomeStringList(), copy.getSomeStringList() );
+ assertEquals( orig.getSomeStringSet(), copy.getSomeStringSet() );
+ assertNotSame( orig.getSomeStringSet(), copy.getSomeStringSet() );
+
+ assertNotSame( orig.getDeepThingy(), copy.getDeepThingy() );
+ assertNotSame( orig.getDeepThingyList(), copy.getDeepThingyList() );
+ assertNotSame( orig.getDeepThingyList().iterator().next(), copy.getDeepThingyList().iterator().next() );
+ assertNotSame( orig.getDeepThingySet(), copy.getDeepThingySet() );
+ assertNotSame( orig.getDeepThingySet().iterator().next(), copy.getDeepThingySet().iterator().next() );
+
+ assertSame( orig.getShallowThingy(), copy.getShallowThingy() );
+ assertNotSame( orig.getShallowThingyList(), copy.getShallowThingyList() );
+ assertSame( orig.getShallowThingyList().iterator().next(), copy.getShallowThingyList().iterator().next() );
+ assertNotSame( orig.getShallowThingySet(), copy.getShallowThingySet() );
+ assertSame( orig.getShallowThingySet().iterator().next(), copy.getShallowThingySet().iterator().next() );
+
+ assertEquals( orig.customProperties, copy.customProperties );
+ assertNotSame( orig.customProperties, copy.customProperties );
+ }
+
}
diff --git a/modello-test/src/main/resources/features.mdo b/modello-test/src/main/resources/features.mdo
index bbe6e6833..3dfefa552 100644
--- a/modello-test/src/main/resources/features.mdo
+++ b/modello-test/src/main/resources/features.mdo
@@ -1,7 +1,7 @@
-
features
@@ -139,6 +139,13 @@
NodeItem
+
+ cloneable
+ 1.0.0+
+
+ Thing
+
+
@@ -1136,6 +1143,178 @@
+
+
+ SuperThing
+ 1.0.0+
+
+
+ Thing
+ SuperThing
+ 1.0.0+
+
+
+
+ someBoolean
+ 1.0.0+
+ boolean
+
+
+ someChar
+ 1.0.0+
+ char
+
+
+ someByte
+ 1.0.0+
+ byte
+
+
+ someShort
+ 1.0.0+
+ short
+
+
+ someInt
+ 1.0.0+
+ int
+
+
+ someLong
+ 1.0.0+
+ long
+
+
+ someFloat
+ 1.0.0+
+ float
+
+
+ someDouble
+ 1.0.0+
+ double
+
+
+ someString
+ 1.0.0+
+ String
+
+
+ someDate
+ 1.0.0+
+ Date
+
+
+ someDom
+ 1.0.0+
+ DOM
+
+
+
+ someProperties
+ 1.0.0+
+ Properties
+
+ String
+ *
+
+
+
+ someStringList
+ 1.0.0+
+ List
+
+ String
+ *
+
+
+
+ someStringSet
+ 1.0.0+
+ Set
+
+ String
+ *
+
+
+
+
+ deepThingy
+ 1.0.0+
+
+ Thingy
+ 1
+
+
+
+ deepThingyList
+ 1.0.0+
+ List
+
+ Thingy
+ *
+
+
+
+ deepThingySet
+ 1.0.0+
+ Set
+
+ Thingy
+ *
+
+
+
+
+ shallowThingy
+ 1.0.0+
+
+ Thingy
+ 1
+
+
+
+ shallowThingyList
+ 1.0.0+
+ List
+
+ Thingy
+ *
+
+
+
+ shallowThingySet
+ 1.0.0+
+ Set
+
+ Thingy
+ *
+
+
+
+
+
+ 1.0.0+
+
+
+
+
+
+
+ Thingy
+ SuperThing
+ 1.0.0+
+