This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository eugene. See http://git.nuiton.org/eugene.git commit f9e4d7f9a14c922862a6064e148ad359b7506a92 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 15 17:03:49 2015 +0200 Add stereotype on model --- .../eugene/java/ObjectModelTransformerToJava.java | 9 +++ .../main/java/org/nuiton/eugene/models/Model.java | 3 +- .../object/reader/AbstractObjectModelReader.java | 92 ++++++++++++++++++++-- .../eugene/models/object/xml/ObjectModelImpl.java | 21 ++++- .../eugene/models/state/xml/StateModelImpl.java | 19 +++++ 5 files changed, 135 insertions(+), 9 deletions(-) diff --git a/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java b/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java index 08a4ab4..40b5f17 100644 --- a/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java +++ b/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java @@ -45,6 +45,8 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.eugene.models.object.ObjectModelParameter; import org.nuiton.eugene.models.object.ObjectModelTransformer; import org.nuiton.eugene.models.object.ObjectModelType; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviderManagerExtension; import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviderManagerExtension; import org.nuiton.i18n.I18n; @@ -1033,4 +1035,11 @@ public abstract class ObjectModelTransformerToJava extends ObjectModelTransforme return extension.getTagValueDefinitionProvider(providerType); } + protected <T extends StereotypeDefinitionProvider> T getStereotypeDefinitionProvider(Class<T> providerType) { + + StereotypeDefinitionProviderManagerExtension extension = model.getExtension( + StereotypeDefinitionProviderManagerExtension.OBJECTMODEL_EXTENSION, StereotypeDefinitionProviderManagerExtension.class); + return extension.getStereotypeDefinitionProvider(providerType); + } + } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/Model.java b/eugene/src/main/java/org/nuiton/eugene/models/Model.java index a713fc7..ea30ba0 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/Model.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/Model.java @@ -23,12 +23,13 @@ package org.nuiton.eugene.models; +import org.nuiton.eugene.models.stereotype.StereotypeAble; import org.nuiton.eugene.models.tagvalue.TagValueAble; /** * Model. */ -public interface Model extends TagValueAble { +public interface Model extends TagValueAble, StereotypeAble { /** * Plexus role name diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java index b3bee55..3f6eea5 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java @@ -220,15 +220,35 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> if (key.startsWith(MODEL)) { + // model stereotype + if (key.contains(STEREOTYPE)) { + + Set<String> stereotypes = Stereotypes.getStereotypes(value); + for (String stereotype : stereotypes) { + boolean loaded = loadModelStereotype(model, stereotype); + safe &= loaded; + if (loaded) { + numberImportedStereotypes++; + } + } + continue; + + } + // model tag value + if (key.contains(TAGVALUE)) { + + boolean loaded = loadModelTagValue(model, key, value); + if (loaded) { + numberImportedTagValues++; + } + safe &= loaded; + continue; - boolean loaded = loadModelTagValue(model, key, value); - if (loaded) { - numberImportedTagValues++; } - safe &= loaded; - continue; + throw new InvalidModelPropertiesException(key + " is not a valid model entry."); + } if (key.startsWith(PACKAGE)) { @@ -408,7 +428,7 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> } - if (subPackage.getParentPackage() == null &&parentPackage != null) { + if (subPackage.getParentPackage() == null && parentPackage != null) { if (verbose) { @@ -697,6 +717,64 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> return true; } + protected boolean loadModelStereotype(ObjectModel model, String stereotype) throws InvalidModelPropertiesException { + + + boolean safe = false; + + try { + stereotypeDefinitionProvider.validate(stereotype, ObjectModel.class); + safe = true; + } catch (StereotypeNotFoundException e) { + + String message = "Invalid model stereotype [" + stereotype + "] : the stereotype '" + stereotype + "' is unknown."; + if (isStrictLoading()) { + if (log.isErrorEnabled()) { + log.error(message); + } + } else { + if (log.isWarnEnabled()) { + log.warn(message); + } + } + } catch (MismatchStereotypeTargetException e) { + String message = "Invalid model stereotype [" + stereotype + "] : this stereotype '" + stereotype + "' can not be apply on model."; + if (isStrictLoading()) { + if (log.isErrorEnabled()) { + log.error(message); + } + } else { + if (log.isWarnEnabled()) { + log.warn(message); + } + } + } + + if (safe) { + + // test if stereotype is deprecated + boolean deprecated = stereotypeDefinitionProvider.isDeprecated(stereotype); + if (deprecated) { + if (log.isWarnEnabled()) { + log.warn("Deprecated model stereotype usage: " + stereotype); + } + } + } else { + if (isStrictLoading()) { + // in strict loading do not accept unsafe stereotypes + return false; + } + } + + if (isVerbose()) { + log.info("stereotype imported " + stereotype + " --> model."); + } + + model.addStereotype(stereotype); + + return true; + } + protected boolean loadStereotype(ObjectModel model, String key, String fqn, @@ -736,7 +814,7 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> if (safe) { - // test if tagValue is deprecated + // test if stereotype is deprecated boolean deprecated = stereotypeDefinitionProvider.isDeprecated(stereotype); if (deprecated) { if (log.isWarnEnabled()) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java index 8b65772..9a58dfa 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java @@ -37,9 +37,11 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; /** * Implementation class for the root node abstraction of object model trees. @@ -74,7 +76,9 @@ public class ObjectModelImpl implements ObjectModel { protected List<String> comments = new ArrayList<>(); - private Map<String, String> tagValues = new HashMap<>(); + protected Map<String, String> tagValues = new HashMap<>(); + + protected Set<String> stereotypes = new HashSet<>(); /** * Used to add others specific object to the model @@ -377,6 +381,21 @@ public class ObjectModelImpl implements ObjectModel { return comments; } + @Override + public Set<String> getStereotypes() { + return stereotypes; + } + + @Override + public boolean hasStereotype(String stereotypeName) { + return stereotypes.contains(stereotypeName); + } + + @Override + public void addStereotype(String stereotype) { + stereotypes.add(stereotype); + } + protected void mergePackages( ObjectModelPackageImpl initialPackage, ObjectModelPackageImpl additionalPackage) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java index 9a2e8db..f45a87d 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/state/xml/StateModelImpl.java @@ -29,8 +29,10 @@ import org.nuiton.eugene.models.state.StateModelStateChart; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * Implementation of the {@link StateModel}. @@ -60,6 +62,8 @@ public class StateModelImpl implements StateModel { */ protected Map<String, String> modelTagValues; + protected Set<String> stereotypes = new HashSet<>(); + /** * Used to add others specific object to the model * The key defined must be unique to get the significative extension associated to @@ -84,6 +88,21 @@ public class StateModelImpl implements StateModel { return name; } + @Override + public Set<String> getStereotypes() { + return stereotypes; + } + + @Override + public boolean hasStereotype(String stereotypeName) { + return stereotypes.contains(stereotypeName); + } + + @Override + public void addStereotype(String stereotype) { + stereotypes.add(stereotype); + } + /** * Set model name. * -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.