Author: tchemit Date: 2009-12-13 21:06:30 +0100 (Sun, 13 Dec 2009) New Revision: 746 Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelClass.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelClassifier.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelEnumeration.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/DigesterObjectModelRuleSet.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAssociationClassImpl.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilder.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassImpl.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelEnumerationImpl.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelInterfaceImpl.java branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/xmi/objectmodel/XMI12ToObjectModelTest.java branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/xmi/objectmodel/XMI21ToObjectModelTest.java branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java Log: - add enum support as classifier - reformat code - add classifier generation code for java - add convinient method in java transformer with class parameter Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java 2009-12-13 20:06:30 UTC (rev 746) @@ -253,8 +253,8 @@ /** * Test if given element can be generated. * - * An element can be generated if his package is in the {@link generatedPackages} list - * or if {@link generatedPackages} is null or empty. + * An element can be generated if his package is in the {@link #generatedPackages} list + * or if {@link #generatedPackages} is null or empty. * * @param element element to test * @return generation allowed @@ -304,7 +304,8 @@ * @return */ public String getFilenameForInterface(ObjectModelInterface interfacez) { - return interfacez.getQualifiedName().replace('.', File.separatorChar); + return getFilenameForClassifier(interfacez); +// return interfacez.getQualifiedName().replace('.', File.separatorChar); } /** @@ -314,7 +315,8 @@ * @return */ public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar); + return getFilenameForClassifier(clazz); +// return clazz.getQualifiedName().replace('.', File.separatorChar); } /** @@ -328,26 +330,25 @@ } public String getFilenameForEnumeration(ObjectModelEnumeration enumeration) { - return enumeration.getQualifiedName().replace('.', File.separatorChar); + return getFilenameForClassifier(enumeration); +// return enumeration.getQualifiedName().replace('.', File.separatorChar); } - public void generateFromModel(Writer output, ObjectModel model) - throws IOException { + public void generateFromModel(Writer output, ObjectModel model) throws IOException { } - public void generateFromInterface(Writer output, - ObjectModelInterface interfacez) throws IOException { + public void generateFromInterface(Writer output, ObjectModelInterface interfacez) throws IOException { } - public void generateFromClass(Writer output, ObjectModelClass clazz) - throws IOException { + public void generateFromEnum(Writer output, ObjectModelEnumeration interfacez) throws IOException { } - public void generateFromClassifier(Writer output, - ObjectModelClassifier clazz) throws IOException { + public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { } - public void generateFromEnumeration(Writer output, - ObjectModelEnumeration enumeration) throws IOException { + public void generateFromClassifier(Writer output, ObjectModelClassifier clazz) throws IOException { } + + public void generateFromEnumeration(Writer output, ObjectModelEnumeration enumeration) throws IOException { + } } Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2009-12-13 20:06:30 UTC (rev 746) @@ -22,28 +22,30 @@ import java.util.HashSet; import java.util.Set; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.ImportsManager; +import org.nuiton.eugene.ObjectModelType; import org.nuiton.eugene.models.object.*; import org.nuiton.eugene.models.object.ObjectModelModifier; import org.nuiton.eugene.models.object.xml.*; /** - * JavaBuilder - * + * JavaBuilder TODO heritates it from ModelBuilder + * <p/> * Created: 29 oct. 2009 * * @author fdesbois * @version $Revision$ - * - * Builder to fill an empty ObjectModel with java specificities (imports, only one inheritance, constructor, ...). - * JavaBuilder uses ImportsManagerExtension to manage imports in the model. - * JavaBuilder is also based on ObjectModelBuilder for the simple filling of the model. - * - * Mise a jour: $Date$ - * par : $Author$ + * <p/> + * Builder to fill an empty ObjectModel with java specificities (imports, only one inheritance, constructor, ...). + * JavaBuilder uses ImportsManagerExtension to manage imports in the model. + * JavaBuilder is also based on ObjectModelBuilder for the simple filling of the model. + * <p/> + * Mise a jour: $Date$ + * par : $Author$ */ public class JavaBuilder { @@ -62,32 +64,38 @@ @SuppressWarnings("unchecked") public JavaBuilder(String modelName) { this.modelBuilder = new ObjectModelBuilder(modelName); - + this.managers = getModel().getExtension( - ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class); + ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class); } /** * Get the model which is built + * * @return an ObjectModel */ public ObjectModel getModel() { return this.modelBuilder.getModel(); } + public void setDocumentation(ObjectModelElement element, String documentation) { + modelBuilder.setDocumentation(element, documentation); + } + /** * Add an import to a classifier. Imports are automatic for lots of JavaBuilder's methods except body * code of operations. * <pre> * You can have some complex imports like : - * - new java.util.List<org.chorem.bonzoms.Role>() + * - new java.util.List<org.chorem.bonzoms.Role>() * --> two imports 'java.util.List' and 'org.chorem.bonzoms.Role' * - java.util.Collection<T extends org.nuiton.topia.TopiaEntity> * --> two imports 'java.util.Collection' and 'org.nuiton.topia.TopiaEntity' * </pre> + * * @param classifier where the imports will be added. - * @param imports to add - * @see org.nuiton.eugene.GeneratorUtil#getTypesList(java.lang.String) + * @param imports to add + * @see org.nuiton.eugene.GeneratorUtil#getTypesList(java.lang.String) */ public void addImport(ObjectModelClassifier classifier, String imports) { if (imports == null) { @@ -104,11 +112,11 @@ /** * Create a new class in the model. + * * @param name * @param packageName * @return a new ObjectModelClass - * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#createClass(java.lang.String, java.lang.String, - * org.nuiton.eugene.models.object.ObjectModelModifier[]) ) + * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#createClass(java.lang.String, java.lang.String,org.nuiton.eugene.models.object.ObjectModelModifier...) */ public ObjectModelClass createClass(String name, String packageName) { return modelBuilder.createClass(name, packageName); @@ -116,11 +124,11 @@ /** * Create a new abstract class in the model. + * * @param name * @param packageName * @return a new ObjectModelClass - * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#createClass(java.lang.String, - * java.lang.String, org.nuiton.eugene.models.object.ObjectModelModifier[]) + * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#createClass(java.lang.String,java.lang.String, org.nuiton.eugene.models.object.ObjectModelModifier...) */ public ObjectModelClass createAbstractClass(String name, String packageName) { return modelBuilder.createClass(name, packageName, ObjectModelModifier.ABSTRACT); @@ -128,22 +136,35 @@ /** * Create a new interface in the model + * * @param name * @param packageName * @return a new ObjectModelInterface - * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#createInterface(java.lang.String, java.lang.String) + * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#createInterface(java.lang.String, java.lang.String) */ public ObjectModelInterface createInterface(String name, String packageName) { return modelBuilder.createInterface(name, packageName); } /** + * Create a new enumration in the model + * + * @param name + * @param packageName + * @return a new ObjectModelEnumeration + */ + public ObjectModelEnumeration createEnumeration(String name, String packageName) { + return modelBuilder.createEnumeration(name, packageName); + } + + /** * Set the superclass of an other class. Only one superclass can be set to the class. * IMPORTS superclassQualifiedName. + * * @param classifier * @param superclassQualifiedName * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#addInterface( - * org.nuiton.eugene.models.object.ObjectModelClassifier, java.lang.String) + *org.nuiton.eugene.models.object.ObjectModelClassifier, java.lang.String) */ public void setSuperClass(ObjectModelClass classifier, String superclassQualifiedName) { ObjectModelClassImpl impl = (ObjectModelClassImpl) classifier; @@ -155,10 +176,11 @@ /** * Add an interface to a classifier (interface, class, enum). * IMPORTS interfaceQualifiedName. + * * @param classifier * @param interfaceQualifiedName * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#addInterface( - * org.nuiton.eugene.models.object.ObjectModelClassifier, java.lang.String) + *org.nuiton.eugene.models.object.ObjectModelClassifier, java.lang.String) */ public void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) { modelBuilder.addInterface(classifier, interfaceQualifiedName); @@ -168,18 +190,17 @@ /** * Add a new attribute to a classifier. * IMPORTS type, value. + * * @param classifier * @param name * @param type * @param value * @param modifiers * @return a new ObjectModelAttribute - * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#addAttribute( - * org.nuiton.eugene.models.object.ObjectModelClassifier, java.lang.String, - * java.lang.String, java.lang.String, org.nuiton.eugene.models.object.ObjectModelModifier[]) + * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#addAttribute(org.nuiton.eugene.models.object.ObjectModelClassifier, java.lang.String,java.lang.String, java.lang.String, org.nuiton.eugene.models.object.ObjectModelModifier...) */ public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value, - ObjectModelModifier... modifiers) { + ObjectModelModifier... modifiers) { this.addImport(classifier, type); this.addImport(classifier, value); return modelBuilder.addAttribute(classifier, name, type, value, modifiers); @@ -188,6 +209,7 @@ /** * Add a new constant to a classifier. A constant is static and final and have a value. * IMPORTS type, value. + * * @param classifier * @param name * @param type @@ -197,12 +219,12 @@ * @throws IllegalArgumentException if the modifier is not a visibility */ public ObjectModelAttribute addConstant(ObjectModelClassifier classifier, String name, String type, String value, - ObjectModelModifier visibility) throws IllegalArgumentException { + ObjectModelModifier visibility) throws IllegalArgumentException { if (!visibility.isVisibility()) { throw new IllegalArgumentException("Illegal visibility type : " + visibility.name() + " for " + classifier.getQualifiedName()); } - + return addAttribute(classifier, name, type, value, visibility, ObjectModelModifier.STATIC, ObjectModelModifier.FINAL); } @@ -210,6 +232,7 @@ /** * Add a new attribute to a classifier with no default value. Default visibility is set to PROTECTED. * IMPORTS type. + * * @param classifier * @param name * @param type @@ -222,6 +245,7 @@ /** * Add a new attribute to a classifier from an existing attribute. * IMPORTS attribute.getType() and attribute.getDefaultValue(). + * * @param classifier * @param attribute * @return a new ObjectModelAttribute @@ -247,28 +271,28 @@ } return addAttribute(classifier, attribute.getName(), attribute.getType(), - attribute.getDefaultValue(), modifiers.toArray(new ObjectModelModifier[modifiers.size()])); + attribute.getDefaultValue(), modifiers.toArray(new ObjectModelModifier[modifiers.size()])); } /** * Add a new operation to a classifier. + * * @param classifier * @param name * @param type * @param modifiers * @return a new ObjectModelOperation - * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#addOperation( - * org.nuiton.eugene.models.object.ObjectModelClassifier, java.lang.String, - * java.lang.String, org.nuiton.eugene.models.object.ObjectModelModifier[]) + * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#addOperation(org.nuiton.eugene.models.object.ObjectModelClassifier, java.lang.String,java.lang.String, org.nuiton.eugene.models.object.ObjectModelModifier...) */ public ObjectModelOperation addOperation(ObjectModelClassifier classifier, String name, String type, - ObjectModelModifier... modifiers) { + ObjectModelModifier... modifiers) { this.addImport(classifier, type); return modelBuilder.addOperation(classifier, name, type, modifiers); } /** * Add a constructor to a class. + * * @param clazz * @param visibility * @return a new ObjectModelOperation @@ -286,12 +310,13 @@ /** * Add a new parameter to an existing operation. + * * @param operation * @param type * @param name * @return a new ObjectModelParameter * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#addParameter( - * org.nuiton.eugene.models.object.ObjectModelOperation, java.lang.String, java.lang.String) + *org.nuiton.eugene.models.object.ObjectModelOperation, java.lang.String, java.lang.String) */ public ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) { this.addImport((ObjectModelClassifier) operation.getDeclaringElement(), type); @@ -300,10 +325,11 @@ /** * Add an exception to an operation. + * * @param operation * @param exception * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#addException( - * org.nuiton.eugene.models.object.ObjectModelOperation, java.lang.String) + *org.nuiton.eugene.models.object.ObjectModelOperation, java.lang.String) */ public void addException(ObjectModelOperation operation, String exception) { this.addImport((ObjectModelClassifier) operation.getDeclaringElement(), exception); @@ -312,11 +338,12 @@ /** * Set the operation body code. + * * @param operation * @param body * @throws IllegalArgumentException if operation is abstract * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#setOperationBody( - * org.nuiton.eugene.models.object.ObjectModelOperation, java.lang.String) + *org.nuiton.eugene.models.object.ObjectModelOperation, java.lang.String) */ public void setOperationBody(ObjectModelOperation operation, String body) throws IllegalArgumentException { @@ -326,5 +353,21 @@ modelBuilder.setOperationBody(operation, body); } + public ObjectModelClassifier addInnerClassifier(ObjectModelClass clazz, ObjectModelType type, String name) throws IllegalArgumentException { + return modelBuilder.addInnerClassifier(clazz, type, name); + } + public ObjectModelOperation addConstructor(ObjectModelEnumeration enumeration, ObjectModelModifier visibility) + throws IllegalArgumentException { + if (!visibility.isVisibility()) { + throw new IllegalArgumentException("Illegal visibility type : " + visibility.name() + + " for " + enumeration.getQualifiedName()); + } + + return addOperation(enumeration, enumeration.getName(), null, visibility); + } + + public void addLiteral(ObjectModelEnumeration classifier, String name) { + modelBuilder.addLiteral(classifier,name); + } } Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2009-12-13 20:06:30 UTC (rev 746) @@ -24,6 +24,7 @@ import java.io.File; import java.io.IOException; import java.io.Writer; +import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.Set; @@ -31,12 +32,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.ObjectModelGenerator; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelInterface; -import org.nuiton.eugene.models.object.ObjectModelOperation; -import org.nuiton.eugene.models.object.ObjectModelParameter; +import org.nuiton.eugene.models.object.*; /** * JavaGenerator @@ -59,16 +55,29 @@ private static final Log log = LogFactory.getLog(JavaGenerator.class); + protected int innerLevel; + protected String prefix; + @Override public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + ".java"; + return getFilenameForClassifier(clazz); } @Override public String getFilenameForInterface(ObjectModelInterface interfacez) { - return interfacez.getQualifiedName().replace('.', File.separatorChar) + ".java"; + return getFilenameForClassifier(interfacez); } + @Override + public String getFilenameForEnumeration(ObjectModelEnumeration enumeration) { + return getFilenameForClassifier(enumeration); + } + + @Override + public String getFilenameForClassifier(ObjectModelClassifier clazz) { + return clazz.getQualifiedName().replace('.', File.separatorChar) + ".java"; + } + /** * Generate from all classes. * @param output Writer for generating the java file @@ -81,9 +90,11 @@ if (log.isInfoEnabled()) { log.info("generate class : " + clazz.getName()); } + preparePrefix(clazz); - this.generateHeader(output, clazz); // Imports, package et documentation - + // Imports, package et documentation + this.generateHeader(output, clazz); + String abstractStr = clazz.isAbstract() ? " abstract " : " "; String className = clazz.getName(); @@ -105,7 +116,7 @@ } /*{ -public<%=abstractStr%>class <%=className%>}*/ +<%=prefix%>public<%=abstractStr%>class <%=className%>}*/ /* * Définition de la super classe : il ne doit y avoir qu'une @@ -124,10 +135,12 @@ }*/ } + this.generateInnerClassifiers(output, clazz.getInnerClassifiers()); this.generateAttributes(output, clazz.getAttributes()); this.generateOperations(output, clazz.getOperations()); + /*{ -} //<%=className%> +<%=prefix%>} //<%=className%> }*/ } @@ -136,9 +149,11 @@ if (log.isInfoEnabled()) { log.info("generate interface : " + interfacez.getName()); } - - this.generateHeader(output, interfacez); // Imports, package et documentation + preparePrefix(interfacez); + // Imports, package et documentation + this.generateHeader(output, interfacez); + String interfaceName = interfacez.getName(); String extend = ""; @@ -148,7 +163,7 @@ extend += GeneratorUtil.getSimpleName(p.getQualifiedName()); } /*{ -public interface <%=interfaceName%>}*/ +<%=prefix%>public interface <%=interfaceName%>}*/ /* * Définition de la super interface : il ne doit y avoir qu'une @@ -160,15 +175,100 @@ }*/ } - this.generateAttributes(output, interfacez.getAttributes()); this.generateOperations(output, interfacez.getOperations()); /*{ -} //<%=interfaceName%> +<%=prefix%>} //<%=interfaceName%> }*/ } + @Override + public void generateFromEnum(Writer output, ObjectModelEnumeration enumz) throws IOException { + if (log.isInfoEnabled()) { + log.info("generate enumeration : " + enumz.getName()); + } + preparePrefix(enumz); + this.generateHeader(output, enumz); // Imports, package et documentation + + String enumzName = enumz.getName(); + + String extend = ""; + Iterator<ObjectModelInterface> j = enumz.getInterfaces().iterator(); + if (j.hasNext()) { + ObjectModelClassifier p = j.next(); + extend += GeneratorUtil.getSimpleName(p.getQualifiedName()); + } +/*{ +<%=prefix%>public enum <%=enumzName%>}*/ + + if (extend.length() > 0) { +/*{ implements <%=extend%> { + +}*/ + } + else { + /*{ { + +}*/ + } + // generation of literal + if (enumz.getLiterals().isEmpty()) { + /*{ ; }*/ + } else { + Iterator<String> i = enumz.getLiterals().iterator(); + while (i.hasNext()) { + String literal = i.next(); +/*{<%=prefix%> <%=literal%><%=(i.hasNext() ? "," : ";")%> +}*/ + } + } + this.generateAttributes(output, enumz.getAttributes()); + this.generateOperations(output, enumz.getOperations()); +/*{ +<%=prefix%>} //<%=enumzName%> +}*/ + } + + public void generateInnerClassifiers(Writer output, Collection<ObjectModelClassifier> innerClassifiers) throws IOException { + if (innerClassifiers == null || innerClassifiers.isEmpty()) { + return; + } + for (ObjectModelClassifier innerClassifier : innerClassifiers) { + if (innerClassifier.isClass()) { + generateFromClass(output, (ObjectModelClass) innerClassifier); + innerLevel--; + continue; + } + if (innerClassifier.isInterface()) { + generateFromInterface(output, (ObjectModelInterface) innerClassifier); + innerLevel--; + continue; + } + if (innerClassifier.isEnum()) { + generateFromEnum(output, (ObjectModelEnumeration) innerClassifier); + innerLevel--; + continue; + } + } + } + + protected void preparePrefix(ObjectModelClassifier clazz) { + if (!clazz.isInner()) { + innerLevel = 0; + prefix = ""; + } else { + innerLevel++; + char[] tmp = new char[innerLevel * 4]; + Arrays.fill(tmp, ' '); + prefix = new String(tmp); + } + if (log.isInfoEnabled()) { + log.info("prefix to use for classifier " + clazz.getName() + " : [" + prefix + "]"); + } + } + + /** * Generate Header for a classifier : Package, Documentation, Imports and Classifier signature. * @param output Writer for generating the java file @@ -176,7 +276,9 @@ * @throws IOException */ protected void generateHeader(Writer output, ObjectModelClassifier classifier) throws IOException { - + if (classifier.isInner()) { + return; + } String packageName = classifier.getPackageName(); /*{package <%=packageName%>; @@ -187,7 +289,7 @@ for (String imports : managers.getImports(classifier)) { /*{import <%=imports%>; - }*/ +}*/ } } @@ -203,9 +305,9 @@ for (ObjectModelAttribute attr : attributes) { if (attr.getDocumentation() != null && !attr.getDocumentation().isEmpty()) { -/*{ /** - * <%=attr.getDocumentation()%> - *) +/*{<%=prefix%> /** +<%=prefix%> * <%=attr.getDocumentation()%> +<%=prefix%> *) }*/ } @@ -223,7 +325,7 @@ String attrValue = attr.getDefaultValue() != null && !attr.getDefaultValue().isEmpty() ? " = " + GeneratorUtil.getSimpleName(attr.getDefaultValue()) : ""; -/*{ <%=attrVisibility%><%=attrStatic%><%=attrFinal%> <%=attrType%> <%=attrName%><%=attrValue%>; +/*{<%=prefix%> <%=attrVisibility%><%=attrStatic%><%=attrFinal%> <%=attrType%> <%=attrName%><%=attrValue%>; }*/ } } @@ -237,12 +339,12 @@ protected void generateOperations(Writer output, Collection<ObjectModelOperation> operations) throws IOException { for (ObjectModelOperation op : operations) { String opName = op.getName(); -/*{ /** - * <%=opName%> : -}*/ +/*{<%=prefix%> /** +<%=prefix%> * <%=opName%> : +<%=prefix%>}*/ if (op.getDocumentation() != null && !op.getDocumentation().isEmpty()) { String opDocumentation = op.getDocumentation(); -/*{ * <%=opDocumentation%> +/*{<%=prefix%> * <%=opDocumentation%> }*/ } Collection<ObjectModelParameter> params = op.getParameters(); @@ -252,7 +354,7 @@ if (paramDocumentation == null) { paramDocumentation = ""; } -/*{ * @param <%=paramName%> <%=paramDocumentation%> +/*{<%=prefix%> * @param <%=paramName%> <%=paramDocumentation%> }*/ } String opVisibility = op.getVisibility(); @@ -268,19 +370,19 @@ if (paramDocumentation == null) { paramDocumentation = opReturn; } -/*{ * @return <%=paramDocumentation%> +/*{<%=prefix%> * @return <%=paramDocumentation%> }*/ } } Set<String> exceptions = op.getExceptions(); for (String exception : exceptions) { String exceptionName = GeneratorUtil.getSimpleName(exception); -/*{ * @throws <%=exceptionName%> +/*{<%=prefix%> * @throws <%=exceptionName%> }*/ } /*{ *) - <%=opVisibility%> <%=opStatic%><%=opAbstract%><%=opReturn%><%=opName%>(}*/ +<%=prefix%> <%=opVisibility%> <%=opStatic%><%=opAbstract%><%=opReturn%><%=opName%>(}*/ String comma = ""; for (ObjectModelParameter param : params) { String paramName = param.getName(); @@ -298,7 +400,7 @@ } if (!op.getBodyCode().isEmpty()) { -/*{ {<%=op.getBodyCode()%>} +/*{<%=prefix%> {<%=op.getBodyCode()%>} }*/ } else { Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2009-12-13 20:06:30 UTC (rev 746) @@ -22,6 +22,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.ObjectModelType; import org.nuiton.eugene.Template; import org.nuiton.eugene.ImportsManager; import org.nuiton.eugene.ObjectModelTransformer; @@ -44,10 +45,6 @@ protected JavaBuilder builder; - public ObjectModelTransformerToJava() { - super(); - } - @Override protected Template<ObjectModel> initOutputTemplate() { return new JavaGenerator(); @@ -55,7 +52,7 @@ @Override protected ObjectModel initOutputModel() { - if (log.isInfoEnabled()) { + if (log.isDebugEnabled()) { log.debug("inputModelName = " + getModel().getName()); } this.builder = new JavaBuilder(getModel().getName()); @@ -86,6 +83,10 @@ return builder.createClass(name, packageName); } + public ObjectModelEnumeration createEnumeration(String name, String packageName) { + return builder.createEnumeration(name, packageName); + } + protected ObjectModelClass createAbstractClass(String name, String packageName) { return builder.createAbstractClass(name, packageName); } @@ -98,49 +99,104 @@ builder.setSuperClass(classifier, superclassQualifiedName); } + protected void setSuperClass(ObjectModelClass classifier, Class<?> superclassQualifiedName) { + builder.setSuperClass(classifier, superclassQualifiedName.getName()); + } + protected void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) { builder.addInterface(classifier, interfaceQualifiedName); } + protected void addInterface(ObjectModelClassifier classifier, Class<?> interfaceQualifiedName) { + builder.addInterface(classifier, interfaceQualifiedName.getName()); + } + protected void addImport(ObjectModelClassifier classifier, String imports) { builder.addImport(classifier, imports); } + protected void addImport(ObjectModelClassifier classifier, ObjectModelClass imports) { + builder.addImport(classifier, imports.getPackageName() + "." + imports.getName()); + } + + protected void addImport(ObjectModelClassifier classifier, Class<?> imports) { + builder.addImport(classifier, imports.getName()); + } + protected ObjectModelAttribute addConstant(ObjectModelClassifier classifier, String name, String type, String value, - ObjectModelModifier visibility) throws IllegalArgumentException { + ObjectModelModifier visibility) throws IllegalArgumentException { return builder.addConstant(classifier, name, type, value, visibility); } + protected ObjectModelAttribute addConstant(ObjectModelClassifier classifier, String name, Class<?> type, String value, + ObjectModelModifier visibility) throws IllegalArgumentException { + return builder.addConstant(classifier, name, type.getName(), value, visibility); + } + protected ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value, - ObjectModelModifier... modifiers) { + ObjectModelModifier... modifiers) { return builder.addAttribute(classifier, name, type, value, modifiers); } + protected ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, Class<?> type, String value, + ObjectModelModifier... modifiers) { + return builder.addAttribute(classifier, name, type.getName(), value, modifiers); + } + protected ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, ObjectModelAttribute attribute) { return builder.addAttribute(classifier, attribute); } + public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type) { + return builder.addAttribute(classifier, name, type); + } + protected ObjectModelOperation addConstructor(ObjectModelClass clazz, ObjectModelModifier visibility) throws IllegalArgumentException { return builder.addConstructor(clazz, visibility); } + protected ObjectModelOperation addConstructor(ObjectModelEnumeration clazz, ObjectModelModifier visibility) + throws IllegalArgumentException { + return builder.addConstructor(clazz, visibility); + } + protected ObjectModelOperation addOperation(ObjectModelClassifier classifier, String name, String type, - ObjectModelModifier... modifiers) { + ObjectModelModifier... modifiers) { return builder.addOperation(classifier, name, type, modifiers); } + protected ObjectModelOperation addOperation(ObjectModelClassifier classifier, String name, Class<?> type, + ObjectModelModifier... modifiers) { + return builder.addOperation(classifier, name, type == null ? null : type.getName(), modifiers); + } + + protected void addLiteral(ObjectModelEnumeration classifier, String name) { + builder.addLiteral(classifier, name); + } + protected ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) { return builder.addParameter(operation, type, name); } + protected ObjectModelParameter addParameter(ObjectModelOperation operation, Class<?> type, String name) { + return builder.addParameter(operation, type.getName(), name); + } + protected void addException(ObjectModelOperation operation, String exception) { builder.addException(operation, exception); } + protected void addException(ObjectModelOperation operation, Class<?> exception) { + builder.addException(operation, exception.getName()); + } + protected void setOperationBody(ObjectModelOperation operation, String body) throws IllegalArgumentException { builder.setOperationBody(operation, body); } + public ObjectModelClassifier addInnerClassifier(ObjectModelClass clazz, ObjectModelType type, String name) throws IllegalArgumentException { + return builder.addInnerClassifier(clazz, type, name); + } } Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelClass.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelClass.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelClass.java 2009-12-13 20:06:30 UTC (rev 746) @@ -50,7 +50,7 @@ * * @return a Collection containing all inner ObjectModelClass for this class. */ - Collection<ObjectModelClass> getInnerClasses(); + Collection<ObjectModelClassifier> getInnerClassifiers(); /** * Returns the discriminator for the given superclass. @@ -84,12 +84,12 @@ */ boolean isAbstract(); - /** - * Returns whether this class is inner an other class or not. - * - * @return a boolean indicating whether this class is inner an other class or not. - */ - boolean isInner(); +// /** +// * Returns whether this class is inner an other class or not. +// * +// * @return a boolean indicating whether this class is inner an other class or not. +// */ +// boolean isInner(); /** * Returns all operations defined on all Super class extended by this Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelClassifier.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelClassifier.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelClassifier.java 2009-12-13 20:06:30 UTC (rev 746) @@ -157,4 +157,19 @@ */ public boolean isInterface(); + /** + * Returns whether this classifier is an enumeration or not + * @see ObjectModelEnumeration + * + * @return a boolean indicating whether this classifier is an enumeration or not. + */ + public boolean isEnum(); + + /** + * Returns whether this class is inner an other class or not. + * + * @return a boolean indicating whether this class is inner an other class or not. + */ + boolean isInner(); + } //ObjectModelClassifier Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelEnumeration.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelEnumeration.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelEnumeration.java 2009-12-13 20:06:30 UTC (rev 746) @@ -25,39 +25,38 @@ * ObjectModelEnumeration. * * @author Florian Desbois <fdesbois@codelutin.com> - * Copyright Code Lutin + * Copyright Code Lutin * @version $Revision: 483 $ - * */ -public interface ObjectModelEnumeration extends ObjectModelElement { +public interface ObjectModelEnumeration extends ObjectModelClassifier { - /** - * Returns the package name of this enumeration. - * - * @return the package name of this enumeration. - */ - public String getPackageName(); +// /** +// * Returns the package name of this enumeration. +// * +// * @return the package name of this enumeration. +// */ +// public String getPackageName(); +// +// /** +// * Returns the qualified name of this enumeration. +// * Class qualified name is composed of the package name and the enumeration name. +// * +// * @return the qualified name of this enumeration. +// */ +// public String getQualifiedName(); /** - * Returns the qualified name of this enumeration. - * Class qualified name is composed of the package name and the enumeration name. - * - * @return the qualified name of this enumeration. - */ - public String getQualifiedName(); - - /** * Returns literals of this enumeration. * * @return a Collection of String */ public Collection<String> getLiterals(); - /** - * Returns all operations defined on this en enumeration. - * @see ObjectModelOperation - * - * @return a Collection containing all ObjectModelOperation for this enumeration. - */ - public Collection<ObjectModelOperation> getOperations(); +// /** +// * Returns all operations defined on this en enumeration. +// * @see ObjectModelOperation +// * +// * @return a Collection containing all ObjectModelOperation for this enumeration. +// */ +// public Collection<ObjectModelOperation> getOperations(); } Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/DigesterObjectModelRuleSet.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/DigesterObjectModelRuleSet.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/DigesterObjectModelRuleSet.java 2009-12-13 20:06:30 UTC (rev 746) @@ -71,10 +71,14 @@ // root element must be present on stask d.addSetProperties("objectModel"); - d.addObjectCreate("*/class", ObjectModelClassImpl.class); - d.addSetProperties("*/class"); - d.addSetNext("*/class", "addClass"); + d.addObjectCreate("objectModel/class", ObjectModelClassImpl.class); + d.addSetProperties("objectModel/class"); + d.addSetNext("objectModel/class", "addClass"); + d.addObjectCreate("objectModel/class/class", ObjectModelClassImpl.class); + d.addSetProperties("objectModel/class/class"); + d.addSetNext("objectModel/class/class", "addInnerClassifier"); + d.addObjectCreate("objectModel/interface", ObjectModelInterfaceImpl.class); d.addSetProperties("objectModel/interface"); Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAssociationClassImpl.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAssociationClassImpl.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAssociationClassImpl.java 2009-12-13 20:06:30 UTC (rev 746) @@ -101,9 +101,10 @@ .getClassifier(ref.getName()); participantsClassifiers.add(classifier); ObjectModelAttribute attribute = null; - if (classifier.isClass()) { - attribute = ((ObjectModelClass) classifier).getAttribute(ref - .getAttributeName()); + //TODO this +// if (classifier.isClass()) { + if (classifier instanceof ObjectModelClass) { + attribute = classifier.getAttribute(ref.getAttributeName()); if (attribute == null) { log.warn("WARNING : Attribute " + ref.getAttributeName() + " not found on " + classifier.getQualifiedName()); Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilder.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilder.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilder.java 2009-12-13 20:06:30 UTC (rev 746) @@ -21,30 +21,22 @@ package org.nuiton.eugene.models.object.xml; -import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.object.ObjectModelAssociationClass; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelElement; -import org.nuiton.eugene.models.object.ObjectModelInterface; -import org.nuiton.eugene.models.object.ObjectModelModifier; -import org.nuiton.eugene.models.object.ObjectModelOperation; -import org.nuiton.eugene.models.object.ObjectModelParameter; +import org.nuiton.eugene.ObjectModelType; +import org.nuiton.eugene.models.object.*; /** * ObjectModelBuilder - * + * <p/> * Created: 3 nov. 2009 * * @author fdesbois * @version $Revision$ - * - * Builder to fill an empty ObjectModel. The object model name is important if you want to use the model - * in generators. - * - * Mise a jour: $Date$ - * par : $Author$ + * <p/> + * Builder to fill an empty ObjectModel. The object model name is important if you want to use the model + * in generators. + * <p/> + * Mise a jour: $Date$ + * par : $Author$ */ public class ObjectModelBuilder { @@ -52,6 +44,7 @@ /** * Constructor. Must have a name for the new model created. + * * @param name model name */ public ObjectModelBuilder(String name) { @@ -61,6 +54,7 @@ /** * Get the building model + * * @return the ObjectModel which is currently built */ public ObjectModel getModel() { @@ -69,7 +63,8 @@ /** * Add a tagValue to the model. - * @param name tagValue name + * + * @param name tagValue name * @param value tagValue value */ public void addTagValue(String name, String value) { @@ -81,12 +76,13 @@ /** * Add a tagValue to an element + * * @param element where the tag value will be added - * @param name tagValue name - * @param value tagValue value + * @param name tagValue name + * @param value tagValue value */ public void addTagValue(ObjectModelElement element, String name, String value) { - ObjectModelElementImpl impl = (ObjectModelElementImpl)element; + ObjectModelElementImpl impl = (ObjectModelElementImpl) element; ObjectModelImplTagValue tagValue = new ObjectModelImplTagValue(); tagValue.setName(name); @@ -97,9 +93,10 @@ /** * Create a new class in the model. * Modifiers allowed : ABSTRACT, STATIC. - * @param name class name + * + * @param name class name * @param packageName class package - * @param modifiers class modifiers + * @param modifiers class modifiers * @return the new ObjectModelClass added to the model */ public ObjectModelClass createClass(String name, String packageName, ObjectModelModifier... modifiers) { @@ -107,17 +104,18 @@ return createClass(result, name, packageName, modifiers); } - protected ObjectModelClass createClass(ObjectModelClassImpl clazz, - String name, String packageName, ObjectModelModifier... modifiers) + protected ObjectModelClass createClass(ObjectModelClassImpl clazz, String name, String packageName, ObjectModelModifier... modifiers) throws IllegalArgumentException { clazz.setName(name); clazz.setPackage(packageName); for (ObjectModelModifier modifier : modifiers) { switch (modifier) { case ABSTRACT: - clazz.setAbstract(true); break; + clazz.setAbstract(true); + break; case STATIC: - clazz.setStatic(true); break; + clazz.setStatic(true); + break; default: throw new IllegalArgumentException("Unsupported modifier type '" + modifier.name() + "'"); } @@ -128,7 +126,8 @@ /** * Create a new interface in the model. - * @param name interface name + * + * @param name interface name * @param packageName interface package * @return the new ObjectModelInterface added to the model */ @@ -141,11 +140,28 @@ } /** + * Create a new interface in the model. + * + * @param name interface name + * @param packageName interface package + * @return the new ObjectModelInterface added to the model + */ + public ObjectModelEnumeration createEnumeration(String name, String packageName) { + ObjectModelEnumerationImpl result = new ObjectModelEnumerationImpl(); + result.setName(name); + result.setPackage(packageName); + model.addEnumeration(result); + return result; + } + + + /** * Add an attribute to a classifier (interface, class, enum) without default value. * Default visibility is set to PUBLIC. + * * @param classifier where the attribute will be added - * @param name attribute name - * @param type attribute type (full qualified name) + * @param name attribute name + * @param type attribute type (full qualified name) * @return the new ObjectModelAttribute added */ public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type) { @@ -156,17 +172,18 @@ * Add an attribute to a classifier (interface, class, enum). * Modifiers allowed : STATIC, FINAL, PUBLIC, PRIVATE, PROTECTED, PACKAGE, ORDERED, UNIQUE. * The last visibility set will be keeped. + * * @param classifier where the attribute will be added - * @param name attribute name - * @param type attribute type (full qualified name) - * @param value default value for the attribute - * @param modifiers attribute modifiers + * @param name attribute name + * @param type attribute type (full qualified name) + * @param value default value for the attribute + * @param modifiers attribute modifiers * @return the new ObjectModelAttribute added * @throws IllegalArgumentException illegal Modifier * @see org.nuiton.eugene.models.object.ObjectModelModifier#isVisibility() */ public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value, - ObjectModelModifier... modifiers) throws IllegalArgumentException { + ObjectModelModifier... modifiers) throws IllegalArgumentException { ObjectModelAttributeImpl attribute = new ObjectModelAttributeImpl(); attribute.setName(name); attribute.setType(type); @@ -178,20 +195,24 @@ } else { switch (modifier) { case STATIC: - attribute.setStatic(true); break; - case FINAL: - attribute.setFinal(true); break; + attribute.setStatic(true); + break; + case FINAL: + attribute.setFinal(true); + break; case ORDERED: - attribute.setOrdering(modifier.toString()); break; + attribute.setOrdering(modifier.toString()); + break; case UNIQUE: - attribute.setUnique(true); break; + attribute.setUnique(true); + break; default: throw new IllegalArgumentException("Unsupported modifier type '" + modifier.name() + "'"); } } } - ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl)classifier; + ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl) classifier; classifierImpl.addAttribute(attribute); return attribute; } @@ -200,20 +221,20 @@ * Add an association A to B. Create only attribute association for classifierA. * MODIFIERS allowed : PUBLIC, PRIVATE, PACKAGE, PROTECTED, AGGREGATE, COMPOSITE, ORDERED, UNIQUE * STATIC, NAVIGABLE. - * You have to use method {@link #addReverseAssociation(org.nuiton.eugene.models.object.ObjectModelAttribute, - * java.lang.String, int, int, org.nuiton.eugene.models.object.ObjectModelModifier[])} to create - * attribute association for classifierB. - * @param classifierA classifier from - * @param classifierB classifier to - * @param roleName role of A in association + * You have to use method {@link #addReverseAssociation(org.nuiton.eugene.models.object.ObjectModelAttribute,java.lang.String, int, int, org.nuiton.eugene.models.object.ObjectModelModifier...)} + * to create attribute association for classifierB. + * + * @param classifierA classifier from + * @param classifierB classifier to + * @param roleName role of A in association * @param minMultiplicity minimum multiplicity of A in association * @param maxMultiplicity maximum multiplicity of A in association - * @param modifiers for the association + * @param modifiers for the association * @return the attribute corresponding to the association for classifierA * @throws IllegalArgumentException illegal modifier */ public ObjectModelAttribute addAssociation(ObjectModelClassifier classifierA, ObjectModelClassifier classifierB, String roleName, - int minMultiplicity, int maxMultiplicity, ObjectModelModifier... modifiers) + int minMultiplicity, int maxMultiplicity, ObjectModelModifier... modifiers) throws IllegalArgumentException { ObjectModelAttributeImpl attribute = new ObjectModelAttributeImpl(); @@ -232,19 +253,23 @@ } else { switch (modifier) { case ORDERED: - attribute.setOrdering(modifier.toString()); break; + attribute.setOrdering(modifier.toString()); + break; case UNIQUE: - attribute.setUnique(true); break; + attribute.setUnique(true); + break; case STATIC: - attribute.setStatic(true); break; + attribute.setStatic(true); + break; case NAVIGABLE: - attribute.setNavigable(true); break; + attribute.setNavigable(true); + break; default: throw new IllegalArgumentException("Unsupported modifier type '" + modifier.name() + "'"); } } } - ObjectModelClassifierImpl impl = (ObjectModelClassifierImpl)classifierA; + ObjectModelClassifierImpl impl = (ObjectModelClassifierImpl) classifierA; impl.addAttribute(attribute); return attribute; } @@ -253,35 +278,34 @@ * Create reverse association from an other association. * MODIFIERS allowed : PUBLIC, PRIVATE, PACKAGE, PROTECTED, AGGREGATE, COMPOSITE, ORDERED, UNIQUE * STATIC, NAVIGABLE. + * * @param attrAssociation other association A to B - * @param roleName role of B in association + * @param roleName role of B in association * @param minMultiplicity minimum multiplicity of B in association * @param maxMultiplicity maximum multiplicity of B in association - * @param modifiers for the association + * @param modifiers for the association * @return the attribute corresponding to the association for classifierB - * @see #addAssociation(org.nuiton.eugene.models.object.ObjectModelClassifier, org.nuiton.eugene.models.object.ObjectModelClassifier, - * java.lang.String, int, int, org.nuiton.eugene.models.object.ObjectModelModifier[]) + * @see #addAssociation(org.nuiton.eugene.models.object.ObjectModelClassifier, org.nuiton.eugene.models.object.ObjectModelClassifier,java.lang.String, int, int, org.nuiton.eugene.models.object.ObjectModelModifier...) */ public ObjectModelAttribute addReverseAssociation(ObjectModelAttribute attrAssociation, String roleName, - int minMultiplicity, int maxMultiplicity, ObjectModelModifier... modifiers) { + int minMultiplicity, int maxMultiplicity, ObjectModelModifier... modifiers) { - ObjectModelAttributeImpl associationA = (ObjectModelAttributeImpl)attrAssociation; + ObjectModelAttributeImpl associationA = (ObjectModelAttributeImpl) attrAssociation; // Add reverse parameters associationA.setReverseAttributeName(roleName); associationA.setReverseMaxMultiplicity(maxMultiplicity); - - ObjectModelClassifierImpl classifierA = - (ObjectModelClassifierImpl)associationA.getDeclaringElement(); - + + ObjectModelClassifierImpl classifierA = + (ObjectModelClassifierImpl) associationA.getDeclaringElement(); + String typeB = associationA.getType(); // Get classifierB from model - ObjectModelClassifierImpl classifierB = - (ObjectModelClassifierImpl)model.getClassifier(typeB); + ObjectModelClassifierImpl classifierB = (ObjectModelClassifierImpl) model.getClassifier(typeB); // Create reverse association ObjectModelAttributeImpl associationB = - (ObjectModelAttributeImpl)addAssociation(classifierB, classifierA, roleName, - minMultiplicity, maxMultiplicity, modifiers); + (ObjectModelAttributeImpl) addAssociation(classifierB, classifierA, roleName, + minMultiplicity, maxMultiplicity, modifiers); associationB.setReverseAttributeName(associationA.getName()); associationB.setReverseMaxMultiplicity(associationA.getMaxMultiplicity()); @@ -293,25 +317,26 @@ * Create association class. The two extremities of the association must be existing before creating * the association class. * Modifiers allowed : ABSTRACT, STATIC. - * @param name association class name - * @param packageName association package name + * + * @param name association class name + * @param packageName association package name * @param attrAssociationA attribute association for classifierA involved in association class * @param attrAssociationB attribute association for classifierB involved in association class - * @param modifiers for the association class + * @param modifiers for the association class * @return the new association class created with participants A and B */ public ObjectModelAssociationClass createAssociationClass(String name, String packageName, ObjectModelAttribute attrAssociationA, - ObjectModelAttribute attrAssociationB, ObjectModelModifier... modifiers) { + ObjectModelAttribute attrAssociationB, ObjectModelModifier... modifiers) { ObjectModelAssociationClassImpl associationClass = new ObjectModelAssociationClassImpl(); createClass(associationClass, name, packageName, modifiers); // Add associationClass in attrAssociationA - ObjectModelAttributeImpl attrA = (ObjectModelAttributeImpl)attrAssociationA; + ObjectModelAttributeImpl attrA = (ObjectModelAttributeImpl) attrAssociationA; attrA.setAssociationClassName(associationClass.getQualifiedName()); // Add associationClass in attrAssociationB - ObjectModelAttributeImpl attrB = (ObjectModelAttributeImpl)attrAssociationB; + ObjectModelAttributeImpl attrB = (ObjectModelAttributeImpl) attrAssociationB; attrB.setAssociationClassName(associationClass.getQualifiedName()); // Create participantA @@ -319,7 +344,7 @@ new ObjectModeImplAssociationClassParticipant(); participantA.setAttribute(attrA.getName()); - ObjectModelClassifier classifierA = (ObjectModelClassifier)attrA.getDeclaringElement(); + ObjectModelClassifier classifierA = (ObjectModelClassifier) attrA.getDeclaringElement(); participantA.setName(classifierA.getQualifiedName()); associationClass.addParticipant(participantA); @@ -329,7 +354,7 @@ new ObjectModeImplAssociationClassParticipant(); participantB.setAttribute(attrB.getName()); - ObjectModelClassifier classifierB = (ObjectModelClassifier)attrB.getDeclaringElement(); + ObjectModelClassifier classifierB = (ObjectModelClassifier) attrB.getDeclaringElement(); participantB.setName(classifierB.getQualifiedName()); associationClass.addParticipant(participantB); @@ -341,16 +366,17 @@ * Add an operation to a classifier. * Modifiers allowed : STATIC, ABSTRACT, PUBLIC, PRIVATE, PROTECTED, PACKAGE. * The last visibility set will be keeped. + * * @param classifier where the operation will be added - * @param name operation name + * @param name operation name * @param returnType operation type (full qualified name) - * @param modifiers operation modifiers + * @param modifiers operation modifiers * @return the new ObjectModelOperation added * @throws IllegalArgumentException illegal Modifier */ public ObjectModelOperation addOperation(ObjectModelClassifier classifier, - String name, String returnType, ObjectModelModifier... modifiers) - throws IllegalArgumentException{ + String name, String returnType, ObjectModelModifier... modifiers) + throws IllegalArgumentException { ObjectModelOperationImpl result = new ObjectModelOperationImpl(); result.setName(name); @@ -366,23 +392,26 @@ } else { switch (modifier) { case STATIC: - result.setStatic(true); break; - case ABSTRACT: - result.setAbstract(true); break; + result.setStatic(true); + break; + case ABSTRACT: + result.setAbstract(true); + break; default: throw new IllegalArgumentException("Unsupported modifier type '" + modifier.name() + "'"); } } } - ((ObjectModelClassifierImpl)classifier).addOperation(result); + ((ObjectModelClassifierImpl) classifier).addOperation(result); return result; } /** * Set the body code for an Operation. + * * @param operation where the code will be added - * @param body code to add to the operation + * @param body code to add to the operation */ public void setOperationBody(ObjectModelOperation operation, String body) { ObjectModelOperationImpl operationImpl = (ObjectModelOperationImpl) operation; @@ -391,7 +420,8 @@ /** * Add an interface to a classifier. The interface may not exist in model. - * @param classifier where the interface will be added + * + * @param classifier where the interface will be added * @param interfaceQualifiedName interface qualified name */ public void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) { @@ -405,7 +435,8 @@ /** * Add a superclass to an other class. The superclass may not exist in model. - * @param clazz where the superclass will be added + * + * @param clazz where the superclass will be added * @param superclassQualifiedName superclass qualified name */ public void addSuperclass(ObjectModelClass clazz, String superclassQualifiedName) { @@ -418,10 +449,43 @@ } /** + * Add a superclass to an other class. The superclass may not exist in model. + * + * @param clazz where the superclass will be added + * @param type type of inner classifier to create + * @param name superclass qualified name + * @return the new instanciated inner classifier + * @throws IllegalArgumentException if given {@code type} is not a concrete classifier type + */ + public ObjectModelClassifier addInnerClassifier(ObjectModelClass clazz, ObjectModelType type, String name) throws IllegalArgumentException { + ObjectModelClassImpl impl = (ObjectModelClassImpl) clazz; + ObjectModelClassifierImpl inner; + switch (type) { + + case OBJECT_MODEL_ENUMERATION: + inner = new ObjectModelEnumerationImpl(); + break; + case OBJECT_MODEL_CLASS: + inner = new ObjectModelClassImpl(); + break; + case OBJECT_MODEL_INTERFACE: + inner = new ObjectModelInterfaceImpl(); + break; + default: + throw new IllegalArgumentException("can not add a none classifier type " + type); + } + inner.setName(name); + impl.addInnerClassifier(inner); + inner.setObjectModelImpl(impl.getModel()); + return inner; + } + + /** * Add a parameter to an operation. + * * @param operation where the parameter will be added - * @param type paremeter type (full qualified name) - * @param name parameter name + * @param type paremeter type (full qualified name) + * @param name parameter name * @return the new ObjectModelParameter added */ public ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) { @@ -435,6 +499,7 @@ /** * Add an exception to an operation. + * * @param operation where the exception will be added * @param exception name of the exception (full qualified name) */ @@ -447,24 +512,32 @@ /** * Set the documentation of an element in the model. - * @param element where the documentation will be setted + * + * @param element where the documentation will be setted * @param documentation String documentation for the element */ public void setDocumentation(ObjectModelElement element, String documentation) { - ObjectModelElementImpl impl = (ObjectModelElementImpl)element; + ObjectModelElementImpl impl = (ObjectModelElementImpl) element; impl.setDocumentation(documentation); } /** * Add a stereotype to an element. - * @param element where the stereotype will be added + * + * @param element where the stereotype will be added * @param stereotype name */ public void addStereotype(ObjectModelElement element, String stereotype) { - ObjectModelElementImpl impl = (ObjectModelElementImpl)element; + ObjectModelElementImpl impl = (ObjectModelElementImpl) element; ObjectModelImplRef ref = new ObjectModelImplRef(); ref.setName(stereotype); impl.addStereotype(ref); } + public void addLiteral(ObjectModelEnumeration enumz, String name) { + ObjectModelEnumerationImpl impl = (ObjectModelEnumerationImpl) enumz; + ObjectModelImplRef ref = new ObjectModelImplRef(); + ref.setName(name); + impl.addLiteral(ref); + } } Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassImpl.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassImpl.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassImpl.java 2009-12-13 20:06:30 UTC (rev 746) @@ -28,7 +28,6 @@ import java.util.List; import java.util.Map; -import org.nuiton.eugene.ObjectModelType; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; @@ -46,16 +45,14 @@ * Last update : $Date$ * by : $Author$ */ -public class ObjectModelClassImpl extends ObjectModelClassifierImpl implements - ObjectModelClass { +public class ObjectModelClassImpl extends ObjectModelClassifierImpl implements ObjectModelClass { protected List<ObjectModelClass> superclasses = null; protected Map<ObjectModelClass, String> superclassesDiscriminators = new HashMap<ObjectModelClass, String>(); protected List<ObjectModelImplRef> superclassesRefs = new ArrayList<ObjectModelImplRef>(); protected List<ObjectModelClass> specialisations = null; - protected List<ObjectModelClass> innerClasses = null; + protected List<ObjectModelClassifier> innerClasses = null; protected boolean abstractz = false; - protected boolean inner = false; public ObjectModelClassImpl() { super(); @@ -76,18 +73,16 @@ * Digester method to add innerClass to this ObjectModelClass. * @param innerClass the ObjectModelClass to add */ - public void addClass(ObjectModelClassImpl innerClass) { + public void addInnerClassifier(ObjectModelClassifierImpl innerClass) { innerClass.setDeclaringElement(this); innerClass.setInner(true); if (innerClasses == null) { - innerClasses = new ArrayList<ObjectModelClass>(); + innerClasses = new ArrayList<ObjectModelClassifier>(); } innerClasses.add(innerClass); } - public void setInner(boolean inner) { - this.inner = inner; - } + public void setAbstract(boolean abstractz) { this.abstractz = abstractz; @@ -97,12 +92,9 @@ public Collection<ObjectModelClass> getSuperclasses() { if (superclasses == null) { superclasses = new ArrayList<ObjectModelClass>(); - Iterator<?> i = superclassesRefs.iterator(); - while (i.hasNext()) { - ObjectModelImplSuperClassRef ref = (ObjectModelImplSuperClassRef) i - .next(); - ObjectModelClass superclass = objectModelImpl.getClass(ref - .getName()); + for (ObjectModelImplRef superclassesRef : superclassesRefs) { + ObjectModelImplSuperClassRef ref = (ObjectModelImplSuperClassRef) superclassesRef; + ObjectModelClass superclass = objectModelImpl.getClass(ref.getName()); if (superclass == null) { ExternalCacheExtension cache = objectModelImpl.getExtension( @@ -119,7 +111,7 @@ } @Override - public Collection<ObjectModelClass> getInnerClasses() { + public Collection<ObjectModelClassifier> getInnerClassifiers() { return this.innerClasses; } @@ -146,9 +138,8 @@ public Collection<ObjectModelClass> getSpecialisations() { if (specialisations == null) { specialisations = new ArrayList<ObjectModelClass>(); - for (Iterator<?> i = objectModelImpl.getClasses().iterator(); i - .hasNext();) { - ObjectModelClass candidateClass = (ObjectModelClass) i.next(); + for (Object o : objectModelImpl.getClasses()) { + ObjectModelClass candidateClass = (ObjectModelClass) o; if (candidateClass.getSuperclasses().contains(this)) { specialisations.add(candidateClass); } @@ -169,9 +160,7 @@ @Override public Collection<ObjectModelClass> getSpecialisations(String discriminator) { List<ObjectModelClass> discriminatedSpecialisations = new ArrayList<ObjectModelClass>(); - for (Iterator<ObjectModelClass> i = getSpecialisations().iterator(); i - .hasNext();) { - ObjectModelClass candidateClass = i.next(); + for (ObjectModelClass candidateClass : getSpecialisations()) { if (discriminator.equals(candidateClass.getDiscriminator(this))) { discriminatedSpecialisations.add(candidateClass); } @@ -189,10 +178,10 @@ return abstractz; } - @Override - public boolean isInner() { - return inner; - } +// @Override +// public boolean isInner() { +// return inner; +// } @Override public Collection<ObjectModelOperation> getAllOtherOperations( @@ -205,7 +194,7 @@ @Override public Collection<ObjectModelOperation> getAllSuperclassOperations( boolean distinct) { - Collection<ObjectModelOperation> result = null; + Collection<ObjectModelOperation> result; if (distinct) { result = new HashSet<ObjectModelOperation>(); } else { @@ -217,8 +206,8 @@ protected Collection<ObjectModelOperation> getAllSuperclassOperations( Collection<ObjectModelOperation> result) { - for (Iterator<?> i = getSuperclasses().iterator(); i.hasNext();) { - ObjectModelClassImpl clazz = (ObjectModelClassImpl) i.next(); + for (Object o : getSuperclasses()) { + ObjectModelClassImpl clazz = (ObjectModelClassImpl) o; result.addAll(clazz.getOperations()); clazz.getAllSuperclassOperations(result); clazz.getAllInterfaceOperations(result); @@ -235,8 +224,8 @@ protected Collection<ObjectModelAttribute> getAllOtherAttributes( Collection<ObjectModelAttribute> result) { - for (Iterator<?> i = getSuperclasses().iterator(); i.hasNext();) { - ObjectModelClassImpl clazz = (ObjectModelClassImpl) i.next(); + for (Object o : getSuperclasses()) { + ObjectModelClassImpl clazz = (ObjectModelClassImpl) o; result.addAll(clazz.getAttributes()); clazz.getAllOtherAttributes(result); } @@ -246,8 +235,7 @@ @Override public String toString() { StringBuffer result = new StringBuffer(); - result.append("class " + getQualifiedName() + "<<" + getStereotypes() - + ">> tagvalue: " + getTagValues() + " "); + result.append("class ").append(getQualifiedName()).append("<<").append(getStereotypes()).append(">> tagvalue: ").append(getTagValues()).append(" "); result.append("extends "); for (Iterator<?> i = getSuperclasses().iterator(); i.hasNext();) { result.append(((ObjectModelClassifier) i.next()).getName()); @@ -265,28 +253,28 @@ return result.toString(); } - /** - * Returns whether this classifier is a class or not - * - * @see ObjectModelClass - * - * @return a boolean indicating whether this classifier is a class or not. - */ - @Override - public boolean isClass() { - return true; - } - - /** - * Returns whether this classifier is an interface or not - * - * @see ObjectModelInterface - * - * @return a boolean indicating whether this classifier is an interface or - * not. - */ - @Override - public boolean isInterface() { - return false; - } +// /** +// * Returns whether this classifier is a class or not +// * +// * @see ObjectModelClass +// * +// * @return a boolean indicating whether this classifier is a class or not. +// */ +// @Override +// public boolean isClass() { +// return true; +// } +// +// /** +// * Returns whether this classifier is an interface or not +// * +// * @see ObjectModelInterface +// * +// * @return a boolean indicating whether this classifier is an interface or +// * not. +// */ +// @Override +// public boolean isInterface() { +// return false; +// } } Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java 2009-12-13 20:06:30 UTC (rev 746) @@ -19,22 +19,9 @@ package org.nuiton.eugene.models.object.xml; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; +import org.nuiton.eugene.models.object.*; -import java.util.Map; -import org.nuiton.eugene.GeneratorUtil; -import org.nuiton.eugene.ObjectModelType; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelDependency; -import org.nuiton.eugene.models.object.ObjectModelInterface; -import org.nuiton.eugene.models.object.ObjectModelOperation; +import java.util.*; /** * ObjectModelClassifierImpl. @@ -61,16 +48,13 @@ protected List<ObjectModelDependency> dependencies = new ArrayList<ObjectModelDependency>(); protected String type = null; - + protected boolean inner = false; + @Override public String toString() { return "" + getQualifiedName() + " implements " + getInterfaces(); } - public ObjectModelClassifierImpl() { - super(); - } - @Override public void postInit() { super.postInit(); @@ -85,6 +69,15 @@ this.packageName = packageName; } + public void setInner(boolean inner) { + this.inner = inner; + } + + @Override + public boolean isInner() { + return inner; + } + public void addInterface(ObjectModelImplRef ref) { //if (ref == null) // return new ObjectModelImplRef(); @@ -158,9 +151,7 @@ @Override public Collection<ObjectModelOperation> getOperations(String name) { List<ObjectModelOperation> result = new ArrayList<ObjectModelOperation>(); - for (Iterator<ObjectModelOperation> i = getOperations().iterator(); i - .hasNext();) { - ObjectModelOperation op = i.next(); + for (ObjectModelOperation op : getOperations()) { if (name.equals(op.getName())) { result.add(op); } @@ -233,8 +224,8 @@ protected Collection<ObjectModelAttribute> getAllInterfaceAttributes( Collection<ObjectModelAttribute> result) { - for (Iterator<?> i = getInterfaces().iterator(); i.hasNext();) { - ObjectModelClassifierImpl clazz = (ObjectModelClassifierImpl) i.next(); + for (Object o : getInterfaces()) { + ObjectModelClassifierImpl clazz = (ObjectModelClassifierImpl) o; result.addAll(clazz.getAttributes()); clazz.getAllInterfaceAttributes(result); } @@ -258,4 +249,19 @@ } return null; } + + @Override + public final boolean isClass() { + return this instanceof ObjectModelClass; + } + + @Override + public final boolean isInterface() { + return this instanceof ObjectModelInterface; + } + + @Override + public final boolean isEnum() { + return this instanceof ObjectModelEnumeration; + } } Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelEnumerationImpl.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelEnumerationImpl.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelEnumerationImpl.java 2009-12-13 20:06:30 UTC (rev 746) @@ -35,7 +35,7 @@ * @version $Revision: 478 $ * */ -public class ObjectModelEnumerationImpl extends ObjectModelElementImpl +public class ObjectModelEnumerationImpl extends ObjectModelClassifierImpl implements ObjectModelEnumeration { /** @@ -43,23 +43,23 @@ */ private Collection<ObjectModelImplRef> literalRefs = new ArrayList<ObjectModelImplRef>(); - /** - * Collection of operations objectModel - */ - private Collection<ObjectModelOperation> operations = new ArrayList<ObjectModelOperation>(); +// /** +// * Collection of operations objectModel +// */ +// private Collection<ObjectModelOperation> operations = new ArrayList<ObjectModelOperation>(); - /** - * Package name from objectModel file, loaded with Digester - */ - private String packageName; +// /** +// * Package name from objectModel file, loaded with Digester +// */ +// private String packageName; - public void setPackage(String packageName) { - this.packageName = packageName; - } - - public String getPackage() { - return this.packageName; - } +// public void setPackage(String packageName) { +// this.packageName = packageName; +// } +// +// public String getPackage() { +// return this.packageName; +// } /** * Add a literal to the ObjectModelEnumeration from Digester * @param ref corresponding to a Literal value @@ -68,27 +68,27 @@ literalRefs.add(ref); } - /** - * Add an operation to the ObjectModelEnumeration from Digester - * @param operation - */ - public void addOperation(ObjectModelOperationImpl operation) { - operation.postInit(); - operation.setDeclaringElement(this); - operations.add(operation); - } +// /** +// * Add an operation to the ObjectModelEnumeration from Digester +// * @param operation +// */ +// public void addOperation(ObjectModelOperationImpl operation) { +// operation.postInit(); +// operation.setDeclaringElement(this); +// operations.add(operation); +// } +// +// @Override +// public String getPackageName() { +// return this.packageName; +// } +// +// @Override +// public String getQualifiedName() { +// return this.packageName+"."+this.getName(); +// } @Override - public String getPackageName() { - return this.packageName; - } - - @Override - public String getQualifiedName() { - return this.packageName+"."+this.getName(); - } - - @Override public Collection<String> getLiterals() { Collection<String> results = new ArrayList<String>(); for (ObjectModelImplRef ref : literalRefs) { @@ -97,9 +97,9 @@ return results; } - @Override - public Collection<ObjectModelOperation> getOperations() { - return operations; - } +// @Override +// public Collection<ObjectModelOperation> getOperations() { +// return operations; +// } } Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java 2009-12-13 20:06:30 UTC (rev 746) @@ -174,7 +174,7 @@ @Override public ObjectModelClassifier getClassifier(String qualifiedClassifierName) { return (qualifiedClassifierName == null ? null - : (ObjectModelClassifier) classifiers.get(qualifiedClassifierName)); + : classifiers.get(qualifiedClassifierName)); } /** @@ -256,8 +256,7 @@ */ @Override public ObjectModelInterface getInterface(String qualifiedInterfaceName) { - ObjectModelInterface result = null; - result = (ObjectModelInterface) interfaces.get(qualifiedInterfaceName); + ObjectModelInterface result = interfaces.get(qualifiedInterfaceName); if (result == null && log.isWarnEnabled()) { log.warn("Interface " + qualifiedInterfaceName + " not found in model"); } @@ -279,6 +278,7 @@ public void addEnumeration(ObjectModelEnumerationImpl enumeration) { enumeration.postInit(); enumeration.setObjectModelImpl(this); + classifiers.put(enumeration.getQualifiedName(), enumeration); enumerations.put(enumeration.getQualifiedName(), enumeration); } @@ -481,7 +481,7 @@ */ @Override public String getTagValue(String tagValue) { - return (tagValue == null ? null : (String) tagValues.get(tagValue)); + return (tagValue == null ? null : tagValues.get(tagValue)); } /** @@ -495,8 +495,7 @@ */ @Override @SuppressWarnings("unchecked") - public <O> O getExtension(String reference, Class<O> extensionClass) - throws ClassCastException, RuntimeException { + public <O> O getExtension(String reference, Class<O> extensionClass) throws RuntimeException { Object object = extensions.get(reference); O result; if (object != null && !extensionClass.isAssignableFrom(object.getClass())) { Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelInterfaceImpl.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelInterfaceImpl.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelInterfaceImpl.java 2009-12-13 20:06:30 UTC (rev 746) @@ -37,16 +37,11 @@ * Last update : $Date$ * by : $Author$ */ -public class ObjectModelInterfaceImpl extends ObjectModelClassifierImpl - implements ObjectModelInterface { +public class ObjectModelInterfaceImpl extends ObjectModelClassifierImpl implements ObjectModelInterface { - public ObjectModelInterfaceImpl() { - super(); - } - public String toString() { StringBuffer result = new StringBuffer(); - result.append("interface " + getQualifiedName() + " "); + result.append("interface ").append(getQualifiedName()).append(" "); result.append("extends "); for (Iterator i = getInterfaces().iterator(); i.hasNext();) { result.append(((ObjectModelClassifier) i.next()).getName()); @@ -57,26 +52,26 @@ return result.toString(); } - /** - * Returns whether this classifier is a class or not - * - * @see ObjectModelClass - * - * @return a boolean indicating whether this classifier is a class or not. - */ - public boolean isClass() { - return false; - } - - /** - * Returns whether this classifier is an interface or not - * - * @see ObjectModelInterface - * - * @return a boolean indicating whether this classifier is an interface or - * not. - */ - public boolean isInterface() { - return true; - } +// /** +// * Returns whether this classifier is a class or not +// * +// * @see ObjectModelClass +// * +// * @return a boolean indicating whether this classifier is a class or not. +// */ +// public boolean isClass() { +// return false; +// } +// +// /** +// * Returns whether this classifier is an interface or not +// * +// * @see ObjectModelInterface +// * +// * @return a boolean indicating whether this classifier is an interface or +// * not. +// */ +// public boolean isInterface() { +// return true; +// } } Modified: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/xmi/objectmodel/XMI12ToObjectModelTest.java =================================================================== --- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/xmi/objectmodel/XMI12ToObjectModelTest.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/xmi/objectmodel/XMI12ToObjectModelTest.java 2009-12-13 20:06:30 UTC (rev 746) @@ -167,10 +167,10 @@ // Test for inner class ObjectModelClass storeClass = model.getClass("org.nuiton.topiatest.Store"); Assert.assertNotNull(storeClass); - List<ObjectModelClass> inners = (List<ObjectModelClass>) storeClass.getInnerClasses(); + List<ObjectModelClassifier> inners = (List<ObjectModelClassifier>) storeClass.getInnerClassifiers(); Assert.assertNotNull(inners); Assert.assertEquals(inners.size(), 1); - ObjectModelClass rowClass = inners.get(0); + ObjectModelClass rowClass = (ObjectModelClass) inners.get(0); Assert.assertNotNull(rowClass); Assert.assertEquals(rowClass.getDeclaringElement().getName(), "Store"); } Modified: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/xmi/objectmodel/XMI21ToObjectModelTest.java =================================================================== --- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/xmi/objectmodel/XMI21ToObjectModelTest.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/xmi/objectmodel/XMI21ToObjectModelTest.java 2009-12-13 20:06:30 UTC (rev 746) @@ -41,12 +41,7 @@ import org.junit.Before; import org.junit.Test; import org.nuiton.eugene.ObjectModelGenerator; -import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelEnumeration; -import org.nuiton.eugene.models.object.ObjectModelOperation; -import org.nuiton.eugene.models.object.ObjectModelParameter; +import org.nuiton.eugene.models.object.*; import org.nuiton.util.Resource; import org.nuiton.util.ResourceResolver; @@ -148,8 +143,10 @@ assertNotNull(model); assertEquals("XMITest21", model.getName()); - assertEquals(15, model.getClassifiers().size()); - + //FIXME check there is an xmi enumeration since we changed enumeration to classifier +// assertEquals(15, model.getClassifiers().size()); + assertEquals(16, model.getClassifiers().size()); + // ClassB ObjectModelClass clazzB = model.getClass("org.nuiton.eugene.test21.ClassB"); assertNotNull(clazzB); @@ -214,8 +211,10 @@ assertNotNull(model); assertEquals("org::sharengo::utils::container::link", model.getName()); - assertEquals(8, model.getClassifiers().size()); - + //FIXME check there is an xmi enumeration since we changed enumeration to classifier + assertEquals(9, model.getClassifiers().size()); +// assertEquals(8, model.getClassifiers().size()); + // LinkEntity ObjectModelClass clazzLinkEntity = model.getClass("org.sharengo.utils.container.link.entities.LinkEntity"); assertNotNull(clazzLinkEntity); @@ -506,12 +505,12 @@ // OuterClass ObjectModelClass outer = model.getClass("org.nuiton.eugene.test21.OuterClass"); - List<ObjectModelClass> inners = (List<ObjectModelClass>)outer.getInnerClasses(); + List<ObjectModelClassifier> inners = (List<ObjectModelClassifier>)outer.getInnerClassifiers(); assertNotNull(inners); assertEquals(inners.size(), 1); - + // InnerClass - ObjectModelClass inner = inners.get(0); + ObjectModelClass inner = (ObjectModelClass) inners.get(0); assertNotNull(inner); assertNotNull(inner.getDeclaringElement()); assertEquals(inner.getDeclaringElement().getName(), "OuterClass"); Modified: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java 2009-12-13 20:02:52 UTC (rev 745) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java 2009-12-13 20:06:30 UTC (rev 746) @@ -31,6 +31,7 @@ import java.util.Map.Entry; import java.util.Set; + import org.apache.commons.lang.StringUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.model.Resource; @@ -49,10 +50,9 @@ * * @author ruchaud * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - * + * <p/> + * Last update: $Date$ + * by : $Author$ * @goal generate * @projectRequired true */ @@ -60,9 +60,9 @@ /** * Les entrées sorties du plugin. - * * <p/> - * + * <p/> + * <p/> * En entrée on demande des répertoires où chercher les fichiers objectmodel a convertir. * <p/> * En sortie on demande le répertoire ou generer les classes java. @@ -79,7 +79,7 @@ * </generateResources> * </pre> * </p> - * + * <p/> * Note: si {@link #testPhase} est activée, les valeurs par défaut sont : * </p> * <pre> @@ -134,9 +134,9 @@ protected File extraClassPathDirectory; /** * List of packages to generate (comma separated). - * + * <p/> * If the parameter is not filled, will generate all packages. - * + * * @parameter expression="${eugene.generatedPackages}" * @since 1.0.0-rc-8 */ @@ -159,7 +159,7 @@ getLog().info(" includes : " + includes); getLog().info(" using template : " + templates); getLog().info(" using defaultPackage : " + defaultPackage); - + File[] modelFiles = getModelFiles(); if (modelFiles.length == 0) { // can skip @@ -201,11 +201,11 @@ //TC-20090829 fix when loading more than one model together... - try { - template.applyTemplate(model, generateResources.getOutput()); - } catch (IOException eee) { - throw new MojoExecutionException("Generation problem", eee); - } + try { + template.applyTemplate(model, generateResources.getOutput()); + } catch (IOException eee) { + throw new MojoExecutionException("Generation problem", eee); + } // for (File modelFile : modelFiles) { // getLog().debug(" on " + modelFile.getAbsolutePath()); // @@ -236,7 +236,7 @@ /** * Recuperation de la liste des fichiers de modele a traite. - * + * * @return la liste des modeles a utiliser */ protected File[] getModelFiles() { @@ -287,8 +287,7 @@ ModelReader<?> modelReader = null; try { ClassLoader fixedClassLoader = fixClassLoader(); - modelReader = (ModelReader<?>) Class.forName(reader, - true, fixedClassLoader).newInstance(); + modelReader = (ModelReader<?>) Class.forName(reader, true, fixedClassLoader).newInstance(); } catch (InstantiationException eee) { throw new MojoFailureException("Can't instantiate reader : " + reader, eee); } catch (IllegalAccessException eee) { @@ -300,8 +299,7 @@ } @SuppressWarnings("unchecked") - protected <M extends Model> List<Template<M>> - getTemplates(ModelReader<M> modelReader) + protected <M extends Model> List<Template<M>> getTemplates(ModelReader<M> modelReader) throws MojoFailureException, MojoExecutionException { // init generators Properties templateProperties = new Properties(); @@ -339,9 +337,9 @@ protected String getExcludeTemplatesAsString() { String result = ""; - for (int i=0; i < excludeTemplates.length; i++) { + for (int i = 0; i < excludeTemplates.length; i++) { result += excludeTemplates[i]; - if (i != excludeTemplates.length-1) { + if (i != excludeTemplates.length - 1) { result += ","; } }