Author: echatellier
Date: 2009-08-20 15:10:41 +0200 (Thu, 20 Aug 2009)
New Revision: 594
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/Generator.java
trunk/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/StateModelGenerator.java
Log:
Add package restrictions on generator (must be implemented by generator implementation)
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Generator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/Generator.java 2009-08-20 12:32:54 UTC (rev 593)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/Generator.java 2009-08-20 13:10:41 UTC (rev 594)
@@ -28,6 +28,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.eugene.models.object.ObjectModelClassifier;
+import org.nuiton.eugene.models.object.ObjectModelElement;
/**
* Generator.
@@ -51,6 +53,13 @@
protected List<String> excludeTemplates;
+ /**
+ * List of package to allow generation.
+ *
+ * If {@code null} or empty, generate all packages.
+ */
+ protected List<String> generatedPackages;
+
protected String encoding;
public Generator() {
@@ -83,6 +92,17 @@
public void setEncoding(String encoding) {
this.encoding = encoding;
}
+
+ /**
+ * Set list of package to allow generation.
+ *
+ * If {@code null} or empty, generate all packages.
+ *
+ * @param generatedPackages list of package to generate
+ */
+ public void SetGeneratedPackages(List<String> generatedPackages) {
+ this.generatedPackages = generatedPackages;
+ }
/**
* Permet de recuperer la proprieté passé en argument
@@ -170,4 +190,24 @@
public abstract void generate(File[] file, File destDir);
+ /**
+ * Test if given package is allowed for generation.
+ *
+ * An element can be generated if his package is in the {@link generatedPackages} list
+ * or if {@link generatedPackages} is null or empty.
+ *
+ * @param packageName package name to test
+ * @return generation allowed
+ */
+ protected boolean canGeneratePackage(String packageName) {
+ boolean canGenerate = true;
+
+ // if not generation restriction, generate everything
+ if (generatedPackages != null && !generatedPackages.isEmpty()
+ && !generatedPackages.contains(packageName)) {
+ canGenerate = false;
+ }
+
+ return canGenerate;
+ }
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java 2009-08-20 12:32:54 UTC (rev 593)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java 2009-08-20 13:10:41 UTC (rev 594)
@@ -137,6 +137,7 @@
try {
digester.push(objectModel);
objectModel = (ObjectModel) digester.parse(file);
+ digester.pop();
} catch (IOException e) {
log.warn("Unable to parse ObjectModel input file : " + file, e);
} catch (SAXException e) {
@@ -173,8 +174,7 @@
if (key.startsWith("model")) {
if (!key.startsWith("model.tagvalue.")) {
- log
- .warn("only tagvalue is allowed on model in properties");
+ log.warn("only tagvalue is allowed on model in properties");
} else {
String tag = key.substring("model.tagvalue."
.length());
@@ -260,8 +260,7 @@
// TODO il faudra avoir des methodes d'acces en
// Set sur l'interface pour eviter ce message
if (log.isWarnEnabled()) {
- log
- .warn("Can't add properties to model, it's not an ObjectModelClassifierImpl");
+ log.warn("Can't add properties to model, it's not an ObjectModelClassifierImpl");
}
}
}
@@ -298,13 +297,11 @@
public void generate(ObjectModel model, File destDir) throws IOException {
// generateFromModel
- {
- this.model = model;
+ this.model = model;
- String filename = getFilenameForModel(model);
- generateFromElement(model, destDir, filename,
- ObjectModelType.OBJECT_MODEL);
- }
+ String filename = getFilenameForModel(model);
+ generateFromElement(model, destDir, filename,
+ ObjectModelType.OBJECT_MODEL);
// generateFromClassifier
generateFromElements(model.getClassifiers(), destDir,
@@ -338,8 +335,8 @@
*/
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) {
@@ -370,49 +367,85 @@
* @param filename nom du fichier de sortie
* @param type type d'ObjectModel
*/
- private void generateFromElement(Object element, File destDir, String filename,
+ protected void generateFromElement(Object element, File destDir, String filename,
ObjectModelType type) {
- File outputFile = getDestinationFile(destDir, filename);
- if (!getOverwrite() && isNewerThanSource(outputFile)) {
- if (log.isDebugEnabled()) {
- log.debug("file " + outputFile + " is up-to-date");
- }
- return;
- } else {
- if (!outputFile.exists() && log.isDebugEnabled()) {
- log.debug("not up-to-date " + outputFile.lastModified()
- + " <" + outputFile + ">");
- }
- try {
- StringWriter out = new StringWriter();
- MonitorWriter monitorOut = new MonitorWriter(out);
-
- switch (type) {
- case OBJECT_MODEL:
- generateFromModel(monitorOut,(ObjectModel)element); break;
- case OBJECT_MODEL_CLASSIFIER:
- generateFromClassifier(monitorOut, (ObjectModelClassifier)element); break;
- case OBJECT_MODEL_INTERFACE:
- generateFromInterface(monitorOut, (ObjectModelInterface)element); break;
- case OBJECT_MODEL_CLASS:
- generateFromClass(monitorOut, (ObjectModelClass)element); break;
- case OBJECT_MODEL_ENUMERATION:
- generateFromEnumeration(monitorOut, (ObjectModelEnumeration)element);
+ // on a maintenant une restriction des elements a generer
+ // c'est à dire un filtrage par package
+ // 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 (log.isDebugEnabled()) {
+ log.debug("file " + outputFile + " is up-to-date");
}
-
- write(outputFile, monitorOut);
- } catch (Exception eee) {
- log.warn("Erreur lors de la génération du fichier "
- + outputFile);
- throw new RuntimeException(
- "Erreur lors de la génération du fichier "
- + outputFile, eee);
+ return;
+ } else {
+ if (!outputFile.exists() && log.isDebugEnabled()) {
+ log.debug("not up-to-date " + outputFile.lastModified()
+ + " <" + outputFile + ">");
+ }
+ try {
+ StringWriter out = new StringWriter();
+ MonitorWriter monitorOut = new MonitorWriter(out);
+
+ switch (type) {
+ case OBJECT_MODEL:
+ generateFromModel(monitorOut,(ObjectModel)element);
+ break;
+ case OBJECT_MODEL_CLASSIFIER:
+ generateFromClassifier(monitorOut, (ObjectModelClassifier)element);
+ break;
+ case OBJECT_MODEL_INTERFACE:
+ generateFromInterface(monitorOut, (ObjectModelInterface)element);
+ break;
+ case OBJECT_MODEL_CLASS:
+ generateFromClass(monitorOut, (ObjectModelClass)element);
+ break;
+ case OBJECT_MODEL_ENUMERATION:
+ generateFromEnumeration(monitorOut, (ObjectModelEnumeration)element);
+ break;
+ }
+
+ write(outputFile, monitorOut);
+ } catch (Exception eee) {
+ log.warn("Erreur lors de la génération du fichier "
+ + outputFile);
+ throw new RuntimeException(
+ "Erreur lors de la génération du fichier "
+ + outputFile, eee);
+ }
}
}
}
/**
+ * Test if given element can be generated.
+ *
+ * An element can be generated if his package is in the {@link generatedPackages} list
+ * or if {@link generatedPackages} is null or empty.
+ *
+ * @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;
+ String classifierPackage = classifier.getPackageName();
+
+ canGenerate = super.canGeneratePackage(classifierPackage);
+ }
+
+ return canGenerate;
+ }
+
+ /**
* Par defaut cette methode retourne le getName du model. Si l'on souhaite
* utiliser la methode generateFromModel il vaut mieux surcharger cette
* methode
@@ -487,5 +520,4 @@
public void generateFromEnumeration(Writer output,
ObjectModelEnumeration enumeration) throws IOException {
}
-
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/StateModelGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/StateModelGenerator.java 2009-08-20 12:32:54 UTC (rev 593)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/StateModelGenerator.java 2009-08-20 13:10:41 UTC (rev 594)
@@ -27,6 +27,7 @@
import org.apache.commons.digester.Digester;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.eugene.models.object.ObjectModelClassifier;
import org.nuiton.eugene.models.state.StateModel;
import org.nuiton.eugene.models.state.StateModelState;
import org.nuiton.eugene.models.state.StateModelStateChart;
@@ -178,9 +179,6 @@
model = stateModel;
- /***********************************************************************
- * generateFromModel *
- **********************************************************************/
String filename = getFilenameFromModel(stateModel);
File outputFile = getDestinationFile(destDir, filename);
if (getOverwrite() || !isNewerThanSource(outputFile)) {
@@ -198,30 +196,31 @@
}
}
- /***********************************************************************
- * generateFromState *
- **********************************************************************/
// pour tous les diagrammes du modele
for (StateModelStateChart chart : stateModel.getStateCharts()) {
- // et tous les états de ces diagrammes
- for (Object oState : chart.getStates().toArray()) {
- StateModelState state = (StateModelState) oState;
- String filenameState = getFilenameFromState(state, chart
- .getName());
- File outputFiletate = getDestinationFile(destDir, filenameState);
- if (getOverwrite() || !isNewerThanSource(outputFiletate)) {
- try {
- StringWriter out = new StringWriter();
- MonitorWriter monitorOut = new MonitorWriter(out);
- generateFromState(monitorOut, state);
- write(outputFiletate, monitorOut);
- } catch (Exception eee) {
- log.warn("Erreur lors de la génération du fichier "
- + outputFiletate);
- throw new RuntimeException(
- "Erreur lors de la génération du fichier "
- + outputFiletate, eee);
+ // elements can be restricted in package
+ if (canGenerateElement(chart)) {
+
+ // et tous les états de ces diagrammes
+ for (Object oState : chart.getStates().toArray()) {
+ StateModelState state = (StateModelState) oState;
+ String filenameState = getFilenameFromState(state, chart
+ .getName());
+ File outputFiletate = getDestinationFile(destDir, filenameState);
+ if (getOverwrite() || !isNewerThanSource(outputFiletate)) {
+ try {
+ StringWriter out = new StringWriter();
+ MonitorWriter monitorOut = new MonitorWriter(out);
+ generateFromState(monitorOut, state);
+ write(outputFiletate, monitorOut);
+ } catch (Exception eee) {
+ log.warn("Erreur lors de la génération du fichier "
+ + outputFiletate);
+ throw new RuntimeException(
+ "Erreur lors de la génération du fichier "
+ + outputFiletate, eee);
+ }
}
}
}
@@ -229,6 +228,23 @@
}
/**
+ * Test if given element can be generated.
+ *
+ * @param chart chart to test
+ * @return generation allowed
+ */
+ protected boolean canGenerateElement(StateModelStateChart chart) {
+
+ boolean canGenerate = true;
+
+ // disabled until tested
+ //String chartPackage = chart.getPackageName();
+ //canGenerate = super.canGeneratePackage(chartPackage);
+
+ return canGenerate;
+ }
+
+ /**
* Generate model code
*
* @param monitorOut