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 f2ceb4744deabe78bd48778df76576122476476d Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 15 13:30:46 2015 +0200 Add all possible sub package in model after reading it. Add also a packageParent and fill it on ObjectModelPackage object. See #3750 --- .../eugene/models/object/ObjectModelPackage.java | 12 ++++ .../object/reader/AbstractObjectModelReader.java | 70 ++++++++++++++++++++++ .../models/object/xml/ObjectModelPackageImpl.java | 19 ++++++ 3 files changed, 101 insertions(+) diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelPackage.java b/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelPackage.java index c9a4c82..a434200 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelPackage.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelPackage.java @@ -41,6 +41,18 @@ public interface ObjectModelPackage extends TagValueAble, StereotypeAble { String getName(); /** + * + * @return the number of sub packages. (0 for a root package). + */ + int getNumberOfSubPackages(); + + /** + * + * @return parent package or {@code null} if the package is a root package. + */ + ObjectModelPackage getParentPackage(); + + /** * Returns all packages defined in this package. * * @return a Collection containing all ObjectModelPackages for this package. 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 474612c..83860f2 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 @@ -22,6 +22,7 @@ package org.nuiton.eugene.models.object.reader; * #L% */ +import com.google.common.collect.Sets; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -39,6 +40,7 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.eugene.models.object.xml.ObjectModelAssociationClassImpl; import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; import org.nuiton.eugene.models.stereotype.InvalidStereotypeSyntaxException; import org.nuiton.eugene.models.stereotype.MismatchStereotypeTargetException; import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviders; @@ -59,6 +61,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Properties; import java.util.Set; @@ -123,6 +126,8 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> readFileToModel(file, model); + addAllSubPackages((ObjectModelImpl) model); + // recherche est charge le fichier propriete associe au modele File dir = file.getParentFile(); String ext = FileUtil.extension(file); @@ -351,6 +356,71 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> return prop; } + /** + * Add all missing sub packages in a model. + * + * @param model the model to scan + */ + protected void addAllSubPackages(ObjectModelImpl model) { + + Set<String> subPackageNames = new LinkedHashSet<>(); + + for (ObjectModelPackage aPackage : Sets.newHashSet(model.getPackages())) { + + String aPackageName = aPackage.getName(); + if (log.isInfoEnabled()) { + log.info("Treate package: " + aPackageName); + } + + if (subPackageNames.add(aPackageName)) { + + addSubPackages(model, aPackageName); + + } + + } + + } + + protected void addSubPackages(ObjectModelImpl model, String aPackageName) { + + String subPackageName = null; + ObjectModelPackageImpl parentPackage = null; + + for (String part : aPackageName.split("\\.")) { + + if (subPackageName == null) { + subPackageName = part; + } else { + subPackageName += "." + part; + } + + ObjectModelPackageImpl subPackage = (ObjectModelPackageImpl) model.getPackage(subPackageName); + + if (subPackage == null) { + + subPackage = new ObjectModelPackageImpl(); + subPackage.setName(subPackageName); + model.addPackage(subPackage); + if (log.isInfoEnabled()) { + log.info("Add sub package: " + subPackageName); + } + + } + + if (subPackage.getParentPackage() == null &&parentPackage != null) { + + if (log.isInfoEnabled()) { + log.info("Set parent package " + parentPackage.getName() + " to " + part); + } + subPackage.setParentPackage(parentPackage); + } + + parentPackage = subPackage; + + } + } + protected boolean loadModelTagValue(ObjectModel model, String key, String value) throws InvalidModelPropertiesException { Matcher matcher; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelPackageImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelPackageImpl.java index d4961c7..a6a11da 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelPackageImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelPackageImpl.java @@ -58,6 +58,10 @@ public class ObjectModelPackageImpl implements ObjectModelPackage { protected String name; + protected int numberOfSubPackages; + + protected ObjectModelPackage parentPackage; + protected String documentation; protected Set<String> stereotypes = new HashSet<>(); @@ -72,6 +76,16 @@ public class ObjectModelPackageImpl implements ObjectModelPackage { } @Override + public int getNumberOfSubPackages() { + return numberOfSubPackages; + } + + @Override + public ObjectModelPackage getParentPackage() { + return parentPackage; + } + + @Override public String getDescription() { return getDocumentation().substring(0, getDocumentation().indexOf("--")); } @@ -238,7 +252,12 @@ public class ObjectModelPackageImpl implements ObjectModelPackage { this.name = name; } + public void setParentPackage(ObjectModelPackage parentPackage) { + this.parentPackage = parentPackage; + } + public void postInit() { + numberOfSubPackages = name.split("\\.").length; } protected final Predicate<ObjectModelClassifier> IS_PACKAGE_NAME_EQUALS_PREDICATE = new PackageNameEqualsPredicate(name); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.