Author: tchemit Date: 2010-12-11 18:01:02 +0100 (Sat, 11 Dec 2010) New Revision: 1022 Url: http://nuiton.org/repositories/revision/eugene/1022 Log: Evolution #1147: Add ordered stereotype on attribute + improve some codes Modified: trunk/eugene/src/main/java/org/nuiton/eugene/EugeneStereoTypes.java trunk/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java Modified: trunk/eugene/src/main/java/org/nuiton/eugene/EugeneStereoTypes.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/EugeneStereoTypes.java 2010-11-29 13:16:08 UTC (rev 1021) +++ trunk/eugene/src/main/java/org/nuiton/eugene/EugeneStereoTypes.java 2010-12-11 17:01:02 UTC (rev 1022) @@ -58,4 +58,14 @@ */ @StereotypeDefinition(target = ObjectModelAttribute.class) String STEREOTYPE_INDEXED = "indexed"; + + /** + * Stéréotype pour les attributs à ordonner. + * + * @see GeneratorUtil#hasOrderedStereotype(ObjectModelAttribute) + * @since 2.3 + */ + @StereotypeDefinition(target = ObjectModelAttribute.class) + String STEREOTYPE_ORDERED = "ordered"; + } Modified: trunk/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java 2010-11-29 13:16:08 UTC (rev 1021) +++ trunk/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java 2010-12-11 17:01:02 UTC (rev 1022) @@ -751,20 +751,33 @@ * @param attribute attribute to test * @return {@code true} if stereotype was found, {@code false otherwise} * @see EugeneStereoTypes#STEREOTYPE_INDEXED - * @since 2.5 + * @since 2.3 */ public static boolean hasIndexedStereotype(ObjectModelAttribute attribute) { return attribute.hasStereotype(EugeneStereoTypes.STEREOTYPE_INDEXED); } /** + * Check if the given attribute has the + * {@link EugeneStereoTypes#STEREOTYPE_ORDERED} stereotype. + * + * @param attribute attribute to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see EugeneStereoTypes#STEREOTYPE_ORDERED + * @since 2.3 + */ + public static boolean hasOrderedStereotype(ObjectModelAttribute attribute) { + return attribute.hasStereotype(EugeneStereoTypes.STEREOTYPE_ORDERED); + } + + /** * Obtain the value of the {@link EugeneTagValues#TAG_DOCUMENTATION} * tag value on the given model. * * @param model model to seek * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see EugeneTagValues#TAG_DOCUMENTATION - * @since 2.5 + * @since 2.3 */ public static String getDocumentationTagValue(ObjectModel model) { String value = findTagValue(EugeneTagValues.TAG_DOCUMENTATION, null, model); @@ -778,7 +791,7 @@ * @param element element to seek * @return the none empty value of the found tag value or {@code null} if not found nor empty. * @see EugeneTagValues#TAG_DOCUMENTATION - * @since 2.5 + * @since 2.3 */ public static String getDocumentationTagValue(ObjectModelElement element) { String value = findTagValue(EugeneTagValues.TAG_DOCUMENTATION, element, null); Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java 2010-11-29 13:16:08 UTC (rev 1021) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java 2010-12-11 17:01:02 UTC (rev 1022) @@ -25,6 +25,8 @@ package org.nuiton.eugene.models.object.xml; +import org.apache.commons.lang.StringUtils; +import org.nuiton.eugene.EugeneStereoTypes; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.java.JavaGeneratorUtil; import org.nuiton.eugene.models.object.ObjectModelAttribute; @@ -44,6 +46,12 @@ public class ObjectModelAttributeImpl extends ObjectModelParameterImpl implements ObjectModelAttribute { + public static final String ATTRIBUTE_TYPE_AGGREGATE = "aggregate"; + + public static final String ATTRIBUTE_TYPE_SHARED = "shared"; + + public static final String ATTRIBUTE_TYPE_COMPOSITE = "composite"; + protected String reverseAttributeName; protected int reverseMaxMultiplicity = -1; protected String associationType; @@ -101,7 +109,8 @@ */ @Override public boolean isAggregate() { - return "aggregate".equals(associationType) || "shared".equals(associationType); + return ATTRIBUTE_TYPE_AGGREGATE.equals(associationType) || + ATTRIBUTE_TYPE_SHARED.equals(associationType); } /** @@ -112,7 +121,7 @@ */ @Override public boolean isComposite() { - return "composite".equals(associationType); + return ATTRIBUTE_TYPE_COMPOSITE.equals(associationType); } @Override @@ -168,7 +177,7 @@ @Override public String getReverseAttributeName() { - if (reverseAttributeName == null || "".equals(reverseAttributeName)) { + if (StringUtils.isEmpty(reverseAttributeName)) { reverseAttributeName = GeneratorUtil .toLowerCaseFirstLetter(getDeclaringElement().getName()); } @@ -177,7 +186,7 @@ @Override public String getName() { - if ((name == null || "".equals(name)) && getClassifier() != null) { + if (StringUtils.isEmpty(name) && getClassifier() != null) { name = GeneratorUtil.toLowerCaseFirstLetter(getClassifier() .getName()); } @@ -238,6 +247,14 @@ return navigable; } + @Override + public ObjectModelImplRef addStereotype(ObjectModelImplRef stereotype) { + String stereotypeName = stereotype.getName(); + if (EugeneStereoTypes.STEREOTYPE_ORDERED.equals(stereotypeName)) { + setOrdered(true); + } + return super.addStereotype(stereotype); + } /** * FIXME tchemit 2010-11-28 Why the ordered flag may be indexed ? This is two distinct concepts ? */ Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java 2010-11-29 13:16:08 UTC (rev 1021) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelElementImpl.java 2010-12-11 17:01:02 UTC (rev 1022) @@ -203,6 +203,10 @@ public void addTagValue(String tagValue, String value) { String oldValue = getTagValue(tagValue); if (StringUtils.isNotEmpty(oldValue)) { + if (oldValue.equals(value)) { + // same tag value do not replace it + return; + } log.warn("Replace tagValue '" + tagValue + "' (old:" + oldValue + ", new: " + value + ")"); } tagValues.put(tagValue, value);