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
- 1738 discussions
Author: tchemit
Date: 2010-05-14 15:44:45 +0200 (Fri, 14 May 2010)
New Revision: 905
Url: http://nuiton.org/repositories/revision/eugene/905
Log:
- add TemplateConfiguration
- remove deprecated methods
- add classLoader in template (via TemplateConfiguration) to seek Impl
- clean code
Added:
trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java
trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java
Removed:
trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java
Modified:
trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/Template.java
trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java
trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java
trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java
trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java
trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java
trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
Modified: trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java
===================================================================
--- trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -49,10 +49,10 @@
}
@Override
- public void generateFromClass(Writer output, ObjectModelClass clazz)
+ public void generateFromClass(Writer output, ObjectModelClass input)
throws IOException {
- output.write("package " + clazz.getPackageName() + ";\n\n");
- output.write("public class " + clazz.getName() + " {\n\n}\n");
+ output.write("package " + input.getPackageName() + ";\n\n");
+ output.write("public class " + input.getName() + " {\n\n}\n");
}
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -58,15 +58,14 @@
public void setParent(AbstractGenerator<M> parent) {
this.parent = parent;
- //setEncoding(parent.getEncoding());
}
@Override
- public boolean getOverwrite() {
+ public boolean isOverwrite() {
if (parent != null) {
- return parent.getOverwrite();
+ return parent.isOverwrite();
}
- return super.getOverwrite();
+ return super.isOverwrite();
}
@Override
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -62,13 +62,6 @@
protected abstract boolean validateModel(M model);
@Override
- public final void generate(File[] file, File destDir) {
- throw new UnsupportedOperationException(
- "Transformer does not implements any longer this deprecated " +
- "method");
- }
-
- @Override
public void applyTemplate(M model, File destDir) throws IOException {
boolean isValid = validateModel(model);
Added: trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java (rev 0)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -0,0 +1,62 @@
+/*
+ * #%L
+ * EUGene :: EUGene
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2004 - 2010 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+package org.nuiton.eugene;
+
+/**
+ * Default template configuration
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.0.2
+ */
+public class DefaultTemplateConfiguration implements TemplateConfiguration {
+
+ protected boolean overwrite = true;
+
+ protected boolean verbose;
+
+ protected String encoding = "UTF-8";
+
+ protected ClassLoader loader = getClass().getClassLoader();
+
+ @Override
+ public boolean isOverwrite() {
+ return overwrite;
+ }
+
+ @Override
+ public boolean isVerbose() {
+ return verbose;
+ }
+
+ @Override
+ public String getEncoding() {
+ return encoding;
+ }
+
+ @Override
+ public ClassLoader getClassLoader() {
+ return loader;
+ }
+}
Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Deleted: trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -1,184 +0,0 @@
-/*
- * #%L
- * EUGene :: EUGene
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2004 - 2010 CodeLutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser 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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>.
- * #L%
- */
-
-package org.nuiton.eugene;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Class used in generators that allows to manage easily imports. A first-pass
- * allow to register imports, and in a second-pass, returns the type to use in
- * generated code.
- *
- * @author thimel, chemit
- * @deprecated This class was moved to {@link org.nuiton.eugene.java} package
- */
-@Deprecated
-public class ImportsManager {
-
- private static Set<String> primitiveTypes;
-
- static {
- primitiveTypes = new HashSet<String>();
-
- primitiveTypes.add("byte");
- primitiveTypes.add("Byte");
- primitiveTypes.add("short");
- primitiveTypes.add("Short");
- primitiveTypes.add("int");
- primitiveTypes.add("Integer");
- primitiveTypes.add("long");
- primitiveTypes.add("Long");
- primitiveTypes.add("float");
- primitiveTypes.add("Float");
- primitiveTypes.add("double");
- primitiveTypes.add("Double");
-
- primitiveTypes.add("char");
- primitiveTypes.add("Char");
- primitiveTypes.add("String");
-
- primitiveTypes.add("boolean");
- primitiveTypes.add("Boolean");
-
- primitiveTypes.add("void");
-
- }
- private Map<String, String> imports = new HashMap<String, String>();
- private State state = State.FILLING;
-
- /**
- * From the given class, add it to the imports list.
- * @param clazz the class to import
- * @return true if import add was successful
- * @see ImportsManager#addImport(String)
- */
- public boolean addImport(Class<?> clazz) {
- return addImport(clazz.getName());
- }
-
- /**
- * From the given fqn (fully qualified name), add it to the imports list.
- * If there is a conflict adding this import, will return false.
- * If reading of the imports has started, this method will return false,
- * unless type does not need to be imported.
- * @param fqn the fully qualified name to import
- * @return true if import add was successful
- */
- public boolean addImport(String fqn) {
- // if no package don't include it
- if (fqn.indexOf(".") == -1) {
- return true;
- }
-
- // Exclude java.lang classes
- if (fqn == null || fqn.trim().isEmpty() ||
- (fqn.startsWith("java.lang.") && fqn.lastIndexOf(".") == 9)) {
- return true;
- }
- // Exclude primitive types
- if (primitiveTypes.contains(fqn)) {
- return true;
- }
- // Reject generics
- if (fqn.indexOf("<") != -1 || fqn.indexOf(">") != -1) {
- return false;
- }
- String name = fqn.substring(fqn.lastIndexOf(".") + 1);
- String inPlaceFqn = imports.get(name);
- if (inPlaceFqn == null) {
- // Someone has started to read imports, impossible to add some more
- if (state == State.READING) {
- return false;
- } else {
- imports.put(name, fqn);
- return true;
- }
- }
- // if fqn is not the same, return false. Otherwise, no need to override.
- return inPlaceFqn.equals(fqn);
- }
-
- /**
- * Accorging to the already added types, returns the type to write in file.
- * If there is a conflict, returns the fully qualified name, otherwise
- * returns the simple name
- * @param fqn the fully qualified name to add
- * @return the fqn or simple name according to in-place imports
- */
- public String getType(String fqn) {
- boolean importResult = addImport(fqn);
- if (!importResult) {
- // There is a conflict, do not use simple name
- return fqn;
- } else {
- // No conflict, use simple name
- int packageEndIndex = fqn.lastIndexOf(".");
- if (packageEndIndex == -1) {
- return fqn;
- } else {
- return fqn.substring(packageEndIndex + 1);
- }
- }
- }
-
- /**
- * List the imports. This method will remove the useless imports according
- * to the given packageName (no need to import a class in the same package)
- * @param packageName the current package name (to avoid useless imports)
- * @return the imports alphabeticaly sorted
- */
- public List<String> getImports(String packageName) {
- state = State.READING;
- List<String> result = new ArrayList<String>();
- for (String fqn : imports.values()) {
- if (!(fqn.lastIndexOf(".") == packageName.length() && fqn.startsWith(packageName + "."))) {
- result.add(fqn);
- }
- }
- Collections.sort(result);
- return result;
- }
-
- /**
- * Method to reset imports list. If imports has been listed, it becomes back
- * possible to add imports.
- */
- public void clearImports() {
- imports.clear();
- state = State.FILLING;
- }
-
- private enum State {
-
- FILLING, READING
- }
-}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Template.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/Template.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/Template.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -26,8 +26,6 @@
package org.nuiton.eugene;
import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.models.Model;
import java.io.File;
@@ -46,15 +44,18 @@
*
* @author Cedric Pineau <pineau(a)codelutin.com>
*/
-public abstract class Template<M extends Model> {
+public abstract class Template<M extends Model> implements TemplateConfiguration {
- public static final String PROP_DEFAULT_PACKAGE = "defaultPackage";
public static final String PROP_OVERWRITE = "overwrite";
public static final String PROP_ENCODING = "encoding";
+
+ public static final String PROP_DEFAULT_PACKAGE = "defaultPackage";
public static final String PROP_LAST_MODIFIED_SOURCE = "lastModifiedSource";
public static final String PROP_GENERATED_PACKAGES = "generatedPackages";
public static final String PROP_EXCLUDE_TEMPLATES = "excludeTemplates";
+ protected TemplateConfiguration configuration;
+
protected Properties properties = new Properties();
protected List<String> excludeTemplates;
@@ -69,40 +70,59 @@
/** Model */
protected M model;
- /**
- * Old method from EUGene 1.0.1 used to generate files. Now, you have to
- * use a Reader instead of directly use a Template.
- *
- * @param file list of tiles
- * @param destDir destination folder
- * @deprecated since 2.0.0
- */
- @Deprecated
- public abstract void generate(File[] file, File destDir);
+// /**
+// * Old method from EUGene 1.0.1 used to generate files. Now, you have to
+// * use a Reader instead of directly use a Template.
+// *
+// * @param file list of tiles
+// * @param destDir destination folder
+// * @deprecated since 2.0.0
+// */
+// @Deprecated
+// public abstract void generate(File[] file, File destDir);
public abstract void applyTemplate(M model, File destDir) throws IOException;
-
+ public TemplateConfiguration getConfiguration() {
+ if (configuration == null) {
+ configuration = new DefaultTemplateConfiguration();
+ }
+ return configuration;
+ }
+
+ public void setConfiguration(TemplateConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
/**
- * @param v override value
- * @deprecated since 2.0.0, use a Properties object to add the
- * {@link Template#PROP_OVERWRITE} value
- * @see Template#setProperties(Properties)
+ *
+ * @return {@code true} if must overwrite ouput
+ * @deprecated since 2.0.2, prefer use the {@link #isOverwrite()} method
*/
@Deprecated
- public void setOverwrite(boolean v) {
- //overwrite = v;
- properties.setProperty(PROP_OVERWRITE, String.valueOf(v));
+ public boolean getOverwrite() {
+ return isOverwrite();
}
- public boolean getOverwrite() {
- return Boolean.parseBoolean(properties.getProperty(PROP_OVERWRITE, "true"));
+ @Override
+ public boolean isOverwrite() {
+ return getConfiguration().isOverwrite();
}
+ @Override
+ public boolean isVerbose() {
+ return getConfiguration().isVerbose();
+ }
+ @Override
public String getEncoding() {
- return properties.getProperty(PROP_ENCODING, "");
+ return getConfiguration().getEncoding();
}
+ @Override
+ public ClassLoader getClassLoader() {
+ return getConfiguration().getClassLoader();
+ }
+
/**
* @param encoding encoding value
* @deprecated since 2.0.0, use a Properties object to add the
@@ -149,9 +169,6 @@
if (!StringUtils.isEmpty(genPackages)) {
//TC-20091125 avoid manual array copy
generatedPackages.addAll(Arrays.asList(genPackages.split(",")));
-// for (String s : genPackages.split(",")) {
-// generatedPackages.add(s);
-// }
}
}
return generatedPackages;
@@ -181,9 +198,6 @@
if (!StringUtils.isEmpty(excludes)) {
//TC-20091125 avoid manual array copy
excludeTemplates.addAll(Arrays.asList(excludes.split(",")));
-// for (String s : excludes.split(",")) {
-// excludeTemplates.add(s);
-// }
}
}
return excludeTemplates;
Added: trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java (rev 0)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -0,0 +1,50 @@
+/*
+ * #%L
+ * EUGene :: EUGene
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2004 - 2010 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+package org.nuiton.eugene;
+
+/**
+ * Contract of a {@link Template} configuration
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.0.2
+ */
+public interface TemplateConfiguration {
+
+ /**
+ * @return {@code true} if must regenerate files even if they are up to
+ * date
+ */
+ boolean isOverwrite();
+
+ /** @return {@code true} if build is verbose. */
+ boolean isVerbose();
+
+ /** @return encoding to use to read and write files */
+ String getEncoding();
+
+ /** @return the classloader to use to seek for resources */
+ ClassLoader getClassLoader();
+
+}
Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -138,23 +138,6 @@
}
/**
- * Old method from previous EUGene 1.0.1 version. Used before creation
- * of ModelReader.
- *
- * @param file
- * @param destDir
- * @deprecated no need to manage list of files in input, prefer use input model.
- */
- @Override
- @Deprecated
- public void generate(File[] file, File destDir) {
- outputTemplate = initOutputTemplate();
- outputTemplate.setProperties(getOutputProperties());
- getOutputTemplate().generate(file, destDir);
- }
-
-
- /**
* This method apply the current transformation. You can use an other
* transformer for previous transformation by overriding
* {@link #initPreviousTransformer} method. In this case, the current
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -35,6 +35,7 @@
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -434,16 +435,25 @@
ObjectModelClass output) {
// Get name for Impl class
- String implQualifiedName = input.getQualifiedName() + "Impl";
+ String fqn = input.getQualifiedName() + "Impl";
+ URL location = getFileInClassPath(fqn);
+ if (location != null) {
+
+ if (isVerbose()) {
+ log.info("Will not generate ["+fqn+"] which exists : "+location);
+ }
+ // file already found in class-path, do not generate it
+ return null;
+ }
+
// Does bean own operations ?
boolean hasOperations = !input.getAllOtherOperations(true).isEmpty() ||
!input.getOperations().isEmpty();
- String resourceName = "/" + implQualifiedName.replaceAll("\\.", "/");
ObjectModelClass resultClassImpl = null;
// Generate the Impl class if not already exist in classpath and no operation is defined in model
- if (getClass().getResource(resourceName) == null && !hasOperations) {
+ if (!hasOperations) {
String implName = input.getName() + "Impl";
resultClassImpl = createClass(implName, input.getPackageName());
// set the abstract resulClass as the resultClassImpl super class
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -95,26 +95,26 @@
* Generate from all classes.
*
* @param output Writer for generating the java file
- * @param clazz Class to manage for creating an output file
+ * @param input Class to manage for creating an output file
* @throws IOException if any pb while writing file
*/
@Override
- public void generateFromClass(Writer output, ObjectModelClass clazz)
+ public void generateFromClass(Writer output, ObjectModelClass input)
throws IOException {
if (log.isDebugEnabled()) {
- log.debug("Will generate class "+clazz.getQualifiedName());
+ log.debug("Will generate class "+ input.getQualifiedName());
}
- preparePrefix(clazz);
+ preparePrefix(input);
// Imports, package et documentation
- generateHeader(output, clazz);
+ generateHeader(output, input);
- String abstractStr = clazz.isAbstract() ? " abstract " : " ";
- String className = clazz.getName();
+ String abstractStr = input.isAbstract() ? " abstract " : " ";
+ String className = input.getName();
String extend = "";
- Iterator<ObjectModelClass> j = clazz.getSuperclasses().iterator();
+ Iterator<ObjectModelClass> j = input.getSuperclasses().iterator();
if (j.hasNext()) {
ObjectModelClassifier p = j.next();
extend += GeneratorUtil.getSimpleName(p.getQualifiedName());
@@ -122,7 +122,7 @@
String implement = "";
for (Iterator<ObjectModelInterface> i =
- clazz.getInterfaces().iterator(); i.hasNext();) {
+ input.getInterfaces().iterator(); i.hasNext();) {
ObjectModelClassifier parentInterface = i.next();
String interfaceName = GeneratorUtil.getSimpleName(
parentInterface.getQualifiedName());
@@ -135,7 +135,7 @@
log.debug(className+" : super : "+extend+", interfaces : "
+ implement);
}
- generateAnnotations(output, clazz, clazz);
+ generateAnnotations(output, input, input);
/*{
<%=prefix%>public<%=abstractStr%>class <%=className%>}*/
@@ -157,9 +157,9 @@
}*/
}
- generateInnerClassifiers(output, clazz.getInnerClassifiers());
- generateAttributes(output, clazz,clazz.getAttributes());
- generateOperations(output, clazz,clazz.getOperations());
+ generateInnerClassifiers(output, input.getInnerClassifiers());
+ generateAttributes(output, input, input.getAttributes());
+ generateOperations(output, input, input.getOperations());
/*{
<%=prefix%>} //<%=className%>
@@ -168,20 +168,20 @@
@Override
public void generateFromInterface(Writer output,
- ObjectModelInterface interfacez)
+ ObjectModelInterface input)
throws IOException {
if (log.isDebugEnabled()) {
- log.debug(interfacez.getQualifiedName());
+ log.debug(input.getQualifiedName());
}
- preparePrefix(interfacez);
+ preparePrefix(input);
// Imports, package et documentation
- generateHeader(output, interfacez);
+ generateHeader(output, input);
- String interfaceName = interfacez.getName();
+ String interfaceName = input.getName();
String extend = "";
- Iterator<ObjectModelInterface> j = interfacez.getInterfaces().iterator();
+ Iterator<ObjectModelInterface> j = input.getInterfaces().iterator();
while (j.hasNext()) {
ObjectModelClassifier p = j.next();
extend += GeneratorUtil.getSimpleName(p.getQualifiedName());
@@ -189,7 +189,7 @@
extend += ", ";
}
}
- generateAnnotations(output, interfacez, interfacez);
+ generateAnnotations(output, input, input);
/*{
<%=prefix%>public interface <%=interfaceName%>}*/
@@ -203,8 +203,8 @@
}*/
}
- generateAttributes(output, interfacez, interfacez.getAttributes());
- generateOperations(output, interfacez, interfacez.getOperations());
+ generateAttributes(output, input, input.getAttributes());
+ generateOperations(output, input, input.getOperations());
/*{
<%=prefix%>} //<%=interfaceName%>
}*/
@@ -236,23 +236,23 @@
}
@Override
- public void generateFromEnum(Writer output, ObjectModelEnumeration enumz)
+ public void generateFromEnum(Writer output, ObjectModelEnumeration input)
throws IOException {
if (log.isDebugEnabled()) {
- log.debug(enumz.getQualifiedName());
+ log.debug(input.getQualifiedName());
}
- preparePrefix(enumz);
- generateHeader(output, enumz); // Imports, package et documentation
+ preparePrefix(input);
+ generateHeader(output, input); // Imports, package et documentation
- String enumzName = enumz.getName();
+ String enumzName = input.getName();
String extend = "";
- Iterator<ObjectModelInterface> j = enumz.getInterfaces().iterator();
+ Iterator<ObjectModelInterface> j = input.getInterfaces().iterator();
if (j.hasNext()) {
ObjectModelClassifier p = j.next();
extend += GeneratorUtil.getSimpleName(p.getQualifiedName());
}
- generateAnnotations(output, enumz, enumz);
+ generateAnnotations(output, input, input);
/*{
<%=prefix%>public enum <%=enumzName%>}*/
@@ -267,18 +267,18 @@
}*/
}
// generation of literal
- if (enumz.getLiterals().isEmpty()) {
+ if (input.getLiterals().isEmpty()) {
/*{ ; }*/
} else {
- Iterator<String> i = enumz.getLiterals().iterator();
+ Iterator<String> i = input.getLiterals().iterator();
while (i.hasNext()) {
String literal = i.next();
/*{<%=prefix%> <%=literal%><%=(i.hasNext() ? "," : ";")%>
}*/
}
}
- generateAttributes(output, enumz, enumz.getAttributes());
- generateOperations(output, enumz, enumz.getOperations());
+ generateAttributes(output, input, input.getAttributes());
+ generateOperations(output, input, input.getOperations());
/*{
<%=prefix%>} //<%=enumzName%>
}*/
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -43,6 +43,7 @@
import org.nuiton.eugene.models.object.ObjectModelTransformer;
import org.nuiton.eugene.models.object.ObjectModelType;
+import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -382,4 +383,14 @@
public void setConstantPrefix(String constantPrefix) {
this.constantPrefix = constantPrefix;
}
+
+ protected URL getFileInClassPath(String fqn) {
+ String resourceName = fqn.replaceAll("\\.", "/") + ".java";
+ URL fileLocation = getClassLoader().getResource(resourceName);
+ if (log.isDebugEnabled()) {
+ log.debug("Look for resource : " + resourceName + " = " + fileLocation);
+ }
+ return fileLocation;
+ }
+
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -25,51 +25,51 @@
package org.nuiton.eugene.models.object;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.eugene.AbstractGenerator;
+import org.nuiton.eugene.MonitorWriter;
+
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Collection;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.eugene.AbstractGenerator;
-import org.nuiton.eugene.MonitorWriter;
-
/**
* Pour utiliser ce type de générateur il faut implanter au moins une des trois
* méthodes generateFrom... et le getFilenameFor... associé si l'on souhaite un
* nom de fichier convenable. Si dans une méthode generateFrom... on utilise pas
* le Writer alors aucun fichier n'est généré.
- *
+ * <p/>
* <pre>
* public String getFilenameForClass(ObjectModelClass clazz){
* return super.getFilenameForClass(Clazz) + "Service.java";
* }
- *
+ * <p/>
* public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException{
* if(clazz.getType().equals("service")){
* / *{
* public class .... {
- *
+ * <p/>
* }
* }* /
* }
* }
* </pre>
- *
+ * <p/>
* Le nom de l'argument writer doit absolument etre output et pas autre chose si
* vous souhaitez utiliser le processeur
* org.codelutin.processor.filters.GeneratorTemplatesFilter pour vous
* s'implifier l'écriture des templates.
- *
+ * <p/>
* Created: 14 mars 2004
- *
+ *
* @author Benjamin Poussin <poussin(a)codelutin.com> Copyright Code Lutin
- *
* @version $Revision$
- *
- * Mise a jour: $Date$ par : */
+ * <p/>
+ * Mise a jour: $Date$ par :
+ */
public class ObjectModelGenerator extends AbstractGenerator<ObjectModel> {
/** Logger for this class. */
@@ -82,21 +82,6 @@
super(parent);
}
- @Override
- @Deprecated
- public void generate(File[] files, File destDir) {
- ObjectModelReader reader = new ObjectModelReader();
- ObjectModel objectModel = reader.read(files);
- setLastModifiedSource(reader.getLastModifiedSource());
- try {
- applyTemplate(objectModel, destDir);
- } catch (IOException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Unable to generate for file", eee);
- }
- }
- }
-
/**
* Par defaut la methode appelle la methode
* {@link #generateFromModel(Writer, ObjectModel)} puis boucle sur chaque
@@ -110,7 +95,8 @@
* getFilenameFor.... La methode generateFrom... n'utilise pas le Writer
* alors le fichier n'est pas généré, si on l'utilise m?me pour ne rien
* écrire alors le fichier sera généré.
- * @param model le modele memoire a utiliser
+ *
+ * @param model le modele memoire a utiliser
* @param destDir le repertoire ou generer
* @throws IOException pour tout pb
*/
@@ -146,33 +132,32 @@
* Deux méthodes dépendent du type et peuvent être surchargées :
* getFilenameForXXX et generateFromXXX (XXX étant un type prédéfini pour une méthode existante).
*
- * @see ObjectModelType
- *
* @param elements Collection d'éléments d'un des types ci-dessus
- * @param destDir dossier de destination pour le fichier généré
- * @param type type explicite d'ObjectModel
+ * @param destDir dossier de destination pour le fichier généré
+ * @param type type explicite d'ObjectModel
+ * @see ObjectModelType
*/
private void generateFromElements(Collection<? extends ObjectModelElement> elements,
File destDir,
ObjectModelType type) {
-
+
for (ObjectModelElement element : elements) {
String filename = "";
// Filename depends on type of element (Classifier, Class, Interface or Enumeration)
switch (type) {
case OBJECT_MODEL_CLASSIFIER:
- filename = getFilenameForClassifier((ObjectModelClassifier)element);
+ filename = getFilenameForClassifier((ObjectModelClassifier) element);
break;
case OBJECT_MODEL_INTERFACE:
- filename = getFilenameForInterface((ObjectModelInterface)element);
+ filename = getFilenameForInterface((ObjectModelInterface) element);
break;
case OBJECT_MODEL_CLASS:
- filename = getFilenameForClass((ObjectModelClass)element);
+ filename = getFilenameForClass((ObjectModelClass) element);
break;
case OBJECT_MODEL_ENUMERATION:
- filename = getFilenameForEnumeration((ObjectModelEnumeration)element);
+ filename = getFilenameForEnumeration((ObjectModelEnumeration) element);
}
-
+
generateFromElement(element, destDir, filename, type);
}
}
@@ -183,12 +168,11 @@
* ObjectModelInterface et ObjectModelEnumeration.
* La méthode generateFromXXX dépend du type d'élément et peut être surchargée.
*
- * @see ObjectModelType
- *
- * @param element element à généré
- * @param destDir dossier de destination
+ * @param element element à généré
+ * @param destDir dossier de destination
* @param filename nom du fichier de sortie
- * @param type type d'ObjectModel
+ * @param type type d'ObjectModel
+ * @see ObjectModelType
*/
protected void generateFromElement(Object element,
File destDir,
@@ -200,9 +184,9 @@
// effectue un appel pour savoir si on a le droit de generer l'element
// courant
if (canGenerateElement(element)) {
-
+
File outputFile = getDestinationFile(destDir, filename);
- if (!getOverwrite() && isNewerThanSource(outputFile)) {
+ if (!isOverwrite() && isNewerThanSource(outputFile)) {
if (log.isTraceEnabled()) {
log.trace("file " + outputFile + " is up-to-date");
}
@@ -210,7 +194,7 @@
}
if (!outputFile.exists() && log.isTraceEnabled()) {
log.trace("not up-to-date " + outputFile.lastModified()
- + " <" + outputFile + ">");
+ + " <" + outputFile + ">");
}
try {
StringWriter out = new StringWriter();
@@ -243,36 +227,36 @@
} catch (Exception eee) {
log.warn("Erreur lors de la génération du fichier "
- + outputFile);
+ + outputFile);
throw new RuntimeException(
"Erreur lors de la génération du fichier "
- + outputFile, eee);
+ + outputFile, eee);
}
}
}
/**
* Test if given element can be generated.
- *
+ * <p/>
* An element can be generated if his package is in the
* {@link #generatedPackages} list or if {@link #generatedPackages} is
* null or empty.
- *
+ *
* @param element element to test
* @return generation allowed
*/
protected boolean canGenerateElement(Object element) {
-
+
boolean canGenerate = true;
-
+
// can get package only for Classifiers
if (element instanceof ObjectModelClassifier) {
- ObjectModelClassifier classifier = (ObjectModelClassifier)element;
+ ObjectModelClassifier classifier = (ObjectModelClassifier) element;
String classifierPackage = classifier.getPackageName();
-
- canGenerate = super.canGeneratePackage(classifierPackage);
+
+ canGenerate = canGeneratePackage(classifierPackage);
}
-
+
return canGenerate;
}
@@ -280,6 +264,7 @@
* Par defaut cette methode retourne le getName du model. Si l'on souhaite
* utiliser la methode generateFromModel il vaut mieux surcharger cette
* methode
+ *
* @param model le modele utilise
* @return le nom du fichier a generer
*/
@@ -291,7 +276,8 @@
/**
* Par defaut cette methode retourne le QualifiedName convertie en chemin
* par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto
- * @param model le modele utilise
+ *
+ * @param model le modele utilise
* @param packageName le nom du paquetage
* @return le repertoire correspondant au paquetage
*/
@@ -303,28 +289,29 @@
/**
* Par defaut cette methode retourne le QualifiedName convertie en chemin
* par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto
+ *
* @param interfacez l'interface utilisee
* @return le nom du l'interface a generer
*/
public String getFilenameForInterface(ObjectModelInterface interfacez) {
return getFilenameForClassifier(interfacez);
-// return interfacez.getQualifiedName().replace('.', File.separatorChar);
}
/**
* Par defaut cette methode retourne le QualifiedName convertie en chemin
* par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto
+ *
* @param clazz la classe utilisee
* @return le nom de la classe a generer
*/
public String getFilenameForClass(ObjectModelClass clazz) {
return getFilenameForClassifier(clazz);
-// return clazz.getQualifiedName().replace('.', File.separatorChar);
}
/**
* Par defaut cette methode retourne le QualifiedName convertie en chemin
* par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto
+ *
* @param classifier le classifier utilisee
* @return le nom du classifier a generer
*/
@@ -334,30 +321,29 @@
public String getFilenameForEnumeration(ObjectModelEnumeration enumeration) {
return getFilenameForClassifier(enumeration);
-// return enumeration.getQualifiedName().replace('.', File.separatorChar);
}
public void generateFromModel(Writer output,
- ObjectModel model) throws IOException {
+ ObjectModel input) throws IOException {
}
public void generateFromInterface(Writer output,
- ObjectModelInterface interfacez) throws IOException {
+ ObjectModelInterface input) throws IOException {
}
public void generateFromEnum(Writer output,
- ObjectModelEnumeration interfacez) throws IOException {
+ ObjectModelEnumeration input) throws IOException {
}
public void generateFromClass(Writer output,
- ObjectModelClass clazz) throws IOException {
+ ObjectModelClass input) throws IOException {
}
public void generateFromClassifier(Writer output,
- ObjectModelClassifier clazz) throws IOException {
+ ObjectModelClassifier input) throws IOException {
}
public void generateFromEnumeration(Writer output,
- ObjectModelEnumeration enumeration) throws IOException {
+ ObjectModelEnumeration input) throws IOException {
}
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -74,26 +74,26 @@
super(parent);
}
- /*
- * @see org.nuiton.eugene.Generator#generate(java.io.File[], java.io.File)
- */
- @Override
- @Deprecated
- public void generate(File[] files, File destDir) {
+// /*
+// * @see org.nuiton.eugene.Generator#generate(java.io.File[], java.io.File)
+// */
+// @Override
+// @Deprecated
+// public void generate(File[] files, File destDir) {
+//
+// StateModelReader reader = new StateModelReader();
+// StateModel stateModel = reader.read(files);
+// setLastModifiedSource(reader.getLastModifiedSource());
+//
+// // generate code
+// try {
+// applyTemplate(stateModel, destDir);
+// } catch (IOException e) {
+// log.warn("Can't generate code for files", e);
+// }
+// }
- StateModelReader reader = new StateModelReader();
- StateModel stateModel = reader.read(files);
- setLastModifiedSource(reader.getLastModifiedSource());
- // generate code
- try {
- applyTemplate(stateModel, destDir);
- } catch (IOException e) {
- log.warn("Can't generate code for files", e);
- }
- }
-
-
/**
* Par défaut, appel {@link #generateFromModel(MonitorWriter , StateModel)} pour le
* model et {@link #generateFromState(Writer,StateModelState)} pour tous les
@@ -110,10 +110,9 @@
String filename = getFilenameFromModel(stateModel);
File outputFile = getDestinationFile(destDir, filename);
- if (getOverwrite() || !isNewerThanSource(outputFile)) {
+ if (isOverwrite() || !isNewerThanSource(outputFile)) {
+ MonitorWriter monitorOut = new MonitorWriter(new StringWriter());
try {
- StringWriter out = new StringWriter();
- MonitorWriter monitorOut = new MonitorWriter(out);
generateFromModel(monitorOut, stateModel);
write(outputFile, monitorOut);
} catch (Exception eee) {
@@ -122,6 +121,8 @@
throw new RuntimeException(
"Erreur lors de la génération du fichier " + outputFile,
eee);
+ } finally {
+ monitorOut.close();
}
}
@@ -137,10 +138,9 @@
String filenameState = getFilenameFromState(state, chart
.getName());
File outputFiletate = getDestinationFile(destDir, filenameState);
- if (getOverwrite() || !isNewerThanSource(outputFiletate)) {
+ if (isOverwrite() || !isNewerThanSource(outputFiletate)) {
+ MonitorWriter monitorOut = new MonitorWriter(new StringWriter());
try {
- StringWriter out = new StringWriter();
- MonitorWriter monitorOut = new MonitorWriter(out);
generateFromState(monitorOut, state);
write(outputFiletate, monitorOut);
} catch (Exception eee) {
@@ -149,6 +149,8 @@
throw new RuntimeException(
"Erreur lors de la génération du fichier "
+ outputFiletate, eee);
+ } finally {
+ monitorOut.close();
}
}
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -27,6 +27,7 @@
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
+import org.nuiton.eugene.TemplateConfiguration;
import java.io.File;
import java.util.Map;
@@ -38,7 +39,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 2.0.0
*/
-public interface ChainedFileWriterConfiguration {
+public interface ChainedFileWriterConfiguration extends TemplateConfiguration{
/** @return the type of model used */
String getModelType();
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -31,7 +31,6 @@
import junit.framework.Assert;
import org.junit.Test;
-import org.nuiton.eugene.models.object.ObjectModelGenerator;
import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl;
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -85,9 +85,12 @@
transformer.setURIResolver(new ResourceResolver());
- transformer.transform(new StreamSource(xmiFile), new StreamResult(
- new FileOutputStream(result)));
-
+ FileOutputStream out = new FileOutputStream(result);
+ try {
+ transformer.transform(new StreamSource(xmiFile), new StreamResult(out));
+ } finally {
+ out.close();
+ }
return result;
}
@@ -98,11 +101,14 @@
* @return object model
*/
protected ObjectModel loadModel(File modelFile) {
- ObjectModelGenerator generator = new ObjectModelGenerator();
- generator.setOverwrite(true);
- generator.generate(new File[] { modelFile }, new File("output"));
- ObjectModel objectModel = generator.getModel();
- return objectModel;
+// ObjectModelGenerator generator = new ObjectModelGenerator();
+ ObjectModelReader reader = new ObjectModelReader();
+ ObjectModel model = reader.read(modelFile);
+ return model;
+// generator.applyTemplate(model);
+// generator.generate(new File[] { modelFile }, new File("output"));
+// ObjectModel objectModel = generator.getModel();
+// return objectModel;
}
/**
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -91,8 +91,13 @@
String basePath = xmiFile.getParent();
transformer.setURIResolver(new ResourceResolver(basePath));
- transformer.transform(new StreamSource(xmiFile), new StreamResult(
- new FileOutputStream(result)));
+ FileOutputStream out = new FileOutputStream(result);
+ try {
+ transformer.transform(new StreamSource(xmiFile), new StreamResult(
+ out));
+ } finally {
+ out.close();
+ }
return result;
}
@@ -104,11 +109,13 @@
* @return object model
*/
protected ObjectModel loadModel(File modelFile) {
- ObjectModelGenerator generator = new ObjectModelGenerator();
- generator.setOverwrite(true);
- generator.generate(new File[] { modelFile }, new File("output"));
- ObjectModel objectModel = generator.getModel();
- return objectModel;
+ ObjectModelReader reader = new ObjectModelReader();
+ ObjectModel model = reader.read(modelFile);
+ return model;
+// ObjectModelGenerator generator = new ObjectModelGenerator();
+// generator.generate(new File[] { modelFile }, new File("output"));
+// ObjectModel objectModel = generator.getModel();
+// return objectModel;
}
/**
Modified: trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java
===================================================================
--- trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -46,12 +46,12 @@
import java.util.List;
import java.util.Set;
import java.util.HashSet;
-import org.apache.commons.lang.StringUtils;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.models.object.ObjectModelGenerator;
import org.nuiton.eugene.GeneratorUtil;
-import org.nuiton.eugene.ImportsManager;
+import org.nuiton.eugene.java.ImportsManager;
import org.nuiton.eugene.models.object.ObjectModelAttribute;
import org.nuiton.eugene.models.object.ObjectModelClass;
import org.nuiton.eugene.models.object.ObjectModelClassifier;
@@ -608,7 +608,7 @@
* @param attributes list of attributes for the generation (may be not empty)
* @param imports the ImportsManager used to generate the header imports of the DTO
* @return the same list of attributes in parameter with attributes from entities dependencies
- * @see org.nuiton.eugene.ImportsManager
+ * @see org.nuiton.eugene.java.ImportsManager
* @see org.nuiton.eugene.models.object.ObjectModelDependency
*/
private List<ObjectModelAttribute> setAttributesForDTO(ObjectModelClass clazz,
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -33,6 +33,7 @@
import org.apache.maven.settings.Settings;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
+import org.nuiton.eugene.TemplateConfiguration;
import org.nuiton.eugene.models.Model;
import org.nuiton.eugene.plugin.writer.BaseChainedFileWriter;
import org.nuiton.eugene.plugin.writer.ModelChainedFileWriter;
@@ -584,7 +585,22 @@
urls,
urlsAsString
);
+
+ addDirectoryToUrlsList(
+ new File(getProject().getBuild().getTestSourceDirectory()),
+ urls,
+ urlsAsString
+ );
+ } else {
+
+ addDirectoryToUrlsList(
+ new File(getProject().getBuild().getSourceDirectory()),
+ urls,
+ urlsAsString
+ );
}
+
+
if (project.getProjectReferences() != null) {
// this case is for multi-module when calling from a
// parent module
@@ -612,7 +628,7 @@
if (!project.getArtifacts().isEmpty()) {
// this is a special case when artifacts were resolved
// (for example in site phase)
- if (verbose) {
+ if (isVerbose()) {
getLog().info(
"Use resolved artifacts to build class-path");
}
@@ -629,7 +645,7 @@
}
// we ask to add the directory in classloader
loader = getClass().getClassLoader();
- if (getLog().isDebugEnabled()) {
+ if (isVerbose()) {
getLog().info("original classloader " + loader);
}
if (loader instanceof URLClassLoader) {
@@ -637,7 +653,7 @@
// car sinon on risque de ne pas retrouver les resources...
for (URL u : ((URLClassLoader) loader).getURLs()) {
addUrlToUrlsList(u, urls, urlsAsString);
- if (getLog().isDebugEnabled()) {
+ if (isVerbose()) {
getLog().debug("original cp entry: " + u);
}
}
@@ -652,9 +668,9 @@
urls.toArray(new URL[urls.size()]),
loader);
}
- if (getLog().isDebugEnabled()) {
+ if (isVerbose()) {
for (URL u : urls) {
- getLog().debug("cp entry: " + u);
+ getLog().info("cp entry: " + u);
}
}
fixedClassLoader = loader;
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -50,11 +50,17 @@
public class ModelChainedFileWriter extends BaseChainedFileWriter {
public static final String PROP_GENERATED_PACKAGES = "generatedPackages";
+
public static final String PROP_EXCLUDE_TEMPLATES = "excludetemplates";
+
public static final String PROP_TEMPLATES = "templates";
+
public static final String PROP_TEMPLATES_LIST = "templatesList";
+
public static final String PROP_DEFAULT_PACKAGE = "defaultPackage";
+
public static final String PROP_MODEL_READER = "modelReader";
+
public static final String PROP_READER = "reader";
public ModelChainedFileWriter() {
@@ -205,21 +211,19 @@
// init templates
- List<Template<Model>> templatesList = new ArrayList<Template<Model>>();
+ List<Template<?>> templatesList = new ArrayList<Template<?>>();
String[] templatesNames = getTemplates().split(",");
for (String templateName : templatesNames) {
// remove trailing spaces
templateName = templateName.trim();
- Template<Model> template;
-
- template = (Template<Model>)
+ Template<?> template =
configuration.getModelTemplates().get(templateName);
if (template == null) {
getLog().warn("template [" + templateName + "] is not " +
"registred via plexus, try to load it directly");
try {
- template = (Template<Model>) Class.forName(
+ template = (Template<?>) Class.forName(
templateName, true, loader).newInstance();
} catch (Exception e) {
throw new IllegalStateException(
@@ -259,6 +263,10 @@
getLog().info("Generating from " + inputDirectory + " : " +
includePattern);
+ if (configuration.isVerbose()) {
+ getLog().info("Will use classLoader "+configuration.getClassLoader());
+ }
+
for (File srcDirGen : ioContext.getInputs()) {
if (configuration.isVerbose()) {
@@ -281,6 +289,8 @@
getLog().info("Apply " + template.getClass().getSimpleName() +
" generator");
+ template.setConfiguration(configuration);
+
// apply template
template.applyTemplate(model, ioContext.getOutput());
1
0
Author: tchemit
Date: 2010-05-13 19:16:19 +0200 (Thu, 13 May 2010)
New Revision: 904
Url: http://nuiton.org/repositories/revision/eugene/904
Log:
fix log4j dependency
Modified:
trunk/maven-eugene-plugin/pom.xml
Modified: trunk/maven-eugene-plugin/pom.xml
===================================================================
--- trunk/maven-eugene-plugin/pom.xml 2010-05-13 17:15:46 UTC (rev 903)
+++ trunk/maven-eugene-plugin/pom.xml 2010-05-13 17:16:19 UTC (rev 904)
@@ -70,6 +70,12 @@
<artifactId>maven-helper-plugin</artifactId>
</dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+
</dependencies>
<!-- ************************************************************* -->
1
0
13 May '10
Author: tchemit
Date: 2010-05-13 19:15:46 +0200 (Thu, 13 May 2010)
New Revision: 903
Url: http://nuiton.org/repositories/revision/eugene/903
Log:
add constant prefix api
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-11 12:19:39 UTC (rev 902)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-13 17:15:46 UTC (rev 903)
@@ -27,7 +27,11 @@
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.eugene.models.object.*;
+import org.nuiton.eugene.models.object.ObjectModelAttribute;
+import org.nuiton.eugene.models.object.ObjectModelClass;
+import org.nuiton.eugene.models.object.ObjectModelInterface;
+import org.nuiton.eugene.models.object.ObjectModelModifier;
+import org.nuiton.eugene.models.object.ObjectModelOperation;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
@@ -35,6 +39,7 @@
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
/*{generator option: parentheses = false}*/
/*{generator option: writeString = +}*/
@@ -44,94 +49,104 @@
* (and nothing else) according to the JavaBeans 1.1 norm.
*
* @author tchemit <chemit(a)codelutin.com>
+ * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.eugene.java.JavaBeanTransformer"
* @since 2.0.2
- * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.eugene.java.JavaBeanTransformer"
*/
public class JavaBeanTransformer extends ObjectModelTransformerToJava {
private static final Log log = LogFactory.getLog(JavaBeanTransformer.class);
+ public static final String DEFAULT_CONSTANT_PREFIX = "PROPERTY_";
+
@Override
- public void transformFromClass(ObjectModelClass clazz) {
- if (!canGenerate(clazz)) {
+ public void transformFromClass(ObjectModelClass input) {
+ if (!canGenerate(input)) {
if (log.isDebugEnabled()) {
- log.debug("Skip generation for "+clazz.getQualifiedName());
+ log.debug("Skip generation for " + input.getQualifiedName());
}
return;
}
- ObjectModelClass resultClass =
- createAbstractClass(clazz.getName(), clazz.getPackageName());
+ ObjectModelClass output =
+ createAbstractClass(input.getName(), input.getPackageName());
if (log.isDebugEnabled()) {
- log.debug("will generate "+ resultClass.getQualifiedName());
+ log.debug("will generate " + output.getQualifiedName());
}
- ObjectModelClass resultClassImpl = generateImpl(clazz, resultClass);
+ ObjectModelClass ouputImpl = generateImpl(input, output);
if (log.isDebugEnabled()) {
- if (resultClassImpl == null) {
+ if (ouputImpl == null) {
log.debug("will generate impl " +
- resultClass.getQualifiedName());
+ output.getQualifiedName());
} else {
log.debug("do not generate existing impl " +
- resultClass.getQualifiedName());
+ output.getQualifiedName());
}
}
+
+ String prefix = getConstantPrefix(input, DEFAULT_CONSTANT_PREFIX);
- addSuperClass(clazz, resultClass, resultClassImpl);
+ setConstantPrefix(prefix);
- addInterfaces(clazz, resultClass);
+ addSuperClass(input, output, ouputImpl);
+ addInterfaces(input, output);
+
+ Set<String> constantNames = addConstantsFromDependency(input, output);
+
// Get available properties
- List<ObjectModelAttribute> properties = getProperties(clazz);
+ List<ObjectModelAttribute> properties = getProperties(input);
// Add properties constant
for (ObjectModelAttribute attr : properties) {
- createPropertyConstant(resultClass, attr);
+ createPropertyConstant(output, attr, prefix, constantNames);
}
// Add properties field + javabean methods
for (ObjectModelAttribute attr : properties) {
- createProperty(resultClass, attr);
+ createProperty(output, attr);
}
-
+
// Add operations
- createAbstractOperations(resultClass, clazz.getOperations());
+ createAbstractOperations(output, input.getOperations());
// Add property change support
- createPropertyChangeSupport(resultClass);
+ createPropertyChangeSupport(output);
boolean hasAMultipleProperty = containsMutiple(properties);
// Add helper operations
if (hasAMultipleProperty) {
- createGetChildMethod(resultClass);
+ createGetChildMethod(output);
}
}
- @Override
- public String getConstantName(String propertyName) {
- return "PROPERTY_" + super.getConstantName(propertyName);
- }
+ protected void createPropertyConstant(ObjectModelClass output,
+ ObjectModelAttribute attr,
+ String prefix,
+ Set<String> constantNames) {
- protected void createPropertyConstant(ObjectModelClass resultClass,
- ObjectModelAttribute attr) {
-
String attrName = getAttributeName(attr);
- String constantName = getConstantName(attrName);
+ String constantName = prefix + builder.getConstantName(attrName);
- addConstant(resultClass,
+ if (constantNames.contains(constantName)) {
+
+ // already generated
+ return;
+ }
+
+ addConstant(output,
constantName,
String.class,
"\"" + attrName + "\"",
ObjectModelModifier.PUBLIC
);
-
}
protected String getAttributeName(ObjectModelAttribute attr) {
@@ -167,9 +182,8 @@
return result;
}
- protected void createProperty(
- ObjectModelClass resultClass,
- ObjectModelAttribute attr) {
+ protected void createProperty(ObjectModelClass output,
+ ObjectModelAttribute attr) {
String attrName = getAttributeName(attr);
String attrType = getAttributeType(attr);
@@ -183,21 +197,21 @@
if (multiple) {
- createGetChildMethod(resultClass,
+ createGetChildMethod(output,
attrName,
attrNameCapitalized,
attrType,
simpleType
);
- createAddChildMethod(resultClass,
+ createAddChildMethod(output,
attrName,
attrNameCapitalized,
attrType,
constantName
);
- createRemoveChildMethod(resultClass,
+ createRemoveChildMethod(output,
attrName,
attrNameCapitalized,
attrType,
@@ -214,13 +228,13 @@
simpleType = JavaGeneratorUtil.getSimpleName(attrType);
}
- createGetMethod(resultClass,
+ createGetMethod(output,
attrName,
attrNameCapitalized,
attrType
);
- createSetMethod(resultClass,
+ createSetMethod(output,
attrName,
attrNameCapitalized,
attrType,
@@ -229,7 +243,7 @@
);
// Add attribute to the class
- addAttribute(resultClass,
+ addAttribute(output,
attrName,
attrType,
"",
@@ -238,19 +252,20 @@
}
- protected void createAbstractOperations(ObjectModelClass resultClass,
+ protected void createAbstractOperations(ObjectModelClass ouput,
Iterable<ObjectModelOperation> operations) {
JavaGeneratorUtil.cloneOperations(
this,
operations,
- resultClass,
+ ouput,
true,
ObjectModelModifier.ABSTRACT
);
}
- protected List<ObjectModelAttribute> getProperties(ObjectModelClass clazz) {
+
+ protected List<ObjectModelAttribute> getProperties(ObjectModelClass input) {
List<ObjectModelAttribute> attributes =
- (List<ObjectModelAttribute>) clazz.getAttributes();
+ (List<ObjectModelAttribute>) input.getAttributes();
List<ObjectModelAttribute> attrs =
new ArrayList<ObjectModelAttribute>();
@@ -264,12 +279,12 @@
return attrs;
}
- protected void createGetMethod(ObjectModelClass resultClass,
+ protected void createGetMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
String attrType) {
ObjectModelOperation getter = addOperation(
- resultClass,
+ output,
"get" + attrNameCapitalized,
attrType,
ObjectModelModifier.PUBLIC
@@ -280,13 +295,14 @@
}*/
);
}
- protected void createGetChildMethod(ObjectModelClass resultClass,
+
+ protected void createGetChildMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
String attrType,
String simpleType) {
ObjectModelOperation getChild = addOperation(
- resultClass,
+ output,
"get" + attrNameCapitalized,
attrType,
ObjectModelModifier.PUBLIC
@@ -300,13 +316,13 @@
);
}
- protected void createAddChildMethod(ObjectModelClass resultClass,
+ protected void createAddChildMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
String attrType,
String constantName) {
ObjectModelOperation addChild = addOperation(
- resultClass,
+ output,
"add" + attrNameCapitalized,
"void",
ObjectModelModifier.PUBLIC
@@ -320,13 +336,13 @@
);
}
- protected void createRemoveChildMethod(ObjectModelClass resultClass,
+ protected void createRemoveChildMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
String attrType,
String constantName) {
ObjectModelOperation operation = addOperation(
- resultClass,
+ output,
"remove" + attrNameCapitalized,
"boolean",
ObjectModelModifier.PUBLIC
@@ -343,14 +359,14 @@
);
}
- protected void createSetMethod(ObjectModelClass resultClass,
+ protected void createSetMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
String attrType,
String simpleType,
String constantName) {
ObjectModelOperation operation = addOperation(
- resultClass,
+ output,
"set" + attrNameCapitalized,
"void",
ObjectModelModifier.PUBLIC
@@ -366,9 +382,9 @@
);
}
- protected void createGetChildMethod(ObjectModelClass resultClass) {
+ protected void createGetChildMethod(ObjectModelClass output) {
ObjectModelOperation getChild = addOperation(
- resultClass,
+ output,
"getChild", "<T> T",
ObjectModelModifier.PROTECTED
);
@@ -390,59 +406,59 @@
);
}
- protected void addInterfaces(ObjectModelClass clazz,
- ObjectModelClass resultClass) {
+ protected void addInterfaces(ObjectModelClass input,
+ ObjectModelClass output) {
// Add interfaces from inputModel
- for (ObjectModelInterface parentInterface : clazz.getInterfaces()) {
- addInterface(resultClass, parentInterface.getQualifiedName());
+ for (ObjectModelInterface parentInterface : input.getInterfaces()) {
+ addInterface(output, parentInterface.getQualifiedName());
}
}
- protected void addSuperClass(ObjectModelClass clazz,
- ObjectModelClass resultClass,
- ObjectModelClass resultClassImpl) {
+ protected void addSuperClass(ObjectModelClass input,
+ ObjectModelClass output,
+ ObjectModelClass outputImpl) {
// Set superclass
- if (resultClassImpl == null) {
- Iterator<ObjectModelClass> j = clazz.getSuperclasses().iterator();
+ if (outputImpl == null) {
+ Iterator<ObjectModelClass> j = input.getSuperclasses().iterator();
if (j.hasNext()) {
ObjectModelClass p = j.next();
// We want to set the inheritance to the implementation class of the father
// Ex for model : A -> B (a inherits B) we want : A -> BImpl -> B
String qualifiedName = p.getQualifiedName() + "Impl";
- setSuperClass(resultClass, qualifiedName);
+ setSuperClass(output, qualifiedName);
}
}
}
- protected ObjectModelClass generateImpl(ObjectModelClass clazz,
- ObjectModelClass resultClass) {
+ protected ObjectModelClass generateImpl(ObjectModelClass input,
+ ObjectModelClass output) {
// Get name for Impl class
- String implQualifiedName = clazz.getQualifiedName() + "Impl";
+ String implQualifiedName = input.getQualifiedName() + "Impl";
// Does bean own operations ?
- boolean hasOperations = !clazz.getAllOtherOperations(true).isEmpty() ||
- !clazz.getOperations().isEmpty();
+ boolean hasOperations = !input.getAllOtherOperations(true).isEmpty() ||
+ !input.getOperations().isEmpty();
String resourceName = "/" + implQualifiedName.replaceAll("\\.", "/");
- ObjectModelClass resultClassImpl=null;
+ ObjectModelClass resultClassImpl = null;
// Generate the Impl class if not already exist in classpath and no operation is defined in model
- if(getClass().getResource(resourceName) == null && !hasOperations) {
- String implName = clazz.getName() + "Impl";
- resultClassImpl = createClass(implName, clazz.getPackageName());
+ if (getClass().getResource(resourceName) == null && !hasOperations) {
+ String implName = input.getName() + "Impl";
+ resultClassImpl = createClass(implName, input.getPackageName());
// set the abstract resulClass as the resultClassImpl super class
- setSuperClass(resultClassImpl, resultClass.getQualifiedName());
+ setSuperClass(resultClassImpl, output.getQualifiedName());
}
return resultClassImpl;
}
- protected boolean canGenerate(ObjectModelClass clazz) {
- return clazz.hasStereotype(JavaGeneratorUtil.STEREOTYPE_BEAN);
+ protected boolean canGenerate(ObjectModelClass input) {
+ return input.hasStereotype(JavaGeneratorUtil.STEREOTYPE_BEAN);
}
- protected void createPropertyChangeSupport(ObjectModelClass resultClass) {
+ protected void createPropertyChangeSupport(ObjectModelClass output) {
- addAttribute(resultClass,
+ addAttribute(output,
"pcs",
PropertyChangeSupport.class,
"new PropertyChangeSupport(this);",
@@ -453,8 +469,8 @@
// Add PropertyListener
ObjectModelOperation operation;
-
- operation = addOperation(resultClass,
+
+ operation = addOperation(output,
"addPropertyChangeListener",
"void",
ObjectModelModifier.PUBLIC
@@ -466,7 +482,7 @@
}*/
);
- operation = addOperation(resultClass,
+ operation = addOperation(output,
"addPropertyChangeListener",
"void",
ObjectModelModifier.PUBLIC
@@ -479,7 +495,7 @@
}*/
);
- operation = addOperation(resultClass,
+ operation = addOperation(output,
"removePropertyChangeListener",
"void",
ObjectModelModifier.PUBLIC
@@ -491,10 +507,10 @@
}*/
);
- operation= addOperation(resultClass,
- "removePropertyChangeListener",
- "void",
- ObjectModelModifier.PUBLIC
+ operation = addOperation(output,
+ "removePropertyChangeListener",
+ "void",
+ ObjectModelModifier.PUBLIC
);
addParameter(operation, String.class, "propertyName");
addParameter(operation, PropertyChangeListener.class, "listener");
@@ -504,7 +520,7 @@
}*/
);
- operation = addOperation(resultClass,
+ operation = addOperation(output,
"firePropertyChange",
"void",
ObjectModelModifier.PROTECTED
@@ -518,7 +534,7 @@
}*/
);
- operation = addOperation(resultClass,
+ operation = addOperation(output,
"firePropertyChange",
"void",
ObjectModelModifier.PROTECTED
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java 2010-05-11 12:19:39 UTC (rev 902)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java 2010-05-13 17:15:46 UTC (rev 903)
@@ -29,14 +29,11 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.models.object.ObjectModelAttribute;
-import org.nuiton.eugene.models.object.ObjectModelClassifier;
-import org.nuiton.eugene.models.object.ObjectModelDependency;
-import org.nuiton.eugene.models.object.ObjectModelEnumeration;
import org.nuiton.eugene.models.object.ObjectModelInterface;
import org.nuiton.eugene.models.object.ObjectModelModifier;
-import java.util.Collection;
import java.util.Iterator;
+import java.util.Set;
/*{generator option: parentheses = false}*/
/*{generator option: writeString = +}*/
@@ -56,89 +53,77 @@
LogFactory.getLog(JavaInterfaceTransformer.class);
@Override
- public void transformFromInterface(ObjectModelInterface interfacez) {
+ public void transformFromInterface(ObjectModelInterface input) {
// Can only generate an interface with no stereotypes
- if (!interfacez.getStereotypes().isEmpty()) {
+ if (!input.getStereotypes().isEmpty()) {
return;
}
- ObjectModelInterface resultInterface = createInterface(
- interfacez.getName(), interfacez.getPackageName());
+ ObjectModelInterface output = createInterface(input.getName(),
+ input.getPackageName());
if (log.isDebugEnabled()) {
log.debug("generate interface " +
- resultInterface.getQualifiedName());
+ output.getQualifiedName());
}
// extend interface
Iterator<ObjectModelInterface> it =
- interfacez.getInterfaces().iterator();
+ input.getInterfaces().iterator();
if (it.hasNext()) {
ObjectModelInterface extend = it.next();
- addInterface(resultInterface, extend.getQualifiedName());
+ addInterface(output, extend.getQualifiedName());
}
- // constant attributes
- for (ObjectModelAttribute attr : interfacez.getAttributes()) {
- // only static attribut with value
- if (!attr.isStatic() &&
- StringUtils.isNotEmpty(attr.getDefaultValue())) {
- addConstant(resultInterface,
- attr.getName(),
- attr.getType(),
- attr.getDefaultValue(),
- ObjectModelModifier.PUBLIC
- );
+ String prefix = getConstantPrefix(input, "");
+
+ if (StringUtils.isEmpty(prefix)) {
+
+ // no specific prefix, so no prefix
+ if (log.isWarnEnabled()) {
+ log.warn("[" + input.getName() + "] Will generate constants with NO prefix, not a good idea...");
}
}
+ setConstantPrefix(prefix);
- // constant attributes via 'constants' enumeration dependency
- // literals of enumeration will be values and constant name will be generated
- ObjectModelDependency constantsDependencies =
- interfacez.getDependency(JavaGeneratorUtil.DEPENDENCIES_CONSTANTS);
- if (constantsDependencies != null) {
+ Set<String> constants = addConstantsFromDependency(input, output);
- ObjectModelClassifier classifier = constantsDependencies.getSupplier();
+ // constant attributes
+ for (ObjectModelAttribute attr : input.getAttributes()) {
- if (classifier instanceof ObjectModelEnumeration) {
+ if (attr.isStatic() ||
+ !StringUtils.isNotEmpty(attr.getDefaultValue())) {
- ObjectModelEnumeration constants =
- (ObjectModelEnumeration) classifier;
+ // only static attribut with value
+ continue;
+ }
- // look if there is a constant_prefix tag value
- String prefix = JavaGeneratorUtil.findTagValue(
- JavaGeneratorUtil.TAG_CONSTANT_PREFIX,
- constants,
- null
- );
+ String constantName = attr.getName();
- if (prefix==null) {
- prefix = "";
- }
+ if (constants.contains(constantName)) {
- // add all literal of dependency as constants in interface
- Collection<String> literals = constants.getLiterals();
- for (String literal : literals) {
-
- String constantName = prefix + getConstantName(literal);
-
- addConstant(resultInterface,
- constantName,
- String.class,
- "\"" + literal + "\"",
- ObjectModelModifier.PUBLIC
- );
- }
+ // already generated
+ continue;
}
+
+ // add constant
+ addConstant(output,
+ constantName,
+ attr.getType(),
+ attr.getDefaultValue(),
+ ObjectModelModifier.PUBLIC
+ );
}
+
// interface operations
JavaGeneratorUtil.cloneOperations(this,
- interfacez.getOperations(),
- resultInterface,
+ input.getOperations(),
+ output,
false
);
}
+
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2010-05-11 12:19:39 UTC (rev 902)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2010-05-13 17:15:46 UTC (rev 903)
@@ -25,11 +25,29 @@
package org.nuiton.eugene.java;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.Template;
-import org.nuiton.eugene.models.object.*;
+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.ObjectModelDependency;
+import org.nuiton.eugene.models.object.ObjectModelElement;
+import org.nuiton.eugene.models.object.ObjectModelEnumeration;
+import org.nuiton.eugene.models.object.ObjectModelInterface;
+import org.nuiton.eugene.models.object.ObjectModelModifier;
+import org.nuiton.eugene.models.object.ObjectModelOperation;
+import org.nuiton.eugene.models.object.ObjectModelParameter;
+import org.nuiton.eugene.models.object.ObjectModelTransformer;
+import org.nuiton.eugene.models.object.ObjectModelType;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* Created: 28 oct. 2009
*
@@ -39,11 +57,12 @@
private static final Log log =
LogFactory.getLog(ObjectModelTransformerToJava.class);
- /**
- * internal builder
- */
+
+ /** internal builder */
protected JavaBuilder builder;
+ private String constantPrefix;
+
@Override
protected Template<ObjectModel> initOutputTemplate() {
// by default, use a stupid java generator
@@ -56,6 +75,7 @@
log.debug("inputModelName = " + getModel().getName());
}
builder = new JavaBuilder(getModel().getName());
+ setConstantPrefix("");
return builder.getModel();
}
@@ -139,9 +159,27 @@
}
public String getConstantName(String propertyName) {
- return builder.getConstantName(propertyName);
+ return getConstantPrefix() + builder.getConstantName(propertyName);
}
+ protected String getConstantPrefix(ObjectModelClassifier input,
+ String defaultPrefix) {
+
+ // look if there is a constant_prefix tag value
+ String prefix = JavaGeneratorUtil.findTagValue(
+ JavaGeneratorUtil.TAG_CONSTANT_PREFIX,
+ input,
+ getModel()
+ );
+
+ if (StringUtils.isEmpty(prefix)) {
+
+ // no specific prefix, use default prefix
+ prefix = defaultPrefix;
+ }
+ return prefix.trim();
+ }
+
protected ObjectModelAttribute addConstant(
ObjectModelClassifier classifier,
String name,
@@ -277,4 +315,71 @@
ObjectModelModifier... modifiers) {
return builder.addBlock(classifier, modifiers);
}
+
+ /**
+ * Search in {@code input} model, for a enumeration dependency named
+ * {@link JavaGeneratorUtil#DEPENDENCIES_CONSTANTS}.
+ * <p/>
+ * If found, add all literals on {@code output} model as constants.
+ * <p/>
+ * You can add a {@link JavaGeneratorUtil#TAG_CONSTANT_PREFIX} to your
+ * enumeration to prefix constant names.
+ *
+ * @param input the input model
+ * @param output the ouput model
+ * @return the set of constants names generated
+ */
+ protected Set<String> addConstantsFromDependency(ObjectModelClassifier input,
+ ObjectModelClassifier output) {
+
+ // constant attributes via 'constants' enumeration dependency
+ // literals of enumeration will be values and constant name will be generated
+ ObjectModelDependency constantsDependencies =
+ input.getDependency(JavaGeneratorUtil.DEPENDENCIES_CONSTANTS);
+
+ if (constantsDependencies == null) {
+
+ // no dependency found
+ return Collections.emptySet();
+ }
+
+ ObjectModelClassifier classifier = constantsDependencies.getSupplier();
+
+ if (!(classifier instanceof ObjectModelEnumeration)) {
+
+ // do not have an enumeration
+ return Collections.emptySet();
+ }
+
+ Set<String> constantNames = new HashSet<String>();
+ ObjectModelEnumeration constants =
+ (ObjectModelEnumeration) classifier;
+
+ // add all literal of dependency as constants in interface
+ Collection<String> literals = constants.getLiterals();
+ for (String literal : literals) {
+
+ // always use builder method to obtain constant name to not use a
+ // possible altered by transformer
+ String constantName = getConstantName(literal);
+
+ addConstant(output,
+ constantName,
+ String.class,
+ "\"" + literal + "\"",
+ ObjectModelModifier.PUBLIC
+ );
+ constantNames.add(constantName);
+ }
+
+ return constantNames;
+ }
+
+ public String getConstantPrefix() {
+ return constantPrefix;
+ }
+
+ public void setConstantPrefix(String constantPrefix) {
+ this.constantPrefix = constantPrefix;
+ }
}
1
0
Author: tchemit
Date: 2010-05-11 14:19:39 +0200 (Tue, 11 May 2010)
New Revision: 902
Url: http://nuiton.org/repositories/revision/eugene/902
Log:
Evolution #599: Use nuiton-utils 1.3
Evolution #600: Use log4j 1.2.16
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-05-10 10:00:26 UTC (rev 901)
+++ trunk/pom.xml 2010-05-11 12:19:39 UTC (rev 902)
@@ -241,7 +241,7 @@
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
- <version>1.2.14</version>
+ <version>1.2.16</version>
<scope>test</scope>
</dependency>
@@ -270,7 +270,7 @@
<ant.version>1.7.1</ant.version>
<processor.version>1.0.3</processor.version>
- <nuiton-utils.version>1.2.2</nuiton-utils.version>
+ <nuiton-utils.version>1.3</nuiton-utils.version>
<!--Multilanguage maven-site -->
<locales>en,fr</locales>
1
0
Author: tchemit
Date: 2010-05-10 12:00:26 +0200 (Mon, 10 May 2010)
New Revision: 901
Url: http://nuiton.org/repositories/revision/eugene/901
Log:
use extension from mavenpom
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-05-09 17:10:24 UTC (rev 900)
+++ trunk/pom.xml 2010-05-10 10:00:26 UTC (rev 901)
@@ -278,15 +278,6 @@
<build>
- <extensions>
- <!-- Enabling the use of scpexe with maven 3.0 -->
- <extension>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-ssh-external</artifactId>
- <version>1.0-beta-6</version>
- </extension>
- </extensions>
-
<pluginManagement>
<plugins>
1
0
09 May '10
Author: tchemit
Date: 2010-05-09 19:10:24 +0200 (Sun, 09 May 2010)
New Revision: 900
Url: http://nuiton.org/repositories/revision/eugene/900
Log:
Add constantPrefix tagValue to specify a constant prefix on generated constant
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2010-05-09 12:33:53 UTC (rev 899)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2010-05-09 17:10:24 UTC (rev 900)
@@ -42,6 +42,11 @@
public static final String STEREOTYPE_BEAN = "bean";
/**
+ * tag value to add on constants enumeration (or other incoming dev)
+ * a prefix to constant to generate.
+ */
+ public static final String TAG_CONSTANT_PREFIX = "constantPrefix";
+ /**
* dependency to add constants in interfaces via an enumeration.
*
* The literals of enumeration will be the value, and constant names will
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java 2010-05-09 12:33:53 UTC (rev 899)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java 2010-05-09 17:10:24 UTC (rev 900)
@@ -107,11 +107,22 @@
ObjectModelEnumeration constants =
(ObjectModelEnumeration) classifier;
+ // look if there is a constant_prefix tag value
+ String prefix = JavaGeneratorUtil.findTagValue(
+ JavaGeneratorUtil.TAG_CONSTANT_PREFIX,
+ constants,
+ null
+ );
+
+ if (prefix==null) {
+ prefix = "";
+ }
+
// add all literal of dependency as constants in interface
Collection<String> literals = constants.getLiterals();
for (String literal : literals) {
- String constantName = getConstantName(literal);
+ String constantName = prefix + getConstantName(literal);
addConstant(resultInterface,
constantName,
1
0
Author: tchemit
Date: 2010-05-09 14:33:53 +0200 (Sun, 09 May 2010)
New Revision: 899
Url: http://nuiton.org/repositories/revision/eugene/899
Log:
Utilisation de mavenpom4redmine 2.1.4
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-05-09 12:30:10 UTC (rev 898)
+++ trunk/pom.xml 2010-05-09 12:33:53 UTC (rev 899)
@@ -33,7 +33,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>2.1.3</version>
+ <version>2.1.4</version>
</parent>
<artifactId>eugene</artifactId>
1
0
Author: tchemit
Date: 2010-05-09 14:30:10 +0200 (Sun, 09 May 2010)
New Revision: 898
Url: http://nuiton.org/repositories/revision/eugene/898
Log:
use locales property instead of siteLocales
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-05-09 11:04:27 UTC (rev 897)
+++ trunk/pom.xml 2010-05-09 12:30:10 UTC (rev 898)
@@ -267,15 +267,13 @@
<!-- pour un muli module on doit fixer le projectId -->
<projectId>eugene</projectId>
- <javadoc.version>2.7</javadoc.version>
<ant.version>1.7.1</ant.version>
<processor.version>1.0.3</processor.version>
<nuiton-utils.version>1.2.2</nuiton-utils.version>
- <helper.version>1.2.4</helper.version>
<!--Multilanguage maven-site -->
- <siteLocales>en,fr</siteLocales>
+ <locales>en,fr</locales>
</properties>
<build>
1
0
Author: tchemit
Date: 2010-05-09 13:04:27 +0200 (Sun, 09 May 2010)
New Revision: 897
Url: http://nuiton.org/repositories/revision/eugene/897
Log:
Evolution #584: Use maven-helper-plugin 1.2.4
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-05-08 17:07:11 UTC (rev 896)
+++ trunk/pom.xml 2010-05-09 11:04:27 UTC (rev 897)
@@ -272,7 +272,7 @@
<processor.version>1.0.3</processor.version>
<nuiton-utils.version>1.2.2</nuiton-utils.version>
- <helper.version>1.2.4-SNAPSHOT</helper.version>
+ <helper.version>1.2.4</helper.version>
<!--Multilanguage maven-site -->
<siteLocales>en,fr</siteLocales>
1
0
Author: tchemit
Date: 2010-05-08 19:07:11 +0200 (Sat, 08 May 2010)
New Revision: 896
Url: http://nuiton.org/repositories/revision/eugene/896
Log:
make project deployable with maven 3.0
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-05-08 16:54:58 UTC (rev 895)
+++ trunk/pom.xml 2010-05-08 17:07:11 UTC (rev 896)
@@ -267,8 +267,9 @@
<!-- pour un muli module on doit fixer le projectId -->
<projectId>eugene</projectId>
+ <javadoc.version>2.7</javadoc.version>
<ant.version>1.7.1</ant.version>
-
+
<processor.version>1.0.3</processor.version>
<nuiton-utils.version>1.2.2</nuiton-utils.version>
<helper.version>1.2.4-SNAPSHOT</helper.version>
@@ -279,6 +280,15 @@
<build>
+ <extensions>
+ <!-- Enabling the use of scpexe with maven 3.0 -->
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-external</artifactId>
+ <version>1.0-beta-6</version>
+ </extension>
+ </extensions>
+
<pluginManagement>
<plugins>
1
0