Eugene-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
November 2009
- 3 participants
- 57 discussions
r691 - branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator
by fdesbois@users.nuiton.org 03 Nov '09
by fdesbois@users.nuiton.org 03 Nov '09
03 Nov '09
Author: fdesbois
Date: 2009-11-03 18:17:20 +0100 (Tue, 03 Nov 2009)
New Revision: 691
Modified:
branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java
Log:
Improve type generation
Modified: branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java
===================================================================
--- branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java 2009-11-03 17:07:29 UTC (rev 690)
+++ branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java 2009-11-03 17:17:20 UTC (rev 691)
@@ -5,8 +5,6 @@
import org.nuiton.eugene.java.ObjectModelTransformerToJava;
import org.nuiton.eugene.models.object.*;
-import java.beans.PropertyChangeListener;
-import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
@@ -70,6 +68,7 @@
if (attr.isNavigable()/* || attr.hasAssociationClass()*/) {
String attrType = attr.getType();
+ String simpleType = GeneratorUtil.getSimpleName(attrType);
String attrName = attr.getName();
String attrNameCapitalized = StringUtils.capitalize(attrName);
@@ -83,7 +82,7 @@
addParameter(getChild, "int", "index");
setOperationBody(getChild, ""
/*{
- <%=attrType%> o = getChild(<%=attrName%>, index);
+ <%=simpleType%> o = getChild(<%=attrName%>, index);
return o;
}*/
);
@@ -102,7 +101,7 @@
addParameter(getChildEntity, String.class.getName(), "topiaId");
setOperationBody(getChildEntity, ""
/*{
- <%=attrType%> o = getEntity(<%=attrName%>, topiaId);
+ <%=simpleType%> o = getEntity(<%=attrName%>, topiaId);
return o;
}*/
);
@@ -142,6 +141,7 @@
} else {
attrType = Collection.class.getName() + "<" + attrType + ">";
}
+ simpleType = GeneratorUtil.getSimpleName(attrType);
}
if (attr.hasAssociationClass()) {
@@ -169,7 +169,7 @@
addParameter(setter, attrType, "newValue");
setOperationBody(setter, ""
/*{
- <%=attrType%> oldValue = get<%=attrNameCapitalized%>();
+ <%=simpleType%> oldValue = get<%=attrNameCapitalized%>();
this.<%=attrName%> = newValue;
firePropertyChange("<%=attrName%>", oldValue, newValue);
}*/
@@ -241,7 +241,7 @@
// Add Serializable implements for DTO generation
if (inputClass.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) {
- addInterface(resultClass, Serializable.class.getName());
+ addInterface(resultClass, "java.io.Serializable");
}
String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", inputClass, getModel());
@@ -264,7 +264,7 @@
);
// Add PropertyListener
- String propType = PropertyChangeListener.class.getName();
+ String propType = "java.beans.PropertyChangeListener";
String strType = String.class.getName();
String objectType = Object.class.getName();
1
0
r690 - in branches/eugene-2.0/eugene/src: main/java/org/nuiton/eugene/java main/java/org/nuiton/eugene/models/object/xml test/java/org/nuiton/eugene/java test/java/org/nuiton/eugene/models/object/xml
by fdesbois@users.nuiton.org 03 Nov '09
by fdesbois@users.nuiton.org 03 Nov '09
03 Nov '09
Author: fdesbois
Date: 2009-11-03 18:07:29 +0100 (Tue, 03 Nov 2009)
New Revision: 690
Added:
branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderTest.java
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/models/object/xml/ObjectModelClassImpl.java
branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java
Log:
- Refactor test JavaBuilderTest to ObjectModelBuilderTest
- Improve specific java tests in JavaBuilderTest
- Add clearSuperclasses method for JavaBuilder
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-11-03 16:20:33 UTC (rev 689)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2009-11-03 17:07:29 UTC (rev 690)
@@ -115,7 +115,7 @@
*/
public void setSuperClass(ObjectModelClass classifier, String superclassQualifiedName) {
ObjectModelClassImpl impl = (ObjectModelClassImpl) classifier;
- impl.getSuperclasses().clear(); // suppress all existing superclass: only one can be set for java
+ impl.clearSuperclasses(); // suppress all existing superclass: only one can be set for java
modelBuilder.addSuperclass(impl, superclassQualifiedName);
this.addImport(classifier, superclassQualifiedName);
}
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-11-03 16:20:33 UTC (rev 689)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassImpl.java 2009-11-03 17:07:29 UTC (rev 690)
@@ -59,6 +59,11 @@
super();
}
+ public void clearSuperclasses() {
+ superclasses = null;
+ superclassesRefs.clear();
+ }
+
public void addSuperclass(ObjectModelImplRef ref) {
superclassesRefs.add(ref);
// superclassesRefs is modified, superclasses must be reset
Modified: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java
===================================================================
--- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java 2009-11-03 16:20:33 UTC (rev 689)
+++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java 2009-11-03 17:07:29 UTC (rev 690)
@@ -53,16 +53,16 @@
/**
* Test of getModel.
- * Prerequisite : instanciation of JavaBuilder.
- * - ObjectModel created in JavaBuilder constructor. ObjectModel name will be set.
+ * No test needed : model created in modelBuilder instanciated in constructor (ObjectModelBuilder).
+ * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilderTest#testGetModel()
*/
@Test
public void testGetModel() {
System.out.println("getModel");
JavaBuilder builder = new JavaBuilder("TestModel");
- assertNotNull(builder.getModel());
- assertEquals(builder.getModel().getName(), "TestModel");
+
+ builder.getModel();
}
/**
@@ -89,13 +89,13 @@
String type = "java.util.List<org.chorem.cash.Category>"; // type add : 2 imports added
builder.addImport(classifier, type);
- assertEquals(importsExtension.getImports(classifier).size(), 3);
+ assertEquals(3, importsExtension.getImports(classifier).size());
}
/**
* Test of createClass method, of class JavaBuilder.
- * Prerequisite : none.
- * - Create a class with name and packageName. Qualified name of the class = name + packageName.
+ * No test needed : call of createClass in ObjectModelBuilder
+ * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilderTest#testCreateClass()
*/
@Test
public void testCreateClass() {
@@ -103,12 +103,7 @@
JavaBuilder builder = new JavaBuilder("TestModel");
- ObjectModelClass clazz = builder.createClass("Person", "org.chorem.bonzoms");
-
- assertNotNull(clazz);
- assertEquals(clazz.getName(), "Person");
- assertEquals(clazz.getPackageName(), "org.chorem.bonzoms");
- assertEquals(clazz.getQualifiedName(), "org.chorem.bonzoms.Person");
+ builder.createClass("Person", "org.chorem.bonzoms");
}
/**
@@ -127,6 +122,9 @@
/**
* Test of setSuperClass method, of class JavaBuilder.
+ * Only one superclass can be set.
+ * Check imports on superclass qualified name
+ * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilderTest#testAddSuperclass()
*/
@Test
public void testSetSuperClass() {
@@ -136,17 +134,25 @@
ObjectModelClass clazz = builder.createClass("Person", "org.chorem.bonzoms");
String superclassQualifiedName = "org.chorem.bonzoms.Party";
+ builder.setSuperClass(clazz, superclassQualifiedName);
+ superclassQualifiedName = "org.chorem.bonzoms.NamedElement";
builder.setSuperClass(clazz, superclassQualifiedName);
- assertNotNull(clazz.getSuperclasses());
- assertEquals(clazz.getSuperclasses().size(), 1);
+
+ assertEquals(1, clazz.getSuperclasses().size());
+
+ // Check imports
+ ImportsManagerExtension ext = builder.getModel().getExtension(
+ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
+
+ List<String> imports = ext.getImports(clazz);
+ assertEquals(0, imports.size());
}
/**
* Test of addInterface method, of class JavaBuilder.
- * Prerequisite : existing classifier in model.
- * - Add an interface not included in the model to a classifier.
- * - TODO : Add an existing interface in the model to a classfier.
+ * Check imports on adding interface : imports added on interfaceQualifiedName
+ * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilderTest#testAddInterface()
*/
@Test
public void testAddInterface() {
@@ -157,9 +163,14 @@
String interfaceQualifiedName = "java.io.Serializable";
builder.addInterface(classifier, interfaceQualifiedName);
+
+ // Check imports
+ ImportsManagerExtension ext = builder.getModel().getExtension(
+ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
- assertNotNull(classifier.getInterfaces());
- assertEquals(classifier.getInterfaces().size(), 1);
+ List<String> imports = ext.getImports(classifier);
+ assertEquals(1, imports.size());
+ assertTrue(imports.contains("java.io.Serializable"));
}
/**
@@ -183,9 +194,8 @@
/**
* Test of addAttribute method, of class JavaBuilder.
- * Prerequisite : existing classifier in model.
- * - Add a public attribute without default value
- * - Add a private static attribute with default value
+ * Check imports on adding attribute : imports added on type and value.
+ * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilderTest#testAddAttribute()
*/
@Test
public void testAddAttribute() {
@@ -194,23 +204,21 @@
ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
- ObjectModelAttribute attribute = builder.addAttribute(classifier, "firstName", "java.lang.String", "",
+ builder.addAttribute(classifier, "firstName", "java.lang.String", "",
ObjectModelModifier.PUBLIC);
- assertNotNull(attribute);
- assertEquals(attribute.getName(), "firstName");
- assertEquals(attribute.getType(), "java.lang.String");
- assertEquals(attribute.getVisibility(), "public");
- assertEquals(attribute.getDefaultValue(), "");
- assertFalse(attribute.isFinal());
- assertFalse(attribute.isStatic());
-
- attribute = builder.addAttribute(classifier, "roles", "java.lang.List<org.chorem.bonzoms.Role>",
- "new java.lang.ArrayList<org.chorem.bonzoms.Role>()",
+ builder.addAttribute(classifier, "roles", "java.util.List<org.chorem.bonzoms.Role>",
+ "new java.util.ArrayList<org.chorem.bonzoms.Role>()",
ObjectModelModifier.PRIVATE, ObjectModelModifier.STATIC);
- assertEquals(attribute.getDefaultValue(), "new java.lang.ArrayList<org.chorem.bonzoms.Role>()");
- assertTrue(attribute.isStatic());
+ // Check imports
+ ImportsManagerExtension ext = builder.getModel().getExtension(
+ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
+
+ List<String> imports = ext.getImports(classifier);
+ assertEquals(2, imports.size()); // no imports for org.chorem.bonzoms.Role and java.lang.String
+ assertTrue(imports.contains("java.util.ArrayList"));
+ assertTrue(imports.contains("java.util.List"));
}
/**
@@ -260,9 +268,8 @@
/**
* Test of addOperation method, of class JavaBuilder.
- * Prerequisite : existing classifier in model.
- * - Add simple public method
- * - Add abstract method
+ * Check imports on adding operation : returnType of the operation
+ * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilderTest#testAddOperation()
*/
@Test
public void testAddOperation() {
@@ -274,21 +281,23 @@
ObjectModelOperation result = builder.addOperation(classifier,
"methodName", "java.util.List<java.lang.String>", ObjectModelModifier.PUBLIC);
- assertNotNull(result);
- assertEquals(result.getName(), "methodName");
- assertEquals(result.getReturnType(), "java.util.List<java.lang.String>");
- assertEquals(result.getVisibility(), "public");
- assertFalse(result.isAbstract());
- result = builder.addOperation(classifier, "addPropertyChangeListener", "void",
+ result = builder.addOperation(classifier, "addPropertyChangeListener", null,
ObjectModelModifier.PUBLIC, ObjectModelModifier.ABSTRACT);
- assertTrue(result.isAbstract());
+
+ // Check imports
+ ImportsManagerExtension ext = builder.getModel().getExtension(
+ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
+
+ List<String> imports = ext.getImports(classifier);
+ assertEquals(1, imports.size());
+ assertTrue(imports.contains("java.util.List"));
}
/**
* Test of addParameter method, of class JavaBuilder.
- * Prerequisite : existing classifier in model and operation associated to this classifier.
- * - Add a parameter to an existing operation in a classifier
+ * Check imports on adding parameter : type of the parameter
+ * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilderTest#testAddParameter()
*/
@Test
public void testAddParameter() {
@@ -301,20 +310,21 @@
ObjectModelOperation operation = builder.addOperation(classifier, "setName", "java.lang.String",
ObjectModelModifier.PUBLIC);
- ObjectModelParameter param = builder.addParameter(operation, "java.lang.String", "name");
- assertNotNull(param);
- assertEquals(param.getName(), "name");
- assertEquals(param.getType(), "java.lang.String");
+ builder.addParameter(operation, "java.lang.String", "name");
- List<ObjectModelParameter> listParams = (List<ObjectModelParameter>)operation.getParameters();
- ObjectModelParameter param1 = listParams.get(0);
- assertEquals(param1, param);
+ // Check imports
+ ImportsManagerExtension ext = builder.getModel().getExtension(
+ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
+
+ List<String> imports = ext.getImports(classifier);
+ assertEquals(0, imports.size());
+
}
/**
* Test of addException method, of class JavaBuilder.
- * Prerequisite : existing classifier in model and operation associated to this classifier.
- * - Add an exception to an existing operation in a classifier
+ * Check imports on adding exception : exception name
+ * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilderTest#testAddException()
*/
@Test
public void testAddException() {
@@ -328,19 +338,19 @@
ObjectModelModifier.PUBLIC);
builder.addException(operation, "java.lang.IllegalArgumentException");
- Set<String> exceptions = operation.getExceptions();
- assertNotNull(exceptions);
- assertEquals(exceptions.size(), 1);
- Iterator<String> it = exceptions.iterator();
- assertNotNull(it.hasNext());
- assertEquals(it.next(), "java.lang.IllegalArgumentException");
+
+ // Check imports
+ ImportsManagerExtension ext = builder.getModel().getExtension(
+ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
+
+ List<String> imports = ext.getImports(classifier);
+ assertEquals(0, imports.size());
}
/**
* Test of setOperationBody method, of class JavaBuilder.
- * Prerequisite : existing classifier in model and operation associated to this classifier.
- * - Add a body to an existing operation in a classifier
- * NOTE : No complex test for adding body to an operation (no use of processor)
+ * No body code for an abstract operation : throw an IllegalArgumentException
+ * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilderTest#testSetOperationBody()
*/
@Test
public void testSetOperationBody() {
@@ -351,11 +361,14 @@
ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
ObjectModelOperation operation = builder.addOperation(classifier, "setName", "java.lang.String",
- ObjectModelModifier.PUBLIC);
+ ObjectModelModifier.PUBLIC, ObjectModelModifier.ABSTRACT);
- builder.setOperationBody(operation, "this.name = name");
- assertNotNull(operation.getBodyCode());
- assertEquals(operation.getBodyCode(), "this.name = name");
+ try {
+ builder.setOperationBody(operation, "this.name = name");
+ } catch (Exception eee) {
+ assertEquals(IllegalArgumentException.class, eee.getClass());
+ System.out.println("expected exception : " + eee.getMessage());
+ }
}
}
\ No newline at end of file
Added: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderTest.java
===================================================================
--- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderTest.java (rev 0)
+++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderTest.java 2009-11-03 17:07:29 UTC (rev 690)
@@ -0,0 +1,287 @@
+
+package org.nuiton.eugene.models.object.xml;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+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.ObjectModelModifier;
+import org.nuiton.eugene.models.object.ObjectModelOperation;
+import org.nuiton.eugene.models.object.ObjectModelParameter;
+
+/**
+ * ObjectModelBuilder
+ *
+ * Created: 3 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ObjectModelBuilderTest {
+
+ public ObjectModelBuilderTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() {
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+ /**
+ * Test of getModel method, of class ObjectModelBuilder.
+ * Prerequisite : instanciation of ObjectModelBuilder.
+ * - ObjectModel created in ObjectModelBuilder constructor. ObjectModel name will be set.
+ */
+ @Test
+ public void testGetModel() {
+ System.out.println("getModel");
+
+ ObjectModelBuilder builder = new ObjectModelBuilder("TestModel");
+
+ assertNotNull(builder.getModel());
+ assertEquals("TestModel", builder.getModel().getName());
+ }
+
+ /**
+ * Test of createClass method, of class ObjectModelBuilder.
+ * Prerequisite : none.
+ * - Create a class with name and packageName. Qualified name of the class = name + packageName.
+ */
+ @Test
+ public void testCreateClass() {
+ System.out.println("createClass");
+
+ ObjectModelBuilder builder = new ObjectModelBuilder("TestModel");
+
+ ObjectModelClass clazz = builder.createClass("Person", "org.chorem.bonzoms");
+
+ assertNotNull(clazz);
+ assertEquals("Person", clazz.getName());
+ assertEquals("org.chorem.bonzoms", clazz.getPackageName());
+ assertEquals("org.chorem.bonzoms.Person", clazz.getQualifiedName());
+ }
+
+ /**
+ * Test of createInterface method, of class ObjectModelBuilder.
+ */
+ //@Test
+ public void testCreateInterface() {
+ System.out.println("createInterface");
+ }
+
+ /**
+ * Test of addAttribute method, of class ObjectModelBuilder.
+ * Prerequisite : existing classifier in model.
+ * - Add an attribute with no default value
+ */
+ @Test
+ public void testAddAttributeWithoutDefaultValue() {
+ System.out.println("addAttribute");
+ ObjectModelBuilder builder = new ObjectModelBuilder("TestModel");
+ ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
+
+ ObjectModelAttribute attribute = builder.addAttribute(classifier, "firstName", "java.lang.String");
+ assertEquals("", attribute.getDefaultValue());
+ }
+
+ /**
+ * Test of addAttribute method, of class ObjectModelBuilder.
+ * Prerequisite : existing classifier in model.
+ * - Add a public attribute without default value
+ * - Add a private static attribute with default value
+ */
+ @Test
+ public void testAddAttribute() {
+ System.out.println("addAttribute");
+ ObjectModelBuilder builder = new ObjectModelBuilder("TestModel");
+
+ ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
+
+ ObjectModelAttribute attribute = builder.addAttribute(classifier, "firstName", "java.lang.String", "",
+ ObjectModelModifier.PUBLIC);
+
+ assertNotNull(attribute);
+ assertEquals("firstName", attribute.getName());
+ assertEquals("java.lang.String", attribute.getType());
+ assertEquals("public", attribute.getVisibility());
+ assertEquals("", attribute.getDefaultValue());
+ assertFalse(attribute.isFinal());
+ assertFalse(attribute.isStatic());
+
+ attribute = builder.addAttribute(classifier, "roles", "java.lang.List<org.chorem.bonzoms.Role>",
+ "new java.lang.ArrayList<org.chorem.bonzoms.Role>()",
+ ObjectModelModifier.PRIVATE, ObjectModelModifier.STATIC);
+
+ assertEquals("new java.lang.ArrayList<org.chorem.bonzoms.Role>()", attribute.getDefaultValue());
+ assertTrue(attribute.isStatic());
+ }
+
+ /**
+ * Test of addOperation method, of class ObjectModelBuilder.
+ * Prerequisite : existing classifier in model.
+ * - Add simple public method
+ * - Add abstract method
+ */
+ @Test
+ public void testAddOperation() {
+ System.out.println("addOperation");
+ ObjectModelBuilder builder = new ObjectModelBuilder("TestModel");
+
+ ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
+
+ ObjectModelOperation result = builder.addOperation(classifier,
+ "methodName", "java.util.List<java.lang.String>", ObjectModelModifier.PUBLIC);
+ assertNotNull(result);
+ assertEquals(result.getName(), "methodName");
+ assertEquals(result.getReturnType(), "java.util.List<java.lang.String>");
+ assertEquals(result.getVisibility(), "public");
+ assertFalse(result.isAbstract());
+
+ result = builder.addOperation(classifier, "addPropertyChangeListener", "void",
+ ObjectModelModifier.PUBLIC, ObjectModelModifier.ABSTRACT);
+ assertTrue(result.isAbstract());
+ }
+
+ /**
+ * Test of setOperationBody method, of class ObjectModelBuilder.
+ * Prerequisite : existing classifier in model and operation associated to this classifier.
+ * - Add a body to an existing operation in a classifier
+ */
+ @Test
+ public void testSetOperationBody() {
+ System.out.println("setOperationBody");
+
+ ObjectModelBuilder builder = new ObjectModelBuilder("modelName");
+
+ ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
+
+ ObjectModelOperation operation = builder.addOperation(classifier, "setName", "java.lang.String",
+ ObjectModelModifier.PUBLIC);
+
+ builder.setOperationBody(operation, "this.name = name");
+ assertNotNull(operation.getBodyCode());
+ assertEquals(operation.getBodyCode(), "this.name = name");
+ }
+
+ /**
+ * Test of addInterface method, of class ObjectModelBuilder.
+ * Prerequisite : existing classifier in model.
+ * - Add an interface not included in the model to a classifier.
+ * - TODO : Add an existing interface in the model to a classfier.
+ */
+ @Test
+ public void testAddInterface() {
+ System.out.println("addInterface");
+
+ ObjectModelBuilder builder = new ObjectModelBuilder("TestModel");
+
+ ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
+
+ String interfaceQualifiedName = "java.io.Serializable";
+ builder.addInterface(classifier, interfaceQualifiedName);
+
+ assertNotNull(classifier.getInterfaces());
+ assertEquals(classifier.getInterfaces().size(), 1);
+ }
+
+ /**
+ * Test of addSuperclass method, of class ObjectModelBuilder.
+ * Prerequisite : existing classifier in model.
+ * - Add a superclass not included in the model to a classifier.
+ * - TODO : Add an existing superclass in the model to a classfier.
+ */
+ @Test
+ public void testAddSuperclass() {
+ System.out.println("addSuperclass");
+ ObjectModelBuilder builder = new ObjectModelBuilder("TestModel");
+
+ ObjectModelClass clazz = builder.createClass("Person", "org.chorem.bonzoms");
+
+ String superclassQualifiedName = "org.chorem.bonzoms.Party";
+
+ builder.addSuperclass(clazz, superclassQualifiedName);
+ assertEquals(1, clazz.getSuperclasses().size());
+ }
+
+ /**
+ * Test of addParameter method, of class ObjectModelBuilder.
+ * Prerequisite : existing classifier in model and operation associated to this classifier.
+ * - Add a parameter to an existing operation in a classifier
+ */
+ @Test
+ public void testAddParameter() {
+ System.out.println("addParameter");
+
+ ObjectModelBuilder builder = new ObjectModelBuilder("modelName");
+
+ ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
+
+ ObjectModelOperation operation = builder.addOperation(classifier, "setName", "java.lang.String",
+ ObjectModelModifier.PUBLIC);
+
+ ObjectModelParameter param = builder.addParameter(operation, "java.lang.String", "name");
+ assertNotNull(param);
+ assertEquals(param.getName(), "name");
+ assertEquals(param.getType(), "java.lang.String");
+
+ List<ObjectModelParameter> listParams = (List<ObjectModelParameter>)operation.getParameters();
+ ObjectModelParameter param1 = listParams.get(0);
+ assertEquals(param1, param);
+ }
+
+ /**
+ * Test of addException method, of class ObjectModelBuilder.
+ * Prerequisite : existing classifier in model and operation associated to this classifier.
+ * - Add an exception to an existing operation in a classifier
+ */
+ @Test
+ public void testAddException() {
+ System.out.println("addException");
+
+ ObjectModelBuilder builder = new ObjectModelBuilder("modelName");
+
+ ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
+
+ ObjectModelOperation operation = builder.addOperation(classifier, "setName", "java.lang.String",
+ ObjectModelModifier.PUBLIC);
+
+ builder.addException(operation, "java.lang.IllegalArgumentException");
+ Set<String> exceptions = operation.getExceptions();
+ assertNotNull(exceptions);
+ assertEquals(exceptions.size(), 1);
+ Iterator<String> it = exceptions.iterator();
+ assertNotNull(it.hasNext());
+ assertEquals(it.next(), "java.lang.IllegalArgumentException");
+ }
+
+ /**
+ * Test of setDocumentation method, of class ObjectModelBuilder.
+ */
+ //@Test
+ public void testSetDocumentation() {
+ System.out.println("setDocumentation");
+ }
+
+}
\ No newline at end of file
Property changes on: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderTest.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
1
0
r689 - in branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene: java models/object/xml
by fdesbois@users.nuiton.org 03 Nov '09
by fdesbois@users.nuiton.org 03 Nov '09
03 Nov '09
Author: fdesbois
Date: 2009-11-03 17:20:33 +0100 (Tue, 03 Nov 2009)
New Revision: 689
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/models/object/xml/ObjectModelBuilder.java
Log:
Add javadoc for builders
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-11-03 15:26:27 UTC (rev 688)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2009-11-03 16:20:33 UTC (rev 689)
@@ -18,6 +18,10 @@
* @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$
*/
@@ -25,8 +29,14 @@
private static final Log log = LogFactory.getLog(JavaBuilder.class);
+ /**
+ * Builder where the filling is based on
+ */
protected ObjectModelBuilder modelBuilder;
+ /**
+ * ObjectModel extension to manage imports : one ImportsManager by classifier
+ */
protected ImportsManagerExtension managers;
@SuppressWarnings("unchecked")
@@ -37,11 +47,32 @@
ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
}
+ /**
+ * Get the model which is built
+ * @return an ObjectModel
+ */
public ObjectModel getModel() {
return this.modelBuilder.getModel();
}
+ /**
+ * 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>()
+ * --> 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)
+ */
public void addImport(ObjectModelClassifier classifier, String imports) {
+ if (imports == null) {
+ return;
+ }
ImportsManager manager = managers.getManager(classifier);
for (String oneType : GeneratorUtil.getTypesList(imports)) {
manager.addImport(oneType);
@@ -51,14 +82,37 @@
}
}
+ /**
+ * 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)
+ */
public ObjectModelClass createClass(String name, String packageName) {
return modelBuilder.createClass(name, packageName);
}
+ /**
+ * 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[])
+ */
public ObjectModelClass createAbstractClass(String name, String packageName) {
return modelBuilder.createClass(name, packageName, ObjectModelModifier.ABSTRACT);
}
+ /**
+ * 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)
+ */
public void setSuperClass(ObjectModelClass classifier, String superclassQualifiedName) {
ObjectModelClassImpl impl = (ObjectModelClassImpl) classifier;
impl.getSuperclasses().clear(); // suppress all existing superclass: only one can be set for java
@@ -66,11 +120,50 @@
this.addImport(classifier, superclassQualifiedName);
}
+ /**
+ * 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)
+ */
public void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) {
modelBuilder.addInterface(classifier, interfaceQualifiedName);
this.addImport(classifier, interfaceQualifiedName);
}
+ /**
+ * 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[])
+ */
+ public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value,
+ ObjectModelModifier... modifiers) {
+ this.addImport(classifier, type);
+ this.addImport(classifier, value);
+ return modelBuilder.addAttribute(classifier, name, type, value, modifiers);
+ }
+
+ /**
+ * 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
+ * @param value
+ * @param visibility modifier allowed : PUBLIC, PRIVATE, PROTECTED, PACKAGE
+ * @return a new ObjectModelAttribute
+ * @throws IllegalArgumentException if the modifier is not a visibility
+ */
public ObjectModelAttribute addConstant(ObjectModelClassifier classifier, String name, String type, String value,
ObjectModelModifier visibility) throws IllegalArgumentException {
if (!visibility.isVisibility()) {
@@ -78,21 +171,30 @@
" for " + classifier.getQualifiedName());
}
- return modelBuilder.addAttribute(classifier, name, type, value, visibility,
+ return addAttribute(classifier, name, type, value, visibility,
ObjectModelModifier.STATIC, ObjectModelModifier.FINAL);
}
+ /**
+ * 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
+ * @return a new ObjectModelAttribute
+ */
public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type) {
- return modelBuilder.addAttribute(classifier, name, type);
+ return addAttribute(classifier, name, type, "", ObjectModelModifier.PROTECTED);
}
- public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value,
- ObjectModelModifier... modifiers) {
- return modelBuilder.addAttribute(classifier, name, type, value, modifiers);
- }
-
+ /**
+ * 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
+ */
public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, ObjectModelAttribute attribute) {
- this.addImport(classifier, attribute.getType());
Set<ObjectModelModifier> modifiers = new HashSet<ObjectModelModifier>();
@@ -112,10 +214,34 @@
modifiers.add(ObjectModelModifier.PACKAGE);
}
- return modelBuilder.addAttribute(classifier, attribute.getName(), attribute.getType(),
+ return addAttribute(classifier, attribute.getName(), attribute.getType(),
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[])
+ */
+ public ObjectModelOperation addOperation(ObjectModelClassifier classifier, String name, String type,
+ 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
+ * @throws IllegalArgumentException if the modifier is not a visibility
+ */
public ObjectModelOperation addConstructor(ObjectModelClass clazz, ObjectModelModifier visibility)
throws IllegalArgumentException {
if (!visibility.isVisibility()) {
@@ -123,26 +249,43 @@
" for " + clazz.getQualifiedName());
}
- return modelBuilder.addOperation(clazz, clazz.getName(), null, visibility);
+ return addOperation(clazz, clazz.getName(), null, visibility);
}
- public ObjectModelOperation addOperation(ObjectModelClassifier classifier, String name, String type,
- ObjectModelModifier... modifiers) {
-
- return modelBuilder.addOperation(classifier, name, type, modifiers);
- }
-
+ /**
+ * 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)
+ */
public ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) {
- ObjectModelParameter param = modelBuilder.addParameter(operation, type, name);
this.addImport((ObjectModelClassifier) operation.getDeclaringElement(), type);
- return param;
+ return modelBuilder.addParameter(operation, type, name);
}
+ /**
+ * 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)
+ */
public void addException(ObjectModelOperation operation, String exception) {
+ this.addImport((ObjectModelClassifier) operation.getDeclaringElement(), exception);
modelBuilder.addException(operation, exception);
- this.addImport((ObjectModelClassifier) operation.getDeclaringElement(), exception);
}
+ /**
+ * 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)
+ */
public void setOperationBody(ObjectModelOperation operation, String body)
throws IllegalArgumentException {
if (operation.isAbstract()) {
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-11-03 15:26:27 UTC (rev 688)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilder.java 2009-11-03 16:20:33 UTC (rev 689)
@@ -19,6 +19,9 @@
* @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$
*/
@@ -26,15 +29,31 @@
protected ObjectModelImpl model;
+ /**
+ * Constructor. Must have a name for the new model created.
+ * @param name model name
+ */
public ObjectModelBuilder(String name) {
this.model = new ObjectModelImpl();
this.model.setName(name);
}
+ /**
+ * Get the building model
+ * @return the ObjectModel which is currently built
+ */
public ObjectModel getModel() {
return this.model;
}
+ /**
+ * Create a new class in the model.
+ * Modifiers allowed : ABSTRACT, STATIC.
+ * @param name class name
+ * @param packageName class package
+ * @param modifiers class modifiers
+ * @return the new ObjectModelClass added to the model
+ */
public ObjectModelClass createClass(String name, String packageName, ObjectModelModifier... modifiers) {
ObjectModelClassImpl result = new ObjectModelClassImpl();
result.setName(name);
@@ -49,17 +68,44 @@
return result;
}
+ /**
+ * Create a new interface in the model.
+ * @param name interface name
+ * @param packageName interface package
+ * @return the new ObjectModelInterface added to the model
+ */
public ObjectModelInterface createInterface(String name, String packageName) {
ObjectModelInterfaceImpl result = new ObjectModelInterfaceImpl();
result.setName(name);
result.setPackage(packageName);
+ model.addInterface(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)
+ * @return the new ObjectModelAttribute added
+ */
public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type) {
return addAttribute(classifier, name, type, "");
}
+ /**
+ * Add an attribute to a classifier (interface, class, enum).
+ * Modifiers allowed : STATIC, FINAL, PUBLIC, PRIVATE, PROTECTED, PACKAGE.
+ * 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
+ * @return the new ObjectModelAttribute added
+ * @see org.nuiton.eugene.models.object.ObjectModelModifier#isVisibility()
+ */
public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value,
ObjectModelModifier... modifiers) {
ObjectModelAttributeImpl attribute = new ObjectModelAttributeImpl();
@@ -83,7 +129,17 @@
return attribute;
}
- public ObjectModelOperation addOperation(ObjectModelClassifier clazz,
+ /**
+ * 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 returnType operation type (full qualified name)
+ * @param modifiers operation modifiers
+ * @return the new ObjectModelOperation added
+ */
+ public ObjectModelOperation addOperation(ObjectModelClassifier classifier,
String name, String returnType, ObjectModelModifier... modifiers) {
ObjectModelOperationImpl result = new ObjectModelOperationImpl();
result.setName(name);
@@ -105,15 +161,25 @@
}
}
- ((ObjectModelClassifierImpl)clazz).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
+ */
public void setOperationBody(ObjectModelOperation operation, String body) {
ObjectModelOperationImpl operationImpl = (ObjectModelOperationImpl) operation;
operationImpl.setBodyCode(body);
}
+ /**
+ * Add an interface to a classifier. The interface may not exist in model.
+ * @param classifier where the interface will be added
+ * @param interfaceQualifiedName interface qualified name
+ */
public void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) {
ObjectModelClassifierImpl impl = (ObjectModelClassifierImpl) classifier;
@@ -123,6 +189,11 @@
impl.addInterface(interfacez);
}
+ /**
+ * Add a superclass to an other class. The superclass may not exist in model.
+ * @param clazz where the superclass will be added
+ * @param superclassQualifiedName superclass qualified name
+ */
public void addSuperclass(ObjectModelClass clazz, String superclassQualifiedName) {
ObjectModelClassImpl impl = (ObjectModelClassImpl) clazz;
@@ -132,6 +203,13 @@
impl.addSuperclass(superclass);
}
+ /**
+ * 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
+ * @return the new ObjectModelParameter added
+ */
public ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) {
ObjectModelOperationImpl impl = (ObjectModelOperationImpl) operation;
ObjectModelParameterImpl param = new ObjectModelParameterImpl();
@@ -141,6 +219,11 @@
return param;
}
+ /**
+ * Add an exception to an operation.
+ * @param operation where the exception will be added
+ * @param exception name of the exception (full qualified name)
+ */
public void addException(ObjectModelOperation operation, String exception) {
ObjectModelOperationImpl impl = (ObjectModelOperationImpl) operation;
ObjectModelParameterImpl param = new ObjectModelParameterImpl();
@@ -148,6 +231,11 @@
impl.addExceptionParameter(param);
}
+ /**
+ * Set the documentation of an element in the model.
+ * @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;
impl.setDocumentation(documentation);
1
0
r688 - in branches/eugene-2.0: eugene/src/main/java/org/nuiton/eugene/java eugene/src/main/java/org/nuiton/eugene/models/object eugene/src/main/java/org/nuiton/eugene/models/object/xml eugene/src/test/java/org/nuiton/eugene/java eugene-test/src/main/java/org/nuiton/eugene/test/generator
by fdesbois@users.nuiton.org 03 Nov '09
by fdesbois@users.nuiton.org 03 Nov '09
03 Nov '09
Author: fdesbois
Date: 2009-11-03 16:26:27 +0100 (Tue, 03 Nov 2009)
New Revision: 688
Added:
branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelModifier.java
branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilder.java
Removed:
branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java
Modified:
branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java
branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestBuilder.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/ObjectModelTransformerToJava.java
branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java
Log:
- Refactor Builders -> create ObjectModelBuilder
- Add ObjectModelModifier to simplify builder's methods
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-11-03 11:38:10 UTC (rev 687)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2009-11-03 15:26:27 UTC (rev 688)
@@ -1,15 +1,18 @@
package org.nuiton.eugene.java;
+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.models.object.*;
+import org.nuiton.eugene.models.object.ObjectModelModifier;
import org.nuiton.eugene.models.object.xml.*;
/**
* JavaBuilder
- * <p/>
+ *
* Created: 29 oct. 2009
*
* @author fdesbois
@@ -17,33 +20,25 @@
*
* Mise a jour: $Date$
* par : $Author$
- * <p/>
*/
public class JavaBuilder {
private static final Log log = LogFactory.getLog(JavaBuilder.class);
- protected ObjectModelImpl model;
+ protected ObjectModelBuilder modelBuilder;
protected ImportsManagerExtension managers;
@SuppressWarnings("unchecked")
public JavaBuilder(String modelName) {
- this.model = new ObjectModelImpl();
- this.model.setName(modelName);
+ this.modelBuilder = new ObjectModelBuilder(modelName);
- // initialize ObjectModel extension for ImportsManager
- //try {
- this.managers = this.model.getExtension(
- ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
- /*} catch (IllegalArgumentException eee) { // "imports" not exist
- this.managers = new ImportsManagerExtension();
- this.model.addExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, this.managers);
- }*/
+ this.managers = getModel().getExtension(
+ ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
}
public ObjectModel getModel() {
- return this.model;
+ return this.modelBuilder.getModel();
}
public void addImport(ObjectModelClassifier classifier, String imports) {
@@ -57,259 +52,103 @@
}
public ObjectModelClass createClass(String name, String packageName) {
- ObjectModelClassImpl clazz =
- (ObjectModelClassImpl)ObjectModelBuilderHelper.createClass(name, packageName);
- model.addClass(clazz);
- return clazz;
+ return modelBuilder.createClass(name, packageName);
}
public ObjectModelClass createAbstractClass(String name, String packageName) {
- ObjectModelClassImpl clazz =
- (ObjectModelClassImpl)ObjectModelBuilderHelper.createAbstractClass(name, packageName);
- model.addClass(clazz);
- return clazz;
+ return modelBuilder.createClass(name, packageName, ObjectModelModifier.ABSTRACT);
}
public void setSuperClass(ObjectModelClass classifier, String superclassQualifiedName) {
ObjectModelClassImpl impl = (ObjectModelClassImpl) classifier;
impl.getSuperclasses().clear(); // suppress all existing superclass: only one can be set for java
- ObjectModelBuilderHelper.addSuperclass(impl, superclassQualifiedName);
+ modelBuilder.addSuperclass(impl, superclassQualifiedName);
this.addImport(classifier, superclassQualifiedName);
}
public void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) {
- ObjectModelBuilderHelper.addInterface(classifier, interfaceQualifiedName);
+ modelBuilder.addInterface(classifier, interfaceQualifiedName);
this.addImport(classifier, interfaceQualifiedName);
}
- /**
- * Add attribute to a classifier with properties in parse string.
- * Use java syntax to define properties of the attribute :
- * ex : "public static final java.util.Date maDate = new java.util.Date()"
- *
- * @param classifier the classifier to add the attribute
- * @param parse the properties of the attribute to parse
- * @return a new ObjectModelAttribute corresponding to the new attribute added to the classifier
- * @throws IllegalArgumentException
- */
- public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String parse)
- throws IllegalArgumentException {
- ObjectModelAttributeImpl attribute = new ObjectModelAttributeImpl();
- String result = parse;
- try {
- // Visibility
- if (parse.contains("public ")) {
- attribute.setVisibility("public");
- result = parse.replace("public ", "");
- } else if (parse.contains("protected ")) {
- attribute.setVisibility("protected");
- result = parse.replace("protected ", "");
- } else if (parse.contains("private ")) {
- attribute.setVisibility("private");
- result = parse.replace("private ", "");
- } else {
- attribute.setVisibility("");
- }
-
- // Static
- if (result.contains("static ")) {
- attribute.setStatic(true);
- result = result.replace("static ", "");
- }
- // Final
- if (result.contains("final ")) {
- attribute.setFinal(true);
- result = result.replace("final ", "");
- }
-
- // Type
- int typeIndex = result.indexOf(" ");
- String type = result.substring(0, typeIndex).trim();
- attribute.setType(type);
- result = result.substring(typeIndex + 1);
-
- // Name
- int nameIndex = result.indexOf("=");
- String name = "";
- if (nameIndex != -1) {
- name = result.substring(0, nameIndex).trim();
- result = result.substring(nameIndex);
-
- // DefaultValue
- int equalsIndex = result.indexOf("=");
- String value = result.substring(equalsIndex + 1).trim();
- attribute.setDefaultValue(value);
-
- //if (value.contains("new ")) {
- this.addImport(classifier, value);
- //}
-
- } else { // Il ne reste que le nom si pas de =
- name = result;
- }
- attribute.setName(name);
-
- ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl) classifier;
- classifierImpl.addAttribute(attribute);
- this.addImport(classifier, attribute.getType());
- } catch (StringIndexOutOfBoundsException eee) {
- throw new IllegalArgumentException("Can't add Attribute : Illegal parse parameter : " +
- "input = " + parse + " _ current = " + result, eee);
+ public ObjectModelAttribute addConstant(ObjectModelClassifier classifier, String name, String type, String value,
+ ObjectModelModifier visibility) throws IllegalArgumentException {
+ if (!visibility.isVisibility()) {
+ throw new IllegalArgumentException("Illegal visibility type : " + visibility.name() +
+ " for " + classifier.getQualifiedName());
}
- return attribute;
+
+ return modelBuilder.addAttribute(classifier, name, type, value, visibility,
+ ObjectModelModifier.STATIC, ObjectModelModifier.FINAL);
}
- public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, ObjectModelAttribute attribute) {
- this.addImport(classifier, attribute.getType());
- return ObjectModelBuilderHelper.addAttribute(classifier, attribute.getName(), attribute.getType(),
- attribute.getDefaultValue(), attribute.getVisibility(), attribute.isStatic(), attribute.isFinal());
+ public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type) {
+ return modelBuilder.addAttribute(classifier, name, type);
}
- public ObjectModelOperation addConstructor(ObjectModelClass clazz, String visibility) {
- return ObjectModelBuilderHelper.addOperation(clazz, visibility, clazz.getName(), null);
+ public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value,
+ ObjectModelModifier... modifiers) {
+ return modelBuilder.addAttribute(classifier, name, type, value, modifiers);
}
- /**
- * Attention ne marche pas pour les constructeur !!!
- * Attention ne marche pas pour les generic du type : <T extends Plop> T myMethod !!!
- * @param classifier
- * @param parse
- * @return
- * @throws IllegalArgumentException
- */
- public ObjectModelOperation addOperation(ObjectModelClassifier classifier, String parse)
- throws IllegalArgumentException {
- ObjectModelOperationImpl operation = new ObjectModelOperationImpl();
- String result = "";
+ public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, ObjectModelAttribute attribute) {
+ this.addImport(classifier, attribute.getType());
- try {
- // Visibility
- if (parse.contains("public ")) {
- operation.setVisibility("public");
- result = parse.replace("public ", "");
- } else if (parse.contains("protected ")) {
- operation.setVisibility("protected");
- result = parse.replace("protected ", "");
- } else if (parse.contains("private ")) {
- operation.setVisibility("private");
- result = parse.replace("private ", "");
- } else {
- operation.setVisibility("");
- }
+ Set<ObjectModelModifier> modifiers = new HashSet<ObjectModelModifier>();
- // Static
- if (result.contains("static ")) {
- operation.setStatic(true);
- result = result.replace("static ", "");
- }
- // Abstract
- if (result.contains("abstract ")) {
- operation.setAbstract(true);
- result = result.replace("abstract ", "");
- }
+ if (attribute.isStatic()) {
+ modifiers.add(ObjectModelModifier.STATIC);
+ }
+ if (attribute.isFinal()) {
+ modifiers.add(ObjectModelModifier.FINAL);
+ }
+ if (attribute.getVisibility().equals("public")) {
+ modifiers.add(ObjectModelModifier.PUBLIC);
+ } else if (attribute.getVisibility().equals("protected")) {
+ modifiers.add(ObjectModelModifier.PROTECTED);
+ } else if (attribute.getVisibility().equals("private")) {
+ modifiers.add(ObjectModelModifier.PRIVATE);
+ } else if (attribute.getVisibility().equals("")) {
+ modifiers.add(ObjectModelModifier.PACKAGE);
+ }
- // Return Parameter
- int typeIndex = result.indexOf(" ");
- String type = result.substring(0, typeIndex).trim();
- result = result.substring(typeIndex + 1);
+ return modelBuilder.addAttribute(classifier, attribute.getName(), attribute.getType(),
+ attribute.getDefaultValue(), modifiers.toArray(new ObjectModelModifier[modifiers.size()]));
+ }
- // TROP COMPLEXE pour les generic du type <T extends Plop> T myMethod
- /*if (log.isDebugEnabled()) {
- log.debug ("type : " + type + " _ result= " + result);
- }
- if (type.contains("<")) { // Generic : <T extends Plop> T myMethod
- int endGeneric = result.indexOf(">"); // index de fin du generic
- type += result.substring(0, endGeneric).trim(); // type = <T extends Plop>
- if (log.isDebugEnabled()) {
- log.debug ("type : " + type + " _ result= " + result);
- }
- result = result.substring(endGeneric + 1).trim(); // result = T myMethod
- if (log.isDebugEnabled()) {
- log.debug ("type : " + type + " _ result= " + result);
- }
- typeIndex = result.indexOf(" ");
- type += " " + result.substring(0, typeIndex).trim(); // type = <T extends Plop> T
- if (log.isDebugEnabled()) {
- log.debug ("type : " + type + " _ result= " + result);
- }
- result = result.substring(typeIndex + 1); // result = myMethod
- if (log.isDebugEnabled()) {
- log.debug ("type : " + type + " _ result= " + result);
- }
- }*/
- ObjectModelParameterImpl returnParameter = new ObjectModelParameterImpl();
- returnParameter.setType(type);
- operation.setReturnParameter(returnParameter);
-
- if (log.isDebugEnabled()) {
- log.debug("parse before name : " + result);
- }
-
- int nameIndex = result.indexOf("(");
- String methodName = "";
- if (nameIndex != -1) {
- methodName = result.substring(0, nameIndex).trim();
- result = result.substring(nameIndex);
-
- // Input parameters
- if (result.contains("(")) {
- int parentheseIndex = result.indexOf("(");
- int parentheseEndIndex = result.indexOf(")");
- result = result.substring(parentheseIndex + 1, parentheseEndIndex);
-
- String paramName = "";
- for (String param : result.split(",")) {
- typeIndex = param.indexOf(" ");
- type = param.substring(0, typeIndex).trim();
- paramName = param.substring(typeIndex + 1).trim();
-
- ObjectModelParameterImpl parameter = new ObjectModelParameterImpl();
- parameter.setType(type);
- parameter.setName(paramName);
- operation.addParameter(parameter);
- }
- }
-
- } else { // Il ne reste que le nom si pas de (
- methodName = result;
- }
- operation.setName(methodName);
-
- // Add operation to Classifier
- ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl) classifier;
- classifierImpl.addOperation(operation);
- // imports for returnType
- this.addImport(classifier, operation.getReturnType());
- // imports for inputParameters
- for (ObjectModelParameter parameter : operation.getParameters()) {
- this.addImport(classifier, parameter.getType());
- }
- } catch (StringIndexOutOfBoundsException eee) {
- throw new IllegalArgumentException("Can't add Operation : Illegal parse parameter : " +
- "input = " + parse + " _ current = " + result, eee);
+ public ObjectModelOperation addConstructor(ObjectModelClass clazz, ObjectModelModifier visibility)
+ throws IllegalArgumentException {
+ if (!visibility.isVisibility()) {
+ throw new IllegalArgumentException("Illegal visibility type : " + visibility.name() +
+ " for " + clazz.getQualifiedName());
}
- return operation;
+
+ return modelBuilder.addOperation(clazz, clazz.getName(), null, visibility);
}
- public ObjectModelOperation addOperation(ObjectModelClassifier classifier, String visibility,
- String type, String name, String... inputParameters) {
+ public ObjectModelOperation addOperation(ObjectModelClassifier classifier, String name, String type,
+ ObjectModelModifier... modifiers) {
- return ObjectModelBuilderHelper.addOperation(classifier, visibility, name, type, inputParameters);
+ return modelBuilder.addOperation(classifier, name, type, modifiers);
}
public ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) {
- ObjectModelParameter param = ObjectModelBuilderHelper.addParameter(operation, type, name);
+ ObjectModelParameter param = modelBuilder.addParameter(operation, type, name);
this.addImport((ObjectModelClassifier) operation.getDeclaringElement(), type);
return param;
}
public void addException(ObjectModelOperation operation, String exception) {
- ObjectModelBuilderHelper.addException(operation, exception);
+ modelBuilder.addException(operation, exception);
this.addImport((ObjectModelClassifier) operation.getDeclaringElement(), exception);
}
- public void setOperationBody(ObjectModelOperation operation, String body) {
- ObjectModelBuilderHelper.setOperationBody(operation, body);
+ public void setOperationBody(ObjectModelOperation operation, String body)
+ throws IllegalArgumentException {
+ if (operation.isAbstract()) {
+ throw new IllegalArgumentException("Unable to add body for an abstract method");
+ }
+ modelBuilder.setOperationBody(operation, body);
}
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-11-03 11:38:10 UTC (rev 687)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2009-11-03 15:26:27 UTC (rev 688)
@@ -73,29 +73,30 @@
builder.addInterface(classifier, interfaceQualifiedName);
}
- protected ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String parse)
- throws IllegalArgumentException {
- return builder.addAttribute(classifier, parse);
+ protected ObjectModelAttribute addConstant(ObjectModelClassifier classifier, String name, String type, String value,
+ ObjectModelModifier visibility) throws IllegalArgumentException {
+ return builder.addConstant(classifier, name, type, value, visibility);
}
+ protected ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value,
+ ObjectModelModifier... modifiers) {
+ return builder.addAttribute(classifier, name, type, value, modifiers);
+ }
+
protected ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, ObjectModelAttribute attribute) {
return builder.addAttribute(classifier, attribute);
}
- protected ObjectModelOperation addConstructor(ObjectModelClass clazz, String visibility) {
+ protected ObjectModelOperation addConstructor(ObjectModelClass clazz, ObjectModelModifier visibility)
+ throws IllegalArgumentException {
return builder.addConstructor(clazz, visibility);
}
- protected ObjectModelOperation addOperation(ObjectModelClassifier classifier, String parse)
- throws IllegalArgumentException {
- return builder.addOperation(classifier, parse);
+ protected ObjectModelOperation addOperation(ObjectModelClassifier classifier, String name, String type,
+ ObjectModelModifier... modifiers) {
+ return builder.addOperation(classifier, name, type, modifiers);
}
- protected ObjectModelOperation addOperation(ObjectModelClassifier classifier, String visibility,
- String type, String name, String... inputParameters) {
- return builder.addOperation(classifier, visibility, type, name, inputParameters);
- }
-
protected ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) {
return builder.addParameter(operation, type, name);
}
@@ -104,7 +105,8 @@
builder.addException(operation, exception);
}
- protected void setOperationBody(ObjectModelOperation operation, String body) {
+ protected void setOperationBody(ObjectModelOperation operation, String body)
+ throws IllegalArgumentException {
builder.setOperationBody(operation, body);
}
Added: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelModifier.java
===================================================================
--- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelModifier.java (rev 0)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelModifier.java 2009-11-03 15:26:27 UTC (rev 688)
@@ -0,0 +1,56 @@
+
+package org.nuiton.eugene.models.object;
+
+/**
+ * ObjectModelModifier
+ *
+ * Created: 3 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public enum ObjectModelModifier {
+
+ STATIC, FINAL, ABSTRACT, PUBLIC, PROTECTED, PRIVATE, PACKAGE;
+
+ public boolean isVisibility() {
+ return this == PUBLIC ||
+ this == PROTECTED ||
+ this == PRIVATE ||
+ this == PACKAGE;
+ }
+
+ @Override
+ public String toString() {
+ switch (this) {
+ //case STATIC: return "static";
+ //case ABSTRACT: return "abstract";
+ //case FINAL: return "final";
+ case PUBLIC: return "public";
+ case PRIVATE: return "private";
+ case PROTECTED: return "protected";
+ case PACKAGE: return "";
+ }
+ return "";
+ }
+
+ public static ObjectModelModifier toValue(String name) {
+ if (name.equals("public")) {
+ return PUBLIC;
+ } else if (name.equals("private")) {
+ return PRIVATE;
+ } else if (name.equals("protected")) {
+ return PROTECTED;
+ } else if (name.equals("")) {
+ return PACKAGE;
+ } else {
+ return null;
+ }
+ }
+
+
+
+}
Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelModifier.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Added: 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 (rev 0)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilder.java 2009-11-03 15:26:27 UTC (rev 688)
@@ -0,0 +1,156 @@
+
+package org.nuiton.eugene.models.object.xml;
+
+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.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;
+
+/**
+ * ObjectModelBuilder
+ *
+ * Created: 3 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ObjectModelBuilder {
+
+ protected ObjectModelImpl model;
+
+ public ObjectModelBuilder(String name) {
+ this.model = new ObjectModelImpl();
+ this.model.setName(name);
+ }
+
+ public ObjectModel getModel() {
+ return this.model;
+ }
+
+ public ObjectModelClass createClass(String name, String packageName, ObjectModelModifier... modifiers) {
+ ObjectModelClassImpl result = new ObjectModelClassImpl();
+ result.setName(name);
+ result.setPackage(packageName);
+ for (ObjectModelModifier modifier : modifiers) {
+ switch (modifier) {
+ case ABSTRACT: result.setAbstract(true); break;
+ case STATIC: result.setStatic(true);
+ }
+ }
+ model.addClass(result);
+ return result;
+ }
+
+ public ObjectModelInterface createInterface(String name, String packageName) {
+ ObjectModelInterfaceImpl result = new ObjectModelInterfaceImpl();
+ result.setName(name);
+ result.setPackage(packageName);
+ return result;
+ }
+
+ public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type) {
+ return addAttribute(classifier, name, type, "");
+ }
+
+ public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value,
+ ObjectModelModifier... modifiers) {
+ ObjectModelAttributeImpl attribute = new ObjectModelAttributeImpl();
+ attribute.setName(name);
+ attribute.setType(type);
+ attribute.setDefaultValue(value);
+
+ for (ObjectModelModifier modifier : modifiers) {
+ if (modifier.isVisibility()) {
+ attribute.setVisibility(modifier.toString());
+ } else {
+ switch (modifier) {
+ case STATIC: attribute.setStatic(true); break;
+ case FINAL: attribute.setFinal(true);
+ }
+ }
+ }
+
+ ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl)classifier;
+ classifierImpl.addAttribute(attribute);
+ return attribute;
+ }
+
+ public ObjectModelOperation addOperation(ObjectModelClassifier clazz,
+ String name, String returnType, ObjectModelModifier... modifiers) {
+ ObjectModelOperationImpl result = new ObjectModelOperationImpl();
+ result.setName(name);
+
+ if (returnType != null) {
+ ObjectModelParameterImpl returnParameter = new ObjectModelParameterImpl();
+ returnParameter.setType(returnType);
+ result.setReturnParameter(returnParameter);
+ }
+
+ for (ObjectModelModifier modifier : modifiers) {
+ if (modifier.isVisibility()) {
+ result.setVisibility(modifier.toString());
+ } else {
+ switch (modifier) {
+ case STATIC: result.setStatic(true); break;
+ case ABSTRACT: result.setAbstract(true);
+ }
+ }
+ }
+
+ ((ObjectModelClassifierImpl)clazz).addOperation(result);
+ return result;
+ }
+
+ public void setOperationBody(ObjectModelOperation operation, String body) {
+ ObjectModelOperationImpl operationImpl = (ObjectModelOperationImpl) operation;
+ operationImpl.setBodyCode(body);
+ }
+
+ public void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) {
+ ObjectModelClassifierImpl impl = (ObjectModelClassifierImpl) classifier;
+
+ ObjectModelImplRef interfacez = new ObjectModelImplRef();
+ interfacez.setName(interfaceQualifiedName);
+
+ impl.addInterface(interfacez);
+ }
+
+ public void addSuperclass(ObjectModelClass clazz, String superclassQualifiedName) {
+ ObjectModelClassImpl impl = (ObjectModelClassImpl) clazz;
+
+ ObjectModelImplSuperClassRef superclass = new ObjectModelImplSuperClassRef();
+ superclass.setName(superclassQualifiedName);
+
+ impl.addSuperclass(superclass);
+ }
+
+ public ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) {
+ ObjectModelOperationImpl impl = (ObjectModelOperationImpl) operation;
+ ObjectModelParameterImpl param = new ObjectModelParameterImpl();
+ param.setType(type);
+ param.setName(name);
+ impl.addParameter(param);
+ return param;
+ }
+
+ public void addException(ObjectModelOperation operation, String exception) {
+ ObjectModelOperationImpl impl = (ObjectModelOperationImpl) operation;
+ ObjectModelParameterImpl param = new ObjectModelParameterImpl();
+ param.setType(exception);
+ impl.addExceptionParameter(param);
+ }
+
+ public void setDocumentation(ObjectModelElement element, String documentation) {
+ ObjectModelElementImpl impl = (ObjectModelElementImpl)element;
+ impl.setDocumentation(documentation);
+ }
+
+}
Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilder.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Deleted: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java
===================================================================
--- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java 2009-11-03 11:38:10 UTC (rev 687)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java 2009-11-03 15:26:27 UTC (rev 688)
@@ -1,156 +0,0 @@
-/* *##%
- * Copyright (c) 2009 poussin. All rights reserved.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *##%*/
-
-package org.nuiton.eugene.models.object.xml;
-
-
-import org.nuiton.eugene.models.object.*;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * class that help to build java class or interface object.
- *
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class ObjectModelBuilderHelper {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(ObjectModelBuilderHelper.class);
-
- public static ObjectModelClass createClass(String name, String packageName) {
- ObjectModelClassImpl result = new ObjectModelClassImpl();
- result.setName(name);
- result.setPackage(packageName);
- return result;
- }
-
- public static ObjectModelClass createAbstractClass(String name, String packageName) {
- ObjectModelClassImpl result = (ObjectModelClassImpl) createClass(name,packageName);
- result.setAbstract(true);
- return result;
- }
-
- public static ObjectModelInterface createInterface(String name, String packageName) {
- ObjectModelInterfaceImpl result = new ObjectModelInterfaceImpl();
- result.setName(name);
- result.setPackage(packageName);
- return result;
- }
-
- public static ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value,
- String visibility, boolean isStatic, boolean isFinal) {
- ObjectModelAttributeImpl attribute = new ObjectModelAttributeImpl();
- attribute.setFinal(isFinal);
- attribute.setDefaultValue(value);
- attribute.setName(name);
- attribute.setStatic(isStatic);
- attribute.setType(type);
- attribute.setVisibility(visibility);
-
- ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl)classifier;
- classifierImpl.addAttribute(attribute);
- return attribute;
- }
-
- public static ObjectModelAttribute addConstant(ObjectModelClassifier classifier, String name, String type, String value, String visibility) {
- return addAttribute(classifier, name, type, value, visibility, true, true);
- }
-
- public static ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value) {
- return addAttribute(classifier, name, type, value, "protected", false, false);
- }
-
- public static ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type) {
- return addAttribute(classifier, name, type, "", "protected", false, false);
- }
-
- public static ObjectModelOperation addOperation(ObjectModelClassifier clazz,
- String visibility, String name, String returnType, String... inputParameters) {
- ObjectModelOperationImpl result = new ObjectModelOperationImpl();
- result.setName(name);
-
- result.setName(name);
- result.setVisibility("public");
-
- if (returnType != null) {
- ObjectModelParameterImpl returnParameter = new ObjectModelParameterImpl();
- returnParameter.setType(returnType);
- result.setReturnParameter(returnParameter);
- }
-
- int nbParameters = inputParameters.length;
- if (nbParameters %2 != 0) {
- throw new IllegalArgumentException("Unccorect number of parameters (" + nbParameters + ") : " +
- "each inputParameter must have name and type");
- }
- for (int i = 0; i < inputParameters.length; i+=2) {
- ObjectModelParameterImpl parameter = new ObjectModelParameterImpl();
- parameter.setType(inputParameters[i]);
- parameter.setName(inputParameters[i+1]);
- //importsManager.addImport(inputParameters[i+1]);
- result.addParameter(parameter);
- }
-
- ((ObjectModelClassifierImpl)clazz).addOperation(result);
- return result;
- }
-
- public static void setOperationBody(ObjectModelOperation operation, String body) {
- ObjectModelOperationImpl operationImpl = (ObjectModelOperationImpl) operation;
- operationImpl.setBodyCode(body);
- }
-
- public static void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) {
- ObjectModelClassifierImpl impl = (ObjectModelClassifierImpl) classifier;
-
- ObjectModelImplRef interfacez = new ObjectModelImplRef();
- interfacez.setName(interfaceQualifiedName);
-
- impl.addInterface(interfacez);
- }
-
- public static void addSuperclass(ObjectModelClass clazz, String superclassQualifiedName) {
- ObjectModelClassImpl impl = (ObjectModelClassImpl) clazz;
-
- ObjectModelImplSuperClassRef superclass = new ObjectModelImplSuperClassRef();
- superclass.setName(superclassQualifiedName);
-
- impl.addSuperclass(superclass);
- }
-
- public static ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) {
- ObjectModelOperationImpl impl = (ObjectModelOperationImpl) operation;
- ObjectModelParameterImpl param = new ObjectModelParameterImpl();
- param.setType(type);
- param.setName(name);
- impl.addParameter(param);
- return param;
- }
-
- public static void addException(ObjectModelOperation operation, String exception) {
- ObjectModelOperationImpl impl = (ObjectModelOperationImpl) operation;
- ObjectModelParameterImpl param = new ObjectModelParameterImpl();
- param.setType(exception);
- impl.addExceptionParameter(param);
- }
-}
Modified: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java
===================================================================
--- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java 2009-11-03 11:38:10 UTC (rev 687)
+++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java 2009-11-03 15:26:27 UTC (rev 688)
@@ -14,6 +14,7 @@
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.ObjectModelModifier;
import org.nuiton.eugene.models.object.ObjectModelOperation;
import org.nuiton.eugene.models.object.ObjectModelParameter;
import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl;
@@ -162,52 +163,54 @@
}
/**
- * Test of addAttribute(ObjectModelClassifier, String) method, of class JavaBuilder.
+ * Test of addConstant method, of class JavaBuilder.
* Prerequisite : existing classifier in model.
- * - Add attribute simple attribute (visibility, type, name)
- * - Add attribute with defaultValue
- * - Add attribute with defaultValue as new instance of object
- * - Add attribute with defaultValue which contains a '.' (double)
+ * - Add a public constant attribute (static, final)
*/
@Test
- public void testAddAttributeObjectModelClassifierString() {
+ public void testAddConstant() {
+ System.out.println("addConstant");
+ JavaBuilder builder = new JavaBuilder("TestModel");
+
+ ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
+
+ ObjectModelAttribute constant = builder.addConstant(classifier, "GENDER_MALE", "boolean", "true",
+ ObjectModelModifier.PUBLIC);
+
+ assertTrue(constant.isFinal());
+ assertTrue(constant.isStatic());
+ }
+
+ /**
+ * Test of addAttribute method, of class JavaBuilder.
+ * Prerequisite : existing classifier in model.
+ * - Add a public attribute without default value
+ * - Add a private static attribute with default value
+ */
+ @Test
+ public void testAddAttribute() {
System.out.println("addAttribute");
- JavaBuilder builder = new JavaBuilder("modelName");
+ JavaBuilder builder = new JavaBuilder("TestModel");
ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
- String parse = "public java.lang.String bilou";
- ObjectModelAttribute result = builder.addAttribute(classifier, parse);
- assertNotNull(result);
- assertEquals(result.getName(), "bilou");
- assertEquals(result.getType(), "java.lang.String");
- assertEquals(result.getVisibility(), "public");
+ ObjectModelAttribute attribute = builder.addAttribute(classifier, "firstName", "java.lang.String", "",
+ ObjectModelModifier.PUBLIC);
- parse = "public static final long uid = 12534sdf78ef9";
- result = builder.addAttribute(classifier, parse);
- assertNotNull(result);
- assertTrue(result.isFinal());
- assertTrue(result.isStatic());
- assertEquals(result.getName(), "uid");
- assertEquals(result.getType(), "long");
- assertEquals(result.getVisibility(), "public");
- assertEquals(result.getDefaultValue(), "12534sdf78ef9");
+ assertNotNull(attribute);
+ assertEquals(attribute.getName(), "firstName");
+ assertEquals(attribute.getType(), "java.lang.String");
+ assertEquals(attribute.getVisibility(), "public");
+ assertEquals(attribute.getDefaultValue(), "");
+ assertFalse(attribute.isFinal());
+ assertFalse(attribute.isStatic());
- parse = "private java.util.Date publicDate = new java.util.Date()";
- result = builder.addAttribute(classifier, parse);
- assertNotNull(result);
- assertEquals(result.getName(), "publicDate");
- assertEquals(result.getType(), "java.util.Date");
- assertEquals(result.getVisibility(), "private");
- assertEquals(result.getDefaultValue(), "new java.util.Date()");
+ attribute = builder.addAttribute(classifier, "roles", "java.lang.List<org.chorem.bonzoms.Role>",
+ "new java.lang.ArrayList<org.chorem.bonzoms.Role>()",
+ ObjectModelModifier.PRIVATE, ObjectModelModifier.STATIC);
- parse = "private double age = 2.0";
- result = builder.addAttribute(classifier, parse);
- assertNotNull(result);
- assertEquals(result.getName(), "age");
- assertEquals(result.getType(), "double");
- assertEquals(result.getVisibility(), "private");
- assertEquals(result.getDefaultValue(), "2.0");
+ assertEquals(attribute.getDefaultValue(), "new java.lang.ArrayList<org.chorem.bonzoms.Role>()");
+ assertTrue(attribute.isStatic());
}
/**
@@ -231,13 +234,8 @@
ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
ObjectModelAttribute result = builder.addAttribute(classifier, attribute);
- assertNotNull(result);
- assertEquals(result.getName(), "name");
- assertEquals(result.getType(), "java.lang.String");
- assertEquals(result.getVisibility(), "public");
- assertEquals(result.getDefaultValue(), "\"\"");
- assertTrue(result.isFinal());
- assertFalse(result.isStatic());
+
+ assertNotSame(attribute, result);
}
/**
@@ -253,7 +251,7 @@
ObjectModelClass clazz = builder.createClass("Person", "org.chorem.bonzoms");
- ObjectModelOperation operation = builder.addConstructor(clazz, "public");
+ ObjectModelOperation operation = builder.addConstructor(clazz, ObjectModelModifier.PUBLIC);
assertNotNull(operation);
assertEquals(operation.getName(), "Person");
assertNull(operation.getReturnParameter());
@@ -263,74 +261,28 @@
/**
* Test of addOperation method, of class JavaBuilder.
* Prerequisite : existing classifier in model.
- * - Add simple method without parameters
- * - Add method with one parameter
- * NOTE : unsupported generic and exceptions
+ * - Add simple public method
+ * - Add abstract method
*/
@Test
- public void testAddOperationObjectModelClassifierString() {
+ public void testAddOperation() {
System.out.println("addOperation");
- JavaBuilder builder = new JavaBuilder("modelName");
- ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
-
- String parse = "public abstract java.util.List<java.lang.String> methodName";
- ObjectModelOperation result = builder.addOperation(classifier, parse);
- assertNotNull(result);
- assertTrue(result.isAbstract());
- assertEquals(result.getName(), "methodName");
- assertEquals(result.getReturnType(), "java.util.List<java.lang.String>");
- assertEquals(result.getVisibility(), "public");
-
- /*parse = "public <T extends blob> T myMethod"; // UNSUPPORTED*/
-
- parse = "public void addPropertyChangeListener(java.lang.String propertyName)";
- result = builder.addOperation(classifier, parse);
- assertNotNull(result);
- assertEquals(result.getName(), "addPropertyChangeListener");
- assertEquals(result.getReturnType(), "void");
- assertEquals(result.getVisibility(), "public");
- assertEquals(result.getParameters().size(), 1);
-
- List<ObjectModelParameter> listParams = (List<ObjectModelParameter>)result.getParameters();
- ObjectModelParameter param1 = listParams.get(0);
- assertEquals(param1.getName(), "propertyName");
- assertEquals(param1.getType(), "java.lang.String");
- }
-
- /**
- * Test of addOperation method, of class JavaBuilder.
- * Prerequisite : existing classifier in model.
- * - Add simple method without parameters
- * - Add method with one parameter
- */
- @Test
- public void testAddOperation5args() {
- System.out.println("addOperation");
-
JavaBuilder builder = new JavaBuilder("modelName");
ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
ObjectModelOperation result = builder.addOperation(classifier,
- "public", "java.util.List<java.lang.String>", "methodName");
+ "methodName", "java.util.List<java.lang.String>", ObjectModelModifier.PUBLIC);
assertNotNull(result);
assertEquals(result.getName(), "methodName");
assertEquals(result.getReturnType(), "java.util.List<java.lang.String>");
assertEquals(result.getVisibility(), "public");
+ assertFalse(result.isAbstract());
- result = builder.addOperation(classifier, "public", "void", "addPropertyChangeListener",
- "java.lang.String", "propertyName");
- assertNotNull(result);
- assertEquals(result.getName(), "addPropertyChangeListener");
- assertEquals(result.getReturnType(), "void");
- assertEquals(result.getVisibility(), "public");
- assertEquals(result.getParameters().size(), 1);
-
- List<ObjectModelParameter> listParams = (List<ObjectModelParameter>)result.getParameters();
- ObjectModelParameter param1 = listParams.get(0);
- assertEquals(param1.getName(), "propertyName");
- assertEquals(param1.getType(), "java.lang.String");
+ result = builder.addOperation(classifier, "addPropertyChangeListener", "void",
+ ObjectModelModifier.PUBLIC, ObjectModelModifier.ABSTRACT);
+ assertTrue(result.isAbstract());
}
/**
@@ -346,8 +298,8 @@
ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
- ObjectModelOperation operation = builder.addOperation(classifier,
- "public java.lang.String setName");
+ ObjectModelOperation operation = builder.addOperation(classifier, "setName", "java.lang.String",
+ ObjectModelModifier.PUBLIC);
ObjectModelParameter param = builder.addParameter(operation, "java.lang.String", "name");
assertNotNull(param);
@@ -372,8 +324,8 @@
ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
- ObjectModelOperation operation = builder.addOperation(classifier,
- "public java.lang.String setName");
+ ObjectModelOperation operation = builder.addOperation(classifier, "setName", "java.lang.String",
+ ObjectModelModifier.PUBLIC);
builder.addException(operation, "java.lang.IllegalArgumentException");
Set<String> exceptions = operation.getExceptions();
@@ -398,8 +350,8 @@
ObjectModelClassifier classifier = builder.createClass("Person", "org.chorem.bonzoms");
- ObjectModelOperation operation = builder.addOperation(classifier,
- "public java.lang.String setName");
+ ObjectModelOperation operation = builder.addOperation(classifier, "setName", "java.lang.String",
+ ObjectModelModifier.PUBLIC);
builder.setOperationBody(operation, "this.name = name");
assertNotNull(operation.getBodyCode());
Modified: branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java
===================================================================
--- branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java 2009-11-03 11:38:10 UTC (rev 687)
+++ branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java 2009-11-03 15:26:27 UTC (rev 688)
@@ -6,7 +6,6 @@
import org.nuiton.eugene.models.object.*;
import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
@@ -79,8 +78,9 @@
hasMultipleAttribute = true;
// Add getChild
- ObjectModelOperation getChild = addOperation(resultClass,
- "public " + attrType + " get" + attrNameCapitalized + "(int index)");
+ ObjectModelOperation getChild = addOperation(resultClass, "get" + attrNameCapitalized,
+ attrType, ObjectModelModifier.PUBLIC);
+ addParameter(getChild, "int", "index");
setOperationBody(getChild, ""
/*{
<%=attrType%> o = getChild(<%=attrName%>, index);
@@ -97,8 +97,9 @@
if (isEntity) {
hasEntity = true;
- ObjectModelOperation getChildEntity = addOperation(resultClass,
- "public " + attrType + " get" + attrNameCapitalized + "(" + String.class.getName() + " topiaId)");
+ ObjectModelOperation getChildEntity = addOperation(resultClass, "get" + attrNameCapitalized,
+ attrType, ObjectModelModifier.PUBLIC);
+ addParameter(getChildEntity, String.class.getName(), "topiaId");
setOperationBody(getChildEntity, ""
/*{
<%=attrType%> o = getEntity(<%=attrName%>, topiaId);
@@ -108,8 +109,9 @@
}
// Add addChild
- ObjectModelOperation addChild = addOperation(resultClass,
- "public " + attrType + " add" + attrNameCapitalized + "(" + attrType + " " + attrName + ")");
+ ObjectModelOperation addChild = addOperation(resultClass, "add" + attrNameCapitalized,
+ attrType, ObjectModelModifier.PUBLIC);
+ addParameter(addChild, attrType, attrName);
setOperationBody(addChild, ""
/*{
@@ -120,8 +122,9 @@
);
// Add removeChild
- ObjectModelOperation removeChild = addOperation(resultClass,
- "public boolean remove" + attrNameCapitalized + "(" + attrType + " " + attrName + ")");
+ ObjectModelOperation removeChild = addOperation(resultClass, "remove" + attrNameCapitalized,
+ "boolean", ObjectModelModifier.PUBLIC);
+ addParameter(removeChild, attrType, attrName);
setOperationBody(removeChild, ""
/*{
@@ -148,11 +151,12 @@
}
// Add attribute
- addAttribute(resultClass, attr.getVisibility() + " " + attrType + " " + attrName);
+ String visibility = attr.getVisibility();
+ addAttribute(resultClass, attrName, attrType, "", ObjectModelModifier.toValue(visibility));
// Add getter
- ObjectModelOperation getter = this.addOperation(resultClass,
- "public " + attrType + " get" + attrNameCapitalized);
+ ObjectModelOperation getter = addOperation(resultClass, "get" + attrNameCapitalized, attrType,
+ ObjectModelModifier.PUBLIC);
setOperationBody(getter, ""
/*{
return this.<%=attrName%>;
@@ -160,8 +164,9 @@
);
// Add setter
- ObjectModelOperation setter = this.addOperation(resultClass,
- "public void set" + attrNameCapitalized + "(" + attrType + " newValue)");
+ ObjectModelOperation setter = addOperation(resultClass, "set" + attrNameCapitalized, "void",
+ ObjectModelModifier.PUBLIC);
+ addParameter(setter, attrType, "newValue");
setOperationBody(setter, ""
/*{
<%=attrType%> oldValue = get<%=attrNameCapitalized%>();
@@ -175,8 +180,10 @@
// Add helper methods
if (hasMultipleAttribute) {
- ObjectModelOperation getChild = addOperation(resultClass, "protected", "<T> T", "getChild",
- "java.util.Collection<T>", "childs", "int", "index"); // params
+ ObjectModelOperation getChild = addOperation(resultClass, "getChild", "<T> T",
+ ObjectModelModifier.PROTECTED);
+ addParameter(getChild, "java.util.Collection<T>", "childs");
+ addParameter(getChild, "int", "index");
setOperationBody(getChild, ""
/*{
if (childs != null) {
@@ -194,10 +201,10 @@
}
if (hasEntity) {
- ObjectModelOperation getEntity = addOperation(resultClass, "protected",
- "<T extends org.nuiton.topia.persistence.TopiaEntity> T", // returnType
- "getEntity",
- "java.util.Collection<T>", "childs", "java.lang.String", "topiaId"); // params
+ ObjectModelOperation getEntity = addOperation(resultClass, "getEntity",
+ "<T extends org.nuiton.topia.persistence.TopiaEntity> T", ObjectModelModifier.PROTECTED);
+ addParameter(getEntity, "java.util.Collection<T>", "childs");
+ addParameter(getEntity, "java.lang.String", "topiaId");
setOperationBody(getEntity, ""
/*{
if (childs != null) {
@@ -212,16 +219,14 @@
);
}
-
-
// Add operations
for (ObjectModelOperation op : clazz.getOperations()) {
- ObjectModelOperation resultOperation = addOperation(resultClass,
- op.getVisibility() + " abstract " + op.getReturnType() + " " + op.getName());
+ String visibility = op.getVisibility();
+ ObjectModelOperation resultOperation = addOperation(resultClass, op.getName(), op.getReturnType(),
+ ObjectModelModifier.toValue(visibility), ObjectModelModifier.ABSTRACT);
for (ObjectModelParameter param : op.getParameters()) {
- ObjectModelParameter resultParameter = addParameter(resultOperation,
- param.getType(), param.getName());
+ addParameter(resultOperation, param.getType(), param.getName());
}
for (String exception : op.getExceptions()) {
@@ -241,16 +246,17 @@
String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", inputClass, getModel());
if (svUID != null) {
- addAttribute(resultClass, "public static final long serialVersionUID = " + svUID);
+ addConstant(resultClass, "serialVersionUID", "long", svUID, ObjectModelModifier.PUBLIC);
}
}
protected void createListeners(ObjectModelClass resultClass, ObjectModelClass inputClass) {
- addAttribute(resultClass, "protected final " + PropertyChangeSupport.class.getName() + " pcs");
+ addAttribute(resultClass, "pcs", "java.beans.PropertyChangeSupport", "",
+ ObjectModelModifier.PROTECTED, ObjectModelModifier.FINAL);
// Default constructor
- ObjectModelOperation constructor = addConstructor(resultClass, "public");
+ ObjectModelOperation constructor = addConstructor(resultClass, ObjectModelModifier.PUBLIC);
setOperationBody(constructor, ""
/*{
pcs = new PropertyChangeSupport(this);
@@ -263,7 +269,8 @@
String objectType = Object.class.getName();
ObjectModelOperation addPropertyChangeListener = addOperation(resultClass,
- "public void addPropertyChangeListener(" + propType + " listener)");
+ "addPropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
+ addParameter(addPropertyChangeListener, propType, "listener");
setOperationBody(addPropertyChangeListener, ""
/*{
pcs.addPropertyChangeListener(listener);
@@ -271,7 +278,9 @@
);
ObjectModelOperation addPropertyChangeListenerPlus = addOperation(resultClass,
- "public void addPropertyChangeListener(" + strType + " propertyName," + propType + " listener)");
+ "addPropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
+ addParameter(addPropertyChangeListenerPlus, strType, "propertyName");
+ addParameter(addPropertyChangeListenerPlus, propType, "listener");
setOperationBody(addPropertyChangeListenerPlus, ""
/*{
pcs.addPropertyChangeListener(propertyName, listener);
@@ -279,7 +288,8 @@
);
ObjectModelOperation removePropertyChangeListener = addOperation(resultClass,
- "public void removePropertyChangeListener(" + propType + " listener)");
+ "removePropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
+ addParameter(removePropertyChangeListener, propType, "listener");
setOperationBody(removePropertyChangeListener, ""
/*{
pcs.removePropertyChangeListener(listener);
@@ -287,7 +297,9 @@
);
ObjectModelOperation removePropertyChangeListenerPlus = addOperation(resultClass,
- "public void removePropertyChangeListener(" + strType + " propertyName," + propType + " listener)");
+ "removePropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
+ addParameter(removePropertyChangeListenerPlus, strType, "propertyName");
+ addParameter(removePropertyChangeListenerPlus, propType, "listener");
setOperationBody(removePropertyChangeListenerPlus, ""
/*{
pcs.removePropertyChangeListener(propertyName, listener);
@@ -295,7 +307,10 @@
);
ObjectModelOperation firePropertyChange = addOperation(resultClass,
- "protected void firePropertyChange(" + strType + " propertyName," + objectType + " oldValue, " + objectType + " newValue)");
+ "firePropertyChange", "void", ObjectModelModifier.PROTECTED);
+ addParameter(firePropertyChange, strType, "propertyName");
+ addParameter(firePropertyChange, objectType, "oldValue");
+ addParameter(firePropertyChange, objectType, "newValue");
setOperationBody(firePropertyChange, ""
/*{
pcs.firePropertyChange(propertyName, oldValue, newValue);
Modified: branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestBuilder.java
===================================================================
--- branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestBuilder.java 2009-11-03 11:38:10 UTC (rev 687)
+++ branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestBuilder.java 2009-11-03 15:26:27 UTC (rev 688)
@@ -3,6 +3,7 @@
import org.nuiton.eugene.java.JavaBuilder;
import org.nuiton.eugene.models.object.ObjectModelClass;
+import org.nuiton.eugene.models.object.ObjectModelModifier;
import org.nuiton.eugene.models.object.ObjectModelOperation;
/*{generator option: parentheses = false}*/
@@ -33,32 +34,35 @@
private void createRole() {
ObjectModelClass roleClass = createClass("Role", "org.chorem.bonzoms");
- addAttribute(roleClass, "String name");
+ addAttribute(roleClass, "name", "java.lang.String");
//this.addImportForClassifier(roleClass, Date.class);
- addAttribute(roleClass, "java.util.Date fromDate");
- addAttribute(roleClass, "java.util.Date thruDate");
+ addAttribute(roleClass, "fromDate", "java.util.Date");
+ addAttribute(roleClass, "thruDate", "java.util.Date");
}
private void createPerson() {
ObjectModelClass personneClass = createClass("Person", "org.chorem.bonzoms");
- addAttribute(personneClass, "java.lang.String lastName");
- addAttribute(personneClass, "java.lang.String firstName = \"2.0\"");
+ addAttribute(personneClass, "lastName", "java.lang.String");
+ addAttribute(personneClass, "firstName", "java.lang.String", "\"2.0\"");
//this.addImportForClassifier(personneClass, List.class);
- addAttribute(personneClass,
- "java.util.List<org.chorem.bonzoms.Role> roles = new java.util.ArrayList<org.chorem.bonzoms.Role>()");
+ addAttribute(personneClass, "roles", "java.util.List<org.chorem.bonzoms.Role>",
+ "new java.util.ArrayList<org.chorem.bonzoms.Role>()");
- ObjectModelOperation setLastName = addOperation(personneClass, "public void setLastName(String lastName)");
+ ObjectModelOperation setLastName = addOperation(personneClass, "setLastName", "void",
+ ObjectModelModifier.PUBLIC);
+ addParameter(setLastName, "java.lang.String", "lastName");
setOperationBody(setLastName, ""
/*{
this.lastName = lastName;
}*/
);
- ObjectModelOperation getLastName = addOperation(personneClass, "public String getLastName");
+ ObjectModelOperation getLastName = addOperation(personneClass, "getLastName", "java.lang.String",
+ ObjectModelModifier.PUBLIC);
setOperationBody(getLastName, ""
/*{
return this.lastName;
1
0
r687 - in branches/eugene-2.0/eugene/src: main/java/org/nuiton/eugene main/java/org/nuiton/eugene/java main/java/org/nuiton/eugene/models/object/xml test/java/org/nuiton/eugene/java test/java/org/nuiton/eugene/models/object/xml
by fdesbois@users.nuiton.org 03 Nov '09
by fdesbois@users.nuiton.org 03 Nov '09
03 Nov '09
Author: fdesbois
Date: 2009-11-03 12:38:10 +0100 (Tue, 03 Nov 2009)
New Revision: 687
Added:
branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ExternalCacheExtension.java
branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ExternalCacheExtensionTest.java
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/models/object/xml/ObjectModelBuilderHelper.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/ObjectModelImpl.java
branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java
branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelImplTest.java
Log:
- Ano #118 : Add ExternalCacheExtension to manage external interfaces or superclasses (not existing in model)
- Change debug log to trace log for lastModifiedSource
- Improve test
- Change throw exception when an extension not exist : newInstance
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-11-02 18:17:52 UTC (rev 686)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java 2009-11-03 11:38:10 UTC (rev 687)
@@ -201,13 +201,13 @@
File outputFile = getDestinationFile(destDir, filename);
if (!getOverwrite() && isNewerThanSource(outputFile)) {
- if (log.isDebugEnabled()) {
- log.debug("file " + outputFile + " is up-to-date");
+ if (log.isTraceEnabled()) {
+ log.trace("file " + outputFile + " is up-to-date");
}
return;
} else {
- if (!outputFile.exists() && log.isDebugEnabled()) {
- log.debug("not up-to-date " + outputFile.lastModified()
+ if (!outputFile.exists() && log.isTraceEnabled()) {
+ log.trace("not up-to-date " + outputFile.lastModified()
+ " <" + outputFile + ">");
}
try {
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-11-02 18:17:52 UTC (rev 686)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2009-11-03 11:38:10 UTC (rev 687)
@@ -33,13 +33,13 @@
this.model.setName(modelName);
// initialize ObjectModel extension for ImportsManager
- try {
+ //try {
this.managers = this.model.getExtension(
ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
- } catch (IllegalArgumentException eee) { // "imports" not exist
+ /*} catch (IllegalArgumentException eee) { // "imports" not exist
this.managers = new ImportsManagerExtension();
this.model.addExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, this.managers);
- }
+ }*/
}
public ObjectModel getModel() {
Added: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ExternalCacheExtension.java
===================================================================
--- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ExternalCacheExtension.java (rev 0)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ExternalCacheExtension.java 2009-11-03 11:38:10 UTC (rev 687)
@@ -0,0 +1,73 @@
+
+package org.nuiton.eugene.models.object.xml;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.eugene.GeneratorUtil;
+
+/**
+ * ExternalCacheExtension
+ *
+ * Created: 2 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ExternalCacheExtension {
+
+ private static final Log log = LogFactory.getLog(ExternalCacheExtension.class);
+
+ public static final String OBJECTMODEL_EXTENSION = "externalClassifiers";
+
+ protected Map<String, ObjectModelClassifierImpl> cache;
+
+ public ExternalCacheExtension() {
+ this.cache = new HashMap<String, ObjectModelClassifierImpl>();
+ }
+
+ @SuppressWarnings("unchecked")
+ public <C extends ObjectModelClassifierImpl> C getCache(ObjectModelImplRef reference, Class<C> classifierClass)
+ throws ClassCastException, RuntimeException {
+ ObjectModelClassifierImpl classifier = cache.get(reference.getName());
+ C result;
+ if (classifier != null && !classifierClass.isAssignableFrom(classifier.getClass())) {
+ throw new ClassCastException("Invalid cast for " + classifierClass.getName());
+ }
+ if (classifier == null) {
+ try {
+ result = classifierClass.newInstance();
+ addClassifierToCache(reference, result);
+ if (log.isDebugEnabled()) {
+ log.debug("Add '" + reference.getName() + "' to external cache");
+ }
+ } catch (Exception eee) { // IllegalAccessException and InstantiationException
+ throw new RuntimeException("Unable to add new '" + classifierClass.getName() +
+ "' to cache for '" + reference.getName() + "'", eee);
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Get '" + reference.getName() + "' from external cache");
+ }
+ result = (C) classifier;
+ }
+ return result;
+ }
+
+ protected void addClassifierToCache(ObjectModelImplRef reference, ObjectModelClassifierImpl classifier) {
+ String fqn = reference.getName();
+ String packageName = GeneratorUtil.getParentPackageName(fqn);
+ String name = GeneratorUtil.getClassNameFromQualifiedName(fqn);
+ classifier.setName(name);
+ classifier.setPackage(packageName);
+ classifier.postInit(); // to create qualifiedName
+ classifier.setExtern(true);
+ cache.put(reference.getName(), classifier);
+ }
+
+
+}
Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ExternalCacheExtension.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java
===================================================================
--- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java 2009-11-02 18:17:52 UTC (rev 686)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java 2009-11-03 11:38:10 UTC (rev 687)
@@ -132,7 +132,7 @@
public static void addSuperclass(ObjectModelClass clazz, String superclassQualifiedName) {
ObjectModelClassImpl impl = (ObjectModelClassImpl) clazz;
- ObjectModelImplRef superclass = new ObjectModelImplRef();
+ ObjectModelImplSuperClassRef superclass = new ObjectModelImplSuperClassRef();
superclass.setName(superclassQualifiedName);
impl.addSuperclass(superclass);
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-11-02 18:17:52 UTC (rev 686)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassImpl.java 2009-11-03 11:38:10 UTC (rev 687)
@@ -26,10 +26,10 @@
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;
-import org.nuiton.eugene.models.object.ObjectModelInterface;
import org.nuiton.eugene.models.object.ObjectModelOperation;
/**
@@ -96,9 +96,16 @@
.next();
ObjectModelClass superclass = objectModelImpl.getClass(ref
.getName());
+
+ if (superclass == null) {
+ ExternalCacheExtension cache = objectModelImpl.getExtension(
+ ExternalCacheExtension.OBJECTMODEL_EXTENSION, ExternalCacheExtension.class);
+
+ superclass = cache.getCache(ref, ObjectModelClassImpl.class);
+ }
+
superclasses.add(superclass);
- superclassesDiscriminators.put(superclass, ref
- .getDiscriminator());
+ superclassesDiscriminators.put(superclass, ref.getDiscriminator());
}
}
return superclasses;
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-11-02 18:17:52 UTC (rev 686)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java 2009-11-03 11:38:10 UTC (rev 687)
@@ -27,6 +27,7 @@
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;
@@ -134,18 +135,17 @@
if (interfaces == null) {
interfaces = new ArrayList<ObjectModelInterface>();
for(ObjectModelImplRef ref : interfacesRefs) {
- // QUICK FIX for interface not include in the model (ex : Serializable)
+
ObjectModelInterfaceImpl interfacez =
(ObjectModelInterfaceImpl)objectModelImpl.getInterface(ref.getName());
- if (interfacez == null) {
- // TODO avoid multiple creation -> put new object in cache (or extension)
- interfacez = new ObjectModelInterfaceImpl();
- String fqn = ref.getName();
- String packageName = GeneratorUtil.getParentPackageName(fqn);
- String name = GeneratorUtil.getClassNameFromQualifiedName(fqn);
- interfacez.setName(name);
- interfacez.setPackage(packageName);
- interfacez.postInit(); // to create qualifiedName
+
+ if (interfacez == null) { // Interface not exist in model
+
+ ExternalCacheExtension cache = objectModelImpl.getExtension(
+ ExternalCacheExtension.OBJECTMODEL_EXTENSION, ExternalCacheExtension.class);
+
+ // get external interface from cache (or create it)
+ interfacez = cache.getCache(ref, ObjectModelInterfaceImpl.class);
}
interfaces.add(interfacez);
}
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-11-02 18:17:52 UTC (rev 686)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java 2009-11-03 11:38:10 UTC (rev 687)
@@ -25,7 +25,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.eugene.ImportsManager;
import org.nuiton.eugene.models.object.ObjectModel;
import org.nuiton.eugene.models.object.ObjectModelAttribute;
import org.nuiton.eugene.models.object.ObjectModelClass;
@@ -182,28 +181,18 @@
* @return the ObjectModelClass of the found class, or null if the model
* contains no class for this qualified name.
*/
+ @Override
public ObjectModelClass getClass(String qualifiedClassName) {
if (qualifiedClassName == null) {
return null;
}
if (!hasClass(qualifiedClassName)) {
- //FIXME Decide if this is a good idea
if (log.isWarnEnabled()) {
log.warn("Class " + qualifiedClassName + " not found in model");
- log.warn("You may forgot to declare for good an external class ?");
-
- log.warn("Generating fake class");
}
- ObjectModelClassImpl result = new ObjectModelClassImpl();
- int index = qualifiedClassName.lastIndexOf(".");
- if (index != -1) {
- result.setPackage(qualifiedClassName.substring(0, index));
- }
- result.setName(qualifiedClassName.substring(index + 1));
- result.postInit();
- return result;
+ return null;
}
- return (ObjectModelClass) classes.get(qualifiedClassName);
+ return classes.get(qualifiedClassName);
}
/*
@@ -478,36 +467,34 @@
}
/**
- * Add a new extension to the model.
- * This method overwrite the value object if the reference already exist.
- * @param <O> object type
- * @param reference unique key to reference the extension in the model
- * @param extension object value corresponding to the extension
- */
- public <O> void addExtension(String reference, O extension) {
- extensions.put(reference, extension);
- }
-
- /**
- * Get the extension associated to the reference (unique)
+ * Get the extension associated to the reference (unique). Create it if not exist.
* @param <O> object type returned
* @param reference unique corresponding to the extension to get
* @param extensionClass class of the extension
* @return the object value for the extension
* @throws ClassCastException when extensionClass is not valid
- * @throws IllegalArgumentException for non existing extension with reference
+ * @throws RuntimeException when instantiation problem to create new extension
*/
@Override
@SuppressWarnings("unchecked")
public <O> O getExtension(String reference, Class<O> extensionClass)
- throws ClassCastException, IllegalArgumentException {
- Object result = extensions.get(reference);
- if (result == null) {
- throw new IllegalArgumentException("Extension '" + reference + "' is not defined in model '" + getName() + "'");
- }
- if (!extensionClass.isAssignableFrom(result.getClass())) {
+ throws ClassCastException, RuntimeException {
+ Object object = extensions.get(reference);
+ O result;
+ if (object != null && !extensionClass.isAssignableFrom(object.getClass())) {
throw new ClassCastException("Invalid cast for " + extensionClass.getName());
}
- return (O) result;
+ if (object == null) {
+ try {
+ result = extensionClass.newInstance();
+ } catch (Exception eee) { // IllegalAccessException and InstantiationException
+ throw new RuntimeException("Unable to create new extension '" +extensionClass.getName() +
+ "' for '" + reference + "'", eee);
+ }
+ extensions.put(reference, result);
+ } else {
+ result = (O)object;
+ }
+ return result;
}
}
Modified: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java
===================================================================
--- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java 2009-11-02 18:17:52 UTC (rev 686)
+++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java 2009-11-03 11:38:10 UTC (rev 687)
@@ -124,24 +124,24 @@
assertTrue(clazz.isAbstract());
}
-// /**
-// * Test of setSuperClass method, of class JavaBuilder.
-// */
-// @Test
-// public void testSetSuperClass() {
-// System.out.println("setSuperClass");
-// JavaBuilder builder = new JavaBuilder("TestModel");
-//
-// ObjectModelClass clazz = builder.createClass("Person", "org.chorem.bonzoms");
-//
-// String superclassQualifiedName = "org.chorem.bonzoms.Party";
-//
-// //builder.setSuperClass(clazz, superclassQualifiedName);
-// //assertNotNull(clazz.getSuperclasses());
-// //assertEquals(clazz.getSuperclasses().size(), 1);
-// }
-//
/**
+ * Test of setSuperClass method, of class JavaBuilder.
+ */
+ @Test
+ public void testSetSuperClass() {
+ System.out.println("setSuperClass");
+ JavaBuilder builder = new JavaBuilder("TestModel");
+
+ ObjectModelClass clazz = builder.createClass("Person", "org.chorem.bonzoms");
+
+ String superclassQualifiedName = "org.chorem.bonzoms.Party";
+
+ builder.setSuperClass(clazz, superclassQualifiedName);
+ assertNotNull(clazz.getSuperclasses());
+ assertEquals(clazz.getSuperclasses().size(), 1);
+ }
+
+ /**
* Test of addInterface method, of class JavaBuilder.
* Prerequisite : existing classifier in model.
* - Add an interface not included in the model to a classifier.
Added: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ExternalCacheExtensionTest.java
===================================================================
--- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ExternalCacheExtensionTest.java (rev 0)
+++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ExternalCacheExtensionTest.java 2009-11-03 11:38:10 UTC (rev 687)
@@ -0,0 +1,105 @@
+
+package org.nuiton.eugene.models.object.xml;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.nuiton.eugene.models.object.ObjectModelInterface;
+import static org.junit.Assert.*;
+
+/**
+ * ExternalCacheExtensionTest
+ *
+ * Created: 2 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ExternalCacheExtensionTest {
+
+ public ExternalCacheExtensionTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() {
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+ /**
+ * Test of getCache method, of class ExternalCacheExtension.
+ * Prerequisite : Existing model
+ * - Add an external interface to cache
+ * - No double add, get the existing one
+ */
+ @Test
+ public void testGetCache() {
+ System.out.println("getCache");
+
+ ObjectModelImpl model = new ObjectModelImpl();
+ model.setName("TestModel");
+
+ ObjectModelImplRef refInterface = new ObjectModelImplRef();
+ refInterface.setName("java.io.Serializable");
+
+ // Creation if not exist
+ ExternalCacheExtension cache =
+ model.getExtension(ExternalCacheExtension.OBJECTMODEL_EXTENSION, ExternalCacheExtension.class);
+
+ ObjectModelInterface interfacez =
+ cache.getCache(refInterface, ObjectModelInterfaceImpl.class);
+
+ assertNotNull(interfacez);
+
+ ObjectModelInterface interfacez2 =
+ cache.getCache(refInterface, ObjectModelInterfaceImpl.class);
+
+ assertEquals(interfacez, interfacez2);
+ }
+
+ /**
+ * Test of addClassifierToCache method, of class ExternalCacheExtension.
+ * Prerequisite : Existing model
+ * - Add a classifier which is an interface
+ * - The interface getting is the same as the first added classifier
+ */
+ @Test
+ public void testAddClassifierToCache() {
+ System.out.println("addClassifierToCache");
+
+ ObjectModelImpl model = new ObjectModelImpl();
+ model.setName("TestModel");
+
+ ObjectModelImplRef refInterface = new ObjectModelImplRef();
+ refInterface.setName("java.io.Serializable");
+
+ ObjectModelClassifierImpl classifier = new ObjectModelInterfaceImpl();
+
+ ExternalCacheExtension cache =
+ model.getExtension(ExternalCacheExtension.OBJECTMODEL_EXTENSION, ExternalCacheExtension.class);
+
+ cache.addClassifierToCache(refInterface, classifier);
+
+ assertEquals(classifier.getQualifiedName(), "java.io.Serializable");
+
+ ObjectModelInterfaceImpl interfacez = cache.getCache(refInterface, ObjectModelInterfaceImpl.class);
+
+ assertEquals(interfacez, classifier);
+ }
+
+}
\ No newline at end of file
Property changes on: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ExternalCacheExtensionTest.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Modified: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelImplTest.java
===================================================================
--- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelImplTest.java 2009-11-02 18:17:52 UTC (rev 686)
+++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/models/object/xml/ObjectModelImplTest.java 2009-11-03 11:38:10 UTC (rev 687)
@@ -1,8 +1,6 @@
package org.nuiton.eugene.models.object.xml;
-import java.util.HashMap;
-import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.After;
@@ -10,7 +8,6 @@
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-import org.nuiton.eugene.ImportsManager;
import org.nuiton.eugene.java.ImportsManagerExtension;
import static org.junit.Assert.*;
@@ -337,59 +334,27 @@
// }
/**
- * Test of addExtension method, of class ObjectModelImpl.
- * - Ajout ImportsManager extension : Map<String, ImportsManager>
- */
- @Test
- public void testAddExtension() {
- System.out.println("addExtension");
-
- ObjectModelImpl model = new ObjectModelImpl();
-
- ImportsManagerExtension extension = new ImportsManagerExtension();
-
- model.addExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, extension);
-
- ImportsManagerExtension result =
- model.getExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
-
- assertNotNull(result);
- }
-
- /**
* Test of getExtension method, of class ObjectModelImpl.
- * - Get an existing importsManager from the ObjectModel extension "imports"
- * - IllegalArgumentException for non existing extension
+ * - Create and get ImportsManagerExtension
+ * - No double creation
*/
@Test
public void testGetExtension() {
System.out.println("getExtension");
-
+
ObjectModelImpl model = new ObjectModelImpl();
model.setName("TestModel");
- ObjectModelClassImpl classifier = new ObjectModelClassImpl();
- classifier.setName("Person");
- classifier.setPackage("org.chorem.bonzoms");
- model.addClass(classifier);
-
- ImportsManagerExtension extension = new ImportsManagerExtension();
-
- extension.getManager(classifier); // creation if not exist
-
- model.addExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, extension);
-
+ // Creation if not exist
ImportsManagerExtension result =
model.getExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
- assertNotNull(result.getImports(classifier));
+ assertNotNull(result);
- try {
- String unknownExtension =
- model.getExtension("unknown", String.class);
- } catch (IllegalArgumentException eee) {
- log.debug("unknown extension", eee);
- }
+ ImportsManagerExtension result2 =
+ model.getExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
+
+ assertEquals(result, result2);
}
}
\ No newline at end of file
1
0
r686 - in branches/eugene-2.0/eugene: doc doc/3-v2.0 doc/3-v2.0/sources src/main/java/org/nuiton/eugene/java src/main/java/org/nuiton/eugene/models/object/xml
by fdesbois@users.nuiton.org 02 Nov '09
by fdesbois@users.nuiton.org 02 Nov '09
02 Nov '09
Author: fdesbois
Date: 2009-11-02 19:17:52 +0100 (Mon, 02 Nov 2009)
New Revision: 686
Added:
branches/eugene-2.0/eugene/doc/3-v2.0/
branches/eugene-2.0/eugene/doc/3-v2.0/eugene2.0.pdf
branches/eugene-2.0/eugene/doc/3-v2.0/sources/
branches/eugene-2.0/eugene/doc/3-v2.0/sources/DiagActivite_EUGene1.0.1_Generation.png
branches/eugene-2.0/eugene/doc/3-v2.0/sources/DiagActivite_EUGene2.0_Generation.png
branches/eugene-2.0/eugene/doc/3-v2.0/sources/DiagActivite_EUGene2.0_GenerationJava.png
branches/eugene-2.0/eugene/doc/3-v2.0/sources/EUGene-generate.vpp
branches/eugene-2.0/eugene/doc/3-v2.0/sources/eugene2.0
branches/eugene-2.0/eugene/doc/3-v2.0/sources/eugene_v2.0.zargo
Modified:
branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.java
branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java
Log:
- Correction getInterfaces to use GeneratorUtil methods
- Suppress throw exception on getImports method
- Change old docs folders name and add new doc for eugene 2.0
Added: branches/eugene-2.0/eugene/doc/3-v2.0/eugene2.0.pdf
===================================================================
(Binary files differ)
Property changes on: branches/eugene-2.0/eugene/doc/3-v2.0/eugene2.0.pdf
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Property changes on: branches/eugene-2.0/eugene/doc/3-v2.0/sources
___________________________________________________________________
Added: svn:ignore
+ EUGene-generate.vpp~1
Added: branches/eugene-2.0/eugene/doc/3-v2.0/sources/DiagActivite_EUGene1.0.1_Generation.png
===================================================================
(Binary files differ)
Property changes on: branches/eugene-2.0/eugene/doc/3-v2.0/sources/DiagActivite_EUGene1.0.1_Generation.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: branches/eugene-2.0/eugene/doc/3-v2.0/sources/DiagActivite_EUGene2.0_Generation.png
===================================================================
(Binary files differ)
Property changes on: branches/eugene-2.0/eugene/doc/3-v2.0/sources/DiagActivite_EUGene2.0_Generation.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: branches/eugene-2.0/eugene/doc/3-v2.0/sources/DiagActivite_EUGene2.0_GenerationJava.png
===================================================================
(Binary files differ)
Property changes on: branches/eugene-2.0/eugene/doc/3-v2.0/sources/DiagActivite_EUGene2.0_GenerationJava.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: branches/eugene-2.0/eugene/doc/3-v2.0/sources/EUGene-generate.vpp
===================================================================
(Binary files differ)
Property changes on: branches/eugene-2.0/eugene/doc/3-v2.0/sources/EUGene-generate.vpp
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: branches/eugene-2.0/eugene/doc/3-v2.0/sources/eugene2.0
===================================================================
--- branches/eugene-2.0/eugene/doc/3-v2.0/sources/eugene2.0 (rev 0)
+++ branches/eugene-2.0/eugene/doc/3-v2.0/sources/eugene2.0 2009-11-02 18:17:52 UTC (rev 686)
@@ -0,0 +1,246 @@
+==========
+EUGene 2.0
+==========
+
+:Date: 2009-11-02
+:Author: fdesbois (fdesbois(a)codelutin.com)
+
+.. contents:: Contenu
+
+Contexte de départ
+------------------
+
+L'évolution majeure d'EUGene de la 1.0.1 à la 2.0.0 concerne une simplification de la génération de fichiers Java. Pour ce faire, plusieurs évolutions sont à prendre en compte :
+
+- Modification du processus de génération (modification du point de lecture dans le processus)
+- Permettre une transformation Model To Model
+- Création d'une template de génération simple et sans intelligence (sans interprétation du modèle) pour génération uniquement Java
+
+La version 2.0 modifie donc le processus sur trois niveaux différents : Lecture, Transformation et Génération.
+
+Contraintes de non régression
+-----------------------------
+
+- La config du plugin maven ne doit quasimment pas changer : Les transformations seront considérés comme des templates de générations
+- L'ObjectModel ne doit pas prendre en compte des spécificités Java (pas d'importsManager, pas d'attributs "synchronized", ...), le comportement doit rester identique.
+- Les templates de génération existantes doivent fonctionner toujours de la même manière : même résultat à la génération
+
+
+Modification du processus de génération
+---------------------------------------
+
+Version 1.0.1
+~~~~~~~~~~~~~
+
+Dans la version 1.0.1, les possibilités de fichiers en entrée du processus sont assez limités. Il est possible d'utiliser différents goal du maven-eugene-plugin pour pouvoir avoir en entrée
+d'autres fichiers que ceux spécifiques à un des modèles supportés par EUGene (StateModel, ObjectModel, ...). Les goals existants sont : zargo2xmi, xmi2objectmodel et xmi2statemodel. Sur le diagramme ci-dessous est représenté une génération à partir de fichiers **.zargo** pour obtenir des fichiers **.java**. En beige sont représentés les points d'extension possible dans le processus de génération. Ces derniers sont très limités :
+
+- **ObjectModel** : Modele représentant les données extraites à partir des fichiers sources (le modèle étend la classe << *Model* >>)
+
+- **Generator** : Template de génération qui interprète le modèle pour effectuer une génération de fichiers en sorties, ici java. (la template étend la classe << *Generator* >>)
+
+
+.. figure:: DiagActivite_EUGene1.0.1_Generation.png
+
+ Processus de génération v1.0.1
+
+Version 2.0
+~~~~~~~~~~~
+
+Deux nouveautés :
+
+- Possibilité d'étendre le point de lecture en début de processus : Cela permettra ainsi d'avoir n'importe quel type de fichier en entrée, du moment qu'un Reader existe pour les interpréter et rendre un Model.
+
+- Possibilité de transformer un modèle pour spécifier un langage (ex Java) ou tout autre transformation : Un Transformer est alors considéré comme un Generator pour simplifier le processus.
+
+Ces deux nouveautés forment les nouveaux points d'extension du processus, à noter également la possibilité d'inclure dans le processus la transformation de n'importe quel modèle en un autre modèle.
+
+.. figure:: DiagActivite_EUGene2.0_Generation.png
+
+ Processus de génération v2.0
+
+Génération spécifique à Java
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Voici le cas spécifique à la génération Java. Nous voulons en entrée lire des fichiers Objectmodel (utilisation d'un ObjectModelReader), puis transformer ce modèle complet (avec notions UML) en un nouveau ObjectModel simple uniquement dédié à la génération Java (utilisation d'un ObjectModelTransformerToJava associé à la template JavaGenerator).
+
+.. figure:: DiagActivite_EUGene2.0_GenerationJava.png
+
+ Processus de génération v2.0 pour Java
+
+Le développeur se chargera d'intepréter le modèle d'entrée (lu par l'ObjectModelReader) pour le transformer en ObjectModel Java : extension de l'ObjectModelTransformerToJava. Ce transformer sera une sorte d'équivalent à un template de génération qui étend Generator.
+
+Liste des Evolutions
+--------------------
+
+1 - `Evol #112`_ : Ajout d'un point d'entrée dans le processus de génération : ModelReader
+
+2 - `Evol #114`_ : Ajout d'extensions à l'ObjectModel
+
+3 - `Evol #115`_ : Remplissage de l'ObjectModel directement a partir du code pour génération Java : JavaBuilder
+
+4 - `Evol #113`_ : Possibilité de faire du Model To Model : Transformer
+
+5 - `Evol #116`_ : Modification hiérarchie des Generator pour prise en charge des Transformer
+
+6 - `Evol #117`_ : Création d'une template de génération sans intelligence pour Java : JavaGenerator
+
+7 - `Evol #107`_ : Remplacer les attributs (static, abstract, visibility, ...) par une liste de "modifier"
+
+
+.. _Evol #112: http://nuiton.org/issues/show/112
+.. _Evol #114: http://nuiton.org/issues/show/114
+.. _Evol #113: http://nuiton.org/issues/show/113
+.. _Evol #115: http://nuiton.org/issues/show/115
+.. _Evol #116: http://nuiton.org/issues/show/116
+.. _Evol #117: http://nuiton.org/issues/show/117
+.. _Evol #107: http://nuiton.org/issues/show/107
+
+Evolution #112 : ModelReader
+----------------------------
+
+Besoin/Contexte
+~~~~~~~~~~~~~~~
+
+Mise en place
+~~~~~~~~~~~~~
+
+Conversion existant
+~~~~~~~~~~~~~~~~~~~
+
+Extension
+~~~~~~~~~
+
+
+Evolution #114 : Extensions ObjectModel
+---------------------------------------
+
+Besoin/Contexte
+~~~~~~~~~~~~~~~
+
+La génération Java nécessite une manipulation simple pour l'ajout des imports qui seront rajoutés en début de fichier. Il existe dans la 1.0.1, la classe ImportsManager qui remplit cette tâche :
+Elle permet de lui ajouter différents imports à effectuer sous forme de String ou de Class. Ces imports sont ensuite récupérer suivant un nom de package.
+Pour simplifier la génération Java, il suffirait d'ajouter les ImportsManager (un par classifier) directement dans l'ObjectModel racine. Cependant, pour ne pas ajouter de notion spécifique à Java,
+cet ajout sera considéré comme une extension à l'ObjectModel.
+
+Mise en place
+~~~~~~~~~~~~~
+
+Une *Map<String, Object> extensions* est ajoutée dans l'ObjectModel racine. Une méthode addExtension est disponible dans ObjectModelImpl pour ajouter une nouvelle extension au modèle. La méthode
+getExtension(String reference, Class extensionClass) permettra de récupérer l'extension souhaité (avec son type) et sera disponible dans l'interface ObjectModel.
+
+
+Cas des ImportsManager
+~~~~~~~~~~~~~~~~~~~~~~
+
+Pour les ImportsManager, il est nécessaire d'avoir une Map<String, ImportsManager>, la clé étant le nom complet (full qualified name) d'un classifier, et la valeur l'ImportsManager associé à ce classifier.
+Pour simplifier l'utilisation des ImportsManager (et éviter les problèmes de cast sur l'extension), une classe ImportsManagerExtension est créé comprenant la map des managers et des méthodes accesseurs :
+
+- **ImportsManager getManager(ObjectModelClassifier classifier)** : Permet de récupérer (ou créer s'il n'existe pas) l'ImportsManager lié à un classifier. Méthode utilisée pour les transformations du modèle (ObjectModelTransformer, JavaBuilder)
+
+- **List<String> getImports(ObjectModelClassifier classifier)** : Permet de récupérer tous les imports liés à un classifier. Méthode utilisée pour la génération (ObjectModelGenerator, JavaGenerator)
+
+L'ImportsManagerExtension forme donc l'extension spécifique aux imports ajouté à l'ObjectModel::
+
+ // Utilisation dans Transformer ou Builder
+ ImportsManagerExtension managers = model.getExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
+ ImportsManager maClassManager = managers.getImportsManager(maClass);
+ maClassManager.addImport("java.util.List");
+
+ // Utilisation dans Generator
+ ImportsManagerExtension managers = model.getExtension(ImportsManagerExtension.OBJECTMODEL_EXTENSION, ImportsManagerExtension.class);
+ managers.getImports(maClass);
+
+
+Extension
+~~~~~~~~~
+
+Il est désormais possible d'utiliser les extensions comme moyen d'enrichir l'ObjectModel lors des transformations et des générations.
+
+Evolution #115 : JavaBuilder
+----------------------------
+
+Besoin/Contexte
+~~~~~~~~~~~~~~~
+
+Il est intéressant de pouvoir, dans certains cas, remplir un ObjectModel vide pour générer directement du Java. L'utilisation se fait directement à partir du code d'une autre application qui souhaite utiliser l'ObjectModel pour générer directement du Java. Cependant la version 1.0.1 ne permet pas de faire cela car les interfaces des classes de l'ObjectModel ne comprennent pas de setter. Il est donc
+nécessaire de créer une nouvelle classe permettant de remplir un ObjectModel vide tout en ayant une finesse d'interprétation spécifique à Java (gestion des imports, doublon sur les méthodes, ...).
+De plus le JavaBuilder servira aux transformations pour de la génération Java.
+
+Mise en place
+~~~~~~~~~~~~~
+
+Création d'une classe JavaBuilder qui initialise à l'instanciation un ObjectModel vide (A noter que le nom du modèle est indispensable à la génération). Le JavaBuilder propose un panel de méthodes permettant :
+
+- Ajout de classes/interfaces au modèle
+- Ajout d'une superclass
+- Ajout d'interface à une classe
+- Ajout de méthodes à une classe/interface
+- Ajout du corps des méthodes
+- Ajout de paramètres à une méthode
+- Ajout d'exception à une méthode
+- Ajout d'attributs à une classe/interface
+- ...
+
+Ces méthodes comprendront une gestion automatique des imports (types des paramètres/attributs, retour des méthodes, exceptions, ...).
+
+Evolution #113 : Transformer
+----------------------------
+
+Besoin/Contexte
+~~~~~~~~~~~~~~~
+
+L'écriture des templates de génération actuelles (v1.0.1) peuvent être fastidieuses et difficiles à maintenir. Il est donc préférable d'utiliser une tranformation du modèle ObjectModel source (provenant d'un diagramme UML) en un ObjectModel représentant basiquement le Java qui sera généré.
+
+Mise en place
+~~~~~~~~~~~~~
+
+Un Transformer est considéré comme un Generator pour être intégré plus facilement dans le processus de génération (templates). Cependant il possède un modèle en entrée et un en sortie, donc pas de sortie fichiers. Pour ce faire, il est obligatoirement associé à un Generator. Ainsi un Transformer prendra en entrée un modèle, le transformera en un nouveau (potentiellement de type différent) et utilisera le generator de sortie pour générer ce nouveau modèle. Il est donc nécessaire d'instancier un Transformer en lui fournissant son Generator de sortie. Le modèle de sortie doit donc être obligatoirement compatible avec ce Generator de sortie.
+
+Conversion existant
+~~~~~~~~~~~~~~~~~~~
+
+Extension
+~~~~~~~~~
+
+
+Evolution #116 : Generator
+--------------------------
+
+Besoin/Contexte
+~~~~~~~~~~~~~~~
+
+Mise en place
+~~~~~~~~~~~~~
+
+Extension
+~~~~~~~~~
+
+
+Evolution #117 : JavaGenerator
+------------------------------
+
+Besoin/Contexte
+~~~~~~~~~~~~~~~
+
+Mise en place
+~~~~~~~~~~~~~
+
+
+Evolution #107 : ObjectModelModifier
+------------------------------------
+
+Besoin/Contexte
+~~~~~~~~~~~~~~~
+
+Mise en place
+~~~~~~~~~~~~~
+
+Conversion existant
+~~~~~~~~~~~~~~~~~~~
+
+Extension
+~~~~~~~~~
+
+
+
Added: branches/eugene-2.0/eugene/doc/3-v2.0/sources/eugene_v2.0.zargo
===================================================================
(Binary files differ)
Property changes on: branches/eugene-2.0/eugene/doc/3-v2.0/sources/eugene_v2.0.zargo
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.java
===================================================================
--- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.java 2009-11-02 18:17:45 UTC (rev 685)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.java 2009-11-02 18:17:52 UTC (rev 686)
@@ -65,13 +65,9 @@
* Get imports for a classifier. The ImportsManager must be defined in the model.
* @param classifier reference for the imports
* @return a List of String which contains all imports for the classifier
- * @throws IllegalArgumentException when classifier is not associated with an existing ImportsManager
*/
public List<String> getImports(ObjectModelClassifier classifier) throws IllegalArgumentException {
- ImportsManager manager = this.managers.get(classifier.getQualifiedName());
- if (manager == null) {
- throw new IllegalArgumentException("No importsManager defined for '" + classifier.getQualifiedName() + "'");
- }
+ ImportsManager manager = getManager(classifier);
return manager.getImports(classifier.getPackageName());
}
}
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-11-02 18:17:45 UTC (rev 685)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java 2009-11-02 18:17:52 UTC (rev 686)
@@ -26,6 +26,7 @@
import java.util.List;
import java.util.Map;
+import org.nuiton.eugene.GeneratorUtil;
import org.nuiton.eugene.models.object.ObjectModelAttribute;
import org.nuiton.eugene.models.object.ObjectModelClassifier;
import org.nuiton.eugene.models.object.ObjectModelDependency;
@@ -137,11 +138,11 @@
ObjectModelInterfaceImpl interfacez =
(ObjectModelInterfaceImpl)objectModelImpl.getInterface(ref.getName());
if (interfacez == null) {
+ // TODO avoid multiple creation -> put new object in cache (or extension)
interfacez = new ObjectModelInterfaceImpl();
String fqn = ref.getName();
- int index = fqn.indexOf(".");
- String packageName = fqn.substring(0, index);
- String name = fqn.substring(index+1);
+ String packageName = GeneratorUtil.getParentPackageName(fqn);
+ String name = GeneratorUtil.getClassNameFromQualifiedName(fqn);
interfacez.setName(name);
interfacez.setPackage(packageName);
interfacez.postInit(); // to create qualifiedName
1
0
r685 - in branches/eugene-2.0/eugene/doc: . 1-javamodel 2-javabuilder
by fdesbois@users.nuiton.org 02 Nov '09
by fdesbois@users.nuiton.org 02 Nov '09
02 Nov '09
Author: fdesbois
Date: 2009-11-02 19:17:45 +0100 (Mon, 02 Nov 2009)
New Revision: 685
Added:
branches/eugene-2.0/eugene/doc/1-javamodel/
branches/eugene-2.0/eugene/doc/2-javabuilder/
Removed:
branches/eugene-2.0/eugene/doc/javabuilder/
branches/eugene-2.0/eugene/doc/javamodel/
Log:
- Correction getInterfaces to use GeneratorUtil methods
- Suppress throw exception on getImports method
- Change old docs folders name and add new doc for eugene 2.0
Property changes on: branches/eugene-2.0/eugene/doc/1-javamodel
___________________________________________________________________
Added: svn:mergeinfo
+
Property changes on: branches/eugene-2.0/eugene/doc/2-javabuilder
___________________________________________________________________
Added: svn:mergeinfo
+
1
0
r684 - in branches/eugene-2.0: . eugene eugene/src/main/java/org/nuiton/eugene/java eugene-test maven-eugene-plugin
by fdesbois@users.nuiton.org 02 Nov '09
by fdesbois@users.nuiton.org 02 Nov '09
02 Nov '09
Author: fdesbois
Date: 2009-11-02 15:54:14 +0100 (Mon, 02 Nov 2009)
New Revision: 684
Modified:
branches/eugene-2.0/eugene-test/pom.xml
branches/eugene-2.0/eugene/pom.xml
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/maven-eugene-plugin/pom.xml
branches/eugene-2.0/pom.xml
Log:
Switch version 1.1.0 to 2.0.0
Modified: branches/eugene-2.0/eugene/pom.xml
===================================================================
--- branches/eugene-2.0/eugene/pom.xml 2009-11-02 14:47:57 UTC (rev 683)
+++ branches/eugene-2.0/eugene/pom.xml 2009-11-02 14:54:14 UTC (rev 684)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>eugene</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
</parent>
<groupId>org.nuiton.eugene</groupId>
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-11-02 14:47:57 UTC (rev 683)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2009-11-02 14:54:14 UTC (rev 684)
@@ -1,7 +1,5 @@
package org.nuiton.eugene.java;
-import java.util.HashMap;
-import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.GeneratorUtil;
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-11-02 14:47:57 UTC (rev 683)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2009-11-02 14:54:14 UTC (rev 684)
@@ -6,12 +6,10 @@
import java.io.Writer;
import java.util.Collection;
import java.util.Iterator;
-import java.util.Map;
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.ObjectModelGenerator;
import org.nuiton.eugene.models.object.ObjectModelAttribute;
import org.nuiton.eugene.models.object.ObjectModelClass;
Modified: branches/eugene-2.0/eugene-test/pom.xml
===================================================================
--- branches/eugene-2.0/eugene-test/pom.xml 2009-11-02 14:47:57 UTC (rev 683)
+++ branches/eugene-2.0/eugene-test/pom.xml 2009-11-02 14:54:14 UTC (rev 684)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>eugene</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
</parent>
<groupId>org.nuiton.eugene</groupId>
Modified: branches/eugene-2.0/maven-eugene-plugin/pom.xml
===================================================================
--- branches/eugene-2.0/maven-eugene-plugin/pom.xml 2009-11-02 14:47:57 UTC (rev 683)
+++ branches/eugene-2.0/maven-eugene-plugin/pom.xml 2009-11-02 14:54:14 UTC (rev 684)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>eugene</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
</parent>
<groupId>org.nuiton.eugene</groupId>
Modified: branches/eugene-2.0/pom.xml
===================================================================
--- branches/eugene-2.0/pom.xml 2009-11-02 14:47:57 UTC (rev 683)
+++ branches/eugene-2.0/pom.xml 2009-11-02 14:54:14 UTC (rev 684)
@@ -14,7 +14,7 @@
</parent>
<artifactId>eugene</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
<modules>
<module>eugene</module>
1
0
r683 - in branches/eugene-2.0/eugene/src: main/java/org/nuiton/eugene/java test/java/org/nuiton/eugene/java
by fdesbois@users.nuiton.org 02 Nov '09
by fdesbois@users.nuiton.org 02 Nov '09
02 Nov '09
Author: fdesbois
Date: 2009-11-02 15:47:57 +0100 (Mon, 02 Nov 2009)
New Revision: 683
Added:
branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerExtensionTest.java
Modified:
branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.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/test/java/org/nuiton/eugene/java/JavaBuilderTest.java
Log:
- Add tests for ImportsManagerExtension
- Add javadoc
- Add svn:keywords
Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ImportsManagerExtension.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
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-11-02 12:10:27 UTC (rev 682)
+++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2009-11-02 14:47:57 UTC (rev 683)
@@ -28,6 +28,12 @@
* @author fdesbois
* @version $Revision$
*
+ * Stupid generation of an ObjectModel with Java classes and interfaces.
+ * Use of ImportsManager to get imports for a classifier (added in model in the JavaBuilder which construct
+ * the ObjectModel).
+ *
+ * The JavaGenerator is based on a ObjectModelGenerator : Java classes are represented by ObjectModelClass, ...
+ *
* Mise a jour: $Date$
* par : $Author$
*/
@@ -40,6 +46,12 @@
return clazz.getQualifiedName().replace('.', File.separatorChar) + ".java";//return clazz.getName() + ".java";
}
+ /**
+ * Generate from all classes.
+ * @param output Writer for generating the java file
+ * @param clazz Class to manage for creating an output file
+ * @throws IOException
+ */
@Override
public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException {
@@ -95,6 +107,12 @@
}*/
}
+ /**
+ * Generate Header for a classifier : Package, Documentation, Imports and Classifier signature.
+ * @param output Writer for generating the java file
+ * @param classifier Classifier for generate header
+ * @throws IOException
+ */
protected void generateHeader(Writer output, ObjectModelClassifier classifier) throws IOException {
String packageName = classifier.getPackageName();
@@ -112,6 +130,12 @@
}
+ /**
+ * Generate attributes from a collection of ObjectModelAttribute.
+ * @param output Writer for generating the java file
+ * @param attributes Collection of ObjectModelAttribute to generate
+ * @throws IOException
+ */
protected void generateAttributes(Writer output, Collection<ObjectModelAttribute> attributes) throws IOException {
for (ObjectModelAttribute attr : attributes) {
@@ -142,6 +166,12 @@
}
}
+ /**
+ * Generate operations from a collection of ObjectModelOperation
+ * @param output Writer for generating the java file
+ * @param operations Collection of ObjectModelOperation to generate
+ * @throws IOException
+ */
protected void generateOperations(Writer output, Collection<ObjectModelOperation> operations) throws IOException {
for (ObjectModelOperation op : operations) {
String opName = op.getName();
Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Added: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerExtensionTest.java
===================================================================
--- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerExtensionTest.java (rev 0)
+++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerExtensionTest.java 2009-11-02 14:47:57 UTC (rev 683)
@@ -0,0 +1,104 @@
+
+package org.nuiton.eugene.java;
+
+import java.util.List;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.nuiton.eugene.ImportsManager;
+import static org.junit.Assert.*;
+import org.nuiton.eugene.models.object.ObjectModelClassifier;
+import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl;
+import org.nuiton.eugene.models.object.xml.ObjectModelImpl;
+
+
+/**
+ * ImportsManagerExtensionTest
+ *
+ * Created: 2 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ImportsManagerExtensionTest {
+
+ public ImportsManagerExtensionTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() {
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+ /**
+ * Test of getManager method, of class ImportsManagerExtension.
+ * Prerequisite : Existing ObjectModel containing a classifier
+ * - Get an import Manager for a classifier
+ * - Test unique : one ImportsManager by classifier
+ */
+ @Test
+ public void testGetManager() {
+ System.out.println("getManager");
+
+ ImportsManagerExtension managers = new ImportsManagerExtension();
+
+ ObjectModelImpl model = new ObjectModelImpl();
+ model.setName("TestModel");
+
+ ObjectModelClassImpl clazz = new ObjectModelClassImpl();
+ clazz.setName("Person");
+ clazz.setPackage("org.chorem.bonzoms");
+ model.addClass(clazz);
+
+ ImportsManager manager = managers.getManager(clazz);
+ assertNotNull(manager);
+
+ ImportsManager manager2 = managers.getManager(clazz);
+ assertEquals(manager, manager2);
+ }
+
+ /**
+ * Test of getImports method, of class ImportsManagerExtension.
+ * Prerequisite : Existing ObjectModel containing a classifier, imports set for this classifier
+ * - Get imports for an existing classifier with its ImportsManager
+ */
+ @Test
+ public void testGetImports() {
+ System.out.println("getImports");
+
+ ImportsManagerExtension managers = new ImportsManagerExtension();
+
+ ObjectModelImpl model = new ObjectModelImpl();
+ model.setName("TestModel");
+
+ ObjectModelClassImpl clazz = new ObjectModelClassImpl();
+ clazz.setName("Person");
+ clazz.setPackage("org.chorem.bonzoms");
+ model.addClass(clazz);
+
+ ImportsManager manager = managers.getManager(clazz);
+ manager.addImport("java.util.List");
+
+ List<String> imports = managers.getImports(clazz);
+ assertNotNull(imports);
+ assertEquals(imports.size(), 1);
+ assertEquals(imports.get(0), "java.util.List");
+ }
+
+}
\ No newline at end of file
Property changes on: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/ImportsManagerExtensionTest.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
Modified: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java
===================================================================
--- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java 2009-11-02 12:10:27 UTC (rev 682)
+++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java 2009-11-02 14:47:57 UTC (rev 683)
@@ -19,8 +19,15 @@
import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl;
/**
+ * JavaBuilderTest
*
+ * Created: 29 oct. 2009
+ *
* @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
*/
public class JavaBuilderTest {
Property changes on: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/java/JavaBuilderTest.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision
1
0
Author: fdesbois
Date: 2009-11-02 13:10:27 +0100 (Mon, 02 Nov 2009)
New Revision: 682
Added:
branches/eugene-2.0/
Removed:
branches/1.1.0-Javabuilder/
Log:
change javabuilder branche name to 2.0
1
0