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
participants (1)
-
echatellier@users.nuiton.org