Author: fdesbois Date: 2009-11-07 18:21:53 +0100 (Sat, 07 Nov 2009) New Revision: 709 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/JavaGenerator.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java Log: Add support for Interface generation 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-07 16:51:35 UTC (rev 708) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2009-11-07 17:21:53 UTC (rev 709) @@ -107,7 +107,8 @@ * @param name * @param packageName * @return a new ObjectModelClass - * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#createClass(java.lang.String, java.lang.String) + * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#createClass(java.lang.String, java.lang.String, + * org.nuiton.eugene.models.object.ObjectModelModifier[]) ) */ public ObjectModelClass createClass(String name, String packageName) { return modelBuilder.createClass(name, packageName); @@ -126,6 +127,17 @@ } /** + * Create a new interface in the model + * @param name + * @param packageName + * @return a new ObjectModelInterface + * @see org.nuiton.eugene.models.object.xml.ObjectModelBuilder#createInterface(java.lang.String, java.lang.String) + */ + public ObjectModelInterface createInterface(String name, String packageName) { + return modelBuilder.createInterface(name, packageName); + } + + /** * Set the superclass of an other class. Only one superclass can be set to the class. * IMPORTS superclassQualifiedName. * @param classifier 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-07 16:51:35 UTC (rev 708) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2009-11-07 17:21:53 UTC (rev 709) @@ -61,9 +61,14 @@ @Override public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + ".java";//return clazz.getName() + ".java"; + return clazz.getQualifiedName().replace('.', File.separatorChar) + ".java"; } + @Override + public String getFilenameForInterface(ObjectModelInterface interfacez) { + return interfacez.getQualifiedName().replace('.', File.separatorChar) + ".java"; + } + /** * Generate from all classes. * @param output Writer for generating the java file @@ -74,7 +79,7 @@ public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { if (log.isInfoEnabled()) { - log.info("generate : " + clazz.getName()); + log.info("generate class : " + clazz.getName()); } this.generateHeader(output, clazz); // Imports, package et documentation @@ -93,19 +98,12 @@ for (Iterator<ObjectModelInterface> i = clazz.getInterfaces().iterator(); i.hasNext();) { ObjectModelClassifier parentInterface = i.next(); String interfaceName = GeneratorUtil.getSimpleName(parentInterface.getQualifiedName()); - if (log.isDebugEnabled()) { - log.debug("implements interface : " + interfaceName + " (" + parentInterface.getQualifiedName() + ")"); - } implement += interfaceName; if (i.hasNext()) { implement += ", "; } } - if (log.isDebugEnabled()) { - log.debug("implements str : " + implement); - } - /*{ public<%=abstractStr%>class <%=className%>}*/ @@ -129,10 +127,48 @@ this.generateAttributes(output, clazz.getAttributes()); this.generateOperations(output, clazz.getOperations()); /*{ -} //<%=clazz.getName()%> +} //<%=className%> }*/ } + @Override + public void generateFromInterface(Writer output, ObjectModelInterface interfacez) throws IOException { + if (log.isInfoEnabled()) { + log.info("generate interface : " + interfacez.getName()); + } + + this.generateHeader(output, interfacez); // Imports, package et documentation + + String interfaceName = interfacez.getName(); + + String extend = ""; + Iterator<ObjectModelInterface> j = interfacez.getInterfaces().iterator(); + if (j.hasNext()) { + ObjectModelClassifier p = j.next(); + extend += GeneratorUtil.getSimpleName(p.getQualifiedName()); + } +/*{ +public interface <%=interfaceName%>}*/ + +/* + * Définition de la super interface : il ne doit y avoir qu'une + */ + if (extend.length() > 0) { +/*{ extends <%=extend%>}*/ + } else { + /*{ { + +}*/ + } + + this.generateAttributes(output, interfacez.getAttributes()); + this.generateOperations(output, interfacez.getOperations()); +/*{ +} //<%=interfaceName%> +}*/ + } + + /** * Generate Header for a classifier : Package, Documentation, Imports and Classifier signature. * @param output Writer for generating the java file @@ -202,10 +238,11 @@ for (ObjectModelOperation op : operations) { String opName = op.getName(); /*{ /** + * <%=opName%> : }*/ if (op.getDocumentation() != null && !op.getDocumentation().isEmpty()) { String opDocumentation = op.getDocumentation(); -/*{ * <%=opName%> : <%=opDocumentation%> +/*{ * <%=opDocumentation%> }*/ } Collection<ObjectModelParameter> params = op.getParameters(); @@ -235,7 +272,7 @@ }*/ } } -/*{ *) +/*{ *) <%=opVisibility%> <%=opStatic%><%=opAbstract%><%=opReturn%><%=opName%>(}*/ String comma = ""; for (ObjectModelParameter param : params) { 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-07 16:51:35 UTC (rev 708) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2009-11-07 17:21:53 UTC (rev 709) @@ -85,6 +85,10 @@ return builder.createAbstractClass(name, packageName); } + protected ObjectModelInterface createInterface(String name, String packageName) { + return builder.createInterface(name, packageName); + } + protected void setSuperClass(ObjectModelClass classifier, String superclassQualifiedName) { builder.setSuperClass(classifier, superclassQualifiedName); }