Author: fdesbois Date: 2009-10-19 11:55:11 +0200 (Mon, 19 Oct 2009) New Revision: 642 Added: branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/ branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/Exemple.java branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaClassBuilder.java branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaClassifierBuilder.java branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaInterfaceBuilder.java branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/ branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaBuilder.java branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaFileBuilder.java branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaFileBuilderImpl.java Log: Essais de hierarchie pour JavaBuilder Added: branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/Exemple.java =================================================================== --- branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/Exemple.java (rev 0) +++ branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/Exemple.java 2009-10-19 09:55:11 UTC (rev 642) @@ -0,0 +1,63 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.nuiton.eugene.models.object.java; + +import java.io.File; +import java.io.Writer; +import org.nuiton.eugene.Generator; +import org.nuiton.eugene.models.object.ObjectModelOperation; +/*{ generator option: writeString = + }*/ + +/** + * + * generator option: parentheses = false + * + * generator option: writeString = builder.setOperationBody(operation, + * generator option: beginParenthese = false + * @author fdesbois + */ +public class Exemple { + + public void methodTest(Writer output) { + + JavaClassBuilder builder = new JavaClassBuilder("org.nuiton.troulala", "Test"); + + builder.addAttribute("pouet", "String"); + ObjectModelOperation operation = builder.addOperation("setPouet","void","pouet","String"); + builder.setOperationBody(operation, "" + /*[ this.pouet = pouet; + + + ]*/); + + + + + operation = builder.addOperation("setPouet","void","pouet","String"); + /*{ + + + for (ObjectModelOperation op : builder.getOperations()) { + + + <%=op.getVisibility()%> .... () { + <%=op.getBodyCode()%> + } + + + } + + }*/ + + + + + builder.setOperationBody(operation, "" + + "this.pouet = pouet;\n"); + + } + +} Added: branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaClassBuilder.java =================================================================== --- branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaClassBuilder.java (rev 0) +++ branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaClassBuilder.java 2009-10-19 09:55:11 UTC (rev 642) @@ -0,0 +1,77 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.nuiton.eugene.models.object.java; + +import org.nuiton.eugene.GeneratorUtil; +import org.nuiton.eugene.ImportsManager; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; + +/** + * + * @author fdesbois + */ +public class JavaClassBuilder extends JavaClassifierBuilder<ObjectModelClassImpl, ObjectModelClass> { + + public JavaClassBuilder(String name, String packageName, ImportsManager imports) { + super(name, packageName, imports); + } + + public JavaClassBuilder(String name, String packageName) { + super(name, packageName); + } + + @Override + protected ObjectModelClassImpl newClassifier() { + return new ObjectModelClassImpl(); + } + + /*@Override + protected void newMainClassifier() { + this.mainClassifier = new ObjectModelClassImpl(); + }*/ + + @Override + public ObjectModelAttribute addAttribute(String name, String type) { + ObjectModelAttributeImpl attribute = (ObjectModelAttributeImpl) super.addAttribute(name, type); + attribute.setVisibility("protected"); + return attribute; + } + + public ObjectModelAttribute addConstant(String name, String type, String value, String visibility) { + ObjectModelAttributeImpl constant = (ObjectModelAttributeImpl) addAttribute(name, type, value); + constant.setVisibility(visibility); + constant.setFinal(true); + constant.setStatic(true); + return constant; + } + + /*public ObjectModelAttribute addPropertyWithGetterSetter(String name, String type) { + ObjectModelAttributeImpl property = (ObjectModelAttributeImpl) addAttribute(name, type); + + String setterName = "set" + GeneratorUtil.toUpperCaseFirstLetter(name); + String returnTypeSetter = "void"; + + + //addOperation(name, type, inputParameters) + + return property; + }*/ + + @Override + public void setOperationBody(ObjectModelOperation operation, String body) { + ObjectModelOperationImpl operationImpl = (ObjectModelOperationImpl) operation; + operationImpl.setBodyCode(body); + } + + + + +} Added: branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaClassifierBuilder.java =================================================================== --- branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaClassifierBuilder.java (rev 0) +++ branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaClassifierBuilder.java 2009-10-19 09:55:11 UTC (rev 642) @@ -0,0 +1,94 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.nuiton.eugene.models.object.java; + +import org.nuiton.eugene.ImportsManager; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelParameterImpl; + +/** + * + * @author fdesbois + */ +public abstract class JavaClassifierBuilder<C extends ObjectModelClassifierImpl, I extends ObjectModelClassifier> { + + protected C classifier; + + protected ImportsManager importsManager; + + public JavaClassifierBuilder(String name, String packageName) { + this(name, packageName, new ImportsManager()); + } + + public JavaClassifierBuilder(String name, String packageName, ImportsManager imports) { + this.classifier = newClassifier(); + this.classifier.setName(name); + this.classifier.setPackage(packageName); + this.importsManager = imports; + } + + protected abstract C newClassifier(); + + public I getClassifier() { + return (I) classifier; + } + + public void addImport(String imports) { + importsManager.addImport(imports); + } + + public ObjectModelAttribute addAttribute(String name, String type, String value) { + ObjectModelAttributeImpl attribute = (ObjectModelAttributeImpl) addAttribute(name, type); + attribute.setDefaultValue(value); + return attribute; + } + + public ObjectModelAttribute addAttribute(String name, String type) { + ObjectModelAttributeImpl attribute = new ObjectModelAttributeImpl(); + attribute.setName(name); + attribute.setType(type); + classifier.addAttribute(attribute); + return attribute; + } + + public ObjectModelOperation addOperation(String name, String returnParameterType, String... inputParameters) { + ObjectModelOperationImpl operation = new ObjectModelOperationImpl(); + + operation.setName(name); + operation.setVisibility("public"); + ObjectModelParameterImpl returnParameter = new ObjectModelParameterImpl(); + returnParameter.setType(returnParameterType); + //importsManager.addImport(returnParameterType); + + operation.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.setName(inputParameters[i]); + parameter.setType(inputParameters[i+1]); + //importsManager.addImport(inputParameters[i+1]); + operation.addParameter(parameter); + } + + return operation; + } + + public abstract void setOperationBody(ObjectModelOperation operation, String body); + + /*public void addInnerClassifier(ObjectModelClassifier classifier) { + throw new UnsupportedOperationException("not supported yet."); + }*/ +} Added: branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaInterfaceBuilder.java =================================================================== --- branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaInterfaceBuilder.java (rev 0) +++ branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/JavaInterfaceBuilder.java 2009-10-19 09:55:11 UTC (rev 642) @@ -0,0 +1,54 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.nuiton.eugene.models.object.java; + +import org.nuiton.eugene.ImportsManager; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; + +/** + * + * @author fdesbois + */ +public class JavaInterfaceBuilder extends JavaClassifierBuilder<ObjectModelInterfaceImpl, ObjectModelInterface> { + + public JavaInterfaceBuilder(String name, String packageName, ImportsManager imports) { + super(name, packageName, imports); + } + + public JavaInterfaceBuilder(String name, String packageName) { + super(name, packageName); + } + + @Override + protected ObjectModelInterfaceImpl newClassifier() { + return new ObjectModelInterfaceImpl(); + } + + @Override + public ObjectModelAttribute addAttribute(String name, String type, String value) { + ObjectModelAttributeImpl attribute = (ObjectModelAttributeImpl) super.addAttribute(name, type, value); + attribute.setFinal(true); + attribute.setVisibility("public"); + attribute.setStatic(true); + return attribute; + } + + @Override + public ObjectModelAttribute addAttribute(String name, String type) { + throw new UnsupportedOperationException("Not allowed to set an attribute without value for an interface."); + } + + @Override + public void setOperationBody(ObjectModelOperation operation, String body) { + throw new UnsupportedOperationException("Not allowed for an interface to have operation body code."); + } + + +} Added: branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaBuilder.java =================================================================== --- branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaBuilder.java (rev 0) +++ branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaBuilder.java 2009-10-19 09:55:11 UTC (rev 642) @@ -0,0 +1,48 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.nuiton.eugene.models.object.java.old; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.models.object.JavaClassBuilder; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; + +/** + * + * @author fdesbois + */ +public class JavaBuilder { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(JavaBuilder.class); + + public static ObjectModelClass createClass(String name) { + ObjectModelClassImpl result = new ObjectModelClassImpl(); + result.setName(name); + return result; + } + + public static ObjectModelInterface createInterface(String name) { + ObjectModelInterfaceImpl result = new ObjectModelInterfaceImpl(); + return result; + } + + public static ObjectModelOperation addOperation(ObjectModelClassifier clazz, + String name, String failbackName) { + ObjectModelOperationImpl result = new ObjectModelOperationImpl(); + result.setName(name); + ((ObjectModelClassifierImpl)clazz).addOperation(result); + return result; + } + +} Added: branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaFileBuilder.java =================================================================== --- branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaFileBuilder.java (rev 0) +++ branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaFileBuilder.java 2009-10-19 09:55:11 UTC (rev 642) @@ -0,0 +1,19 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.nuiton.eugene.models.object.java.old; + +import org.nuiton.eugene.models.object.java.*; + +/** + * + * @author fdesbois + */ +public interface JavaFileBuilder<I extends JavaClassifierBuilder> { + + public I createMainClassifier(String name); + + public void addImport(String imports); +} Added: branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaFileBuilderImpl.java =================================================================== --- branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaFileBuilderImpl.java (rev 0) +++ branches/1.0.1-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/java/old/JavaFileBuilderImpl.java 2009-10-19 09:55:11 UTC (rev 642) @@ -0,0 +1,68 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.nuiton.eugene.models.object.java.old; + +import org.nuiton.eugene.models.object.java.*; +import org.nuiton.eugene.ImportsManager; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelInterface; + +/** + * + * @author fdesbois + */ +public abstract class JavaFileBuilderImpl<B extends JavaClassifierBuilder> implements JavaFileBuilder<B> { + + protected String packageName; + + protected ImportsManager importsManager; + + protected B mainBuilder; + + public JavaFileBuilderImpl(String packageName) { + this.mainBuilder = null; + this.packageName = packageName; + this.importsManager = new ImportsManager(); + } + + @Override + public B createMainClassifier(String name) { + return newMainBuilder(name); + } + + protected abstract B newMainBuilder(String name); + + @Override + public void addImport(String imports) { + importsManager.addImport(imports); + } + + protected void check(String methodName) throws Exception { + if (mainBuilder == null) { + throw new Exception("Main classifier must be defined to use method '" + methodName +"'"); + } + } + + /*public <T extends ObjectModelClassifier> JavaClassifierBuilder createInnerClassifier( + String name, Class<T> classifierClass) throws Exception { + + check("createInnerClassifier"); + JavaClassifierBuilder builder = null; + if (classifierClass.equals(ObjectModelClass.class)) { + builder = new JavaClassBuilder(name, packageName); + } else if (classifierClass.equals(ObjectModelInterface.class)) { + builder = new JavaInterfaceBuilder(name, packageName); + } + if (builder == null) { + throw new IllegalArgumentException("Type Class unknown : " + classifierClass.getName()); + } else { + mainBuilder.addInnerClassifier(builder.getClassifier()); + } + return builder; + }*/ + +}