Author: fdesbois Date: 2010-05-17 18:52:57 +0200 (Mon, 17 May 2010) New Revision: 908 Url: http://nuiton.org/repositories/revision/eugene/908 Log: Ano #619 : add association class case for tagvalue attribute on participants Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java =================================================================== --- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-05-16 12:30:04 UTC (rev 907) +++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-05-17 16:52:57 UTC (rev 908) @@ -40,6 +40,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.models.object.xml.DigesterObjectModelRuleSet; +import org.nuiton.eugene.models.object.xml.ObjectModelAssociationClassImpl; import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImpl; @@ -207,9 +208,11 @@ if (CLASS.equals(target)) { elems.add(omc); } else if (ATTRIBUTE.equals(target)) { - ObjectModelClass classmodel = (ObjectModelClass) omc; - elems.add(classmodel - .getAttribute(targetName)); + + ObjectModelAttribute attr = + getAttribute((ObjectModelClass)omc, targetName); + elems.add(attr); + } else if (OPERATION.equals(target)) { elems.addAll(omc.getOperations(targetName)); } @@ -268,4 +271,36 @@ } }*/ } + + /** + * Retrieve an attribute from a {@code clazz} with its {@code name}. + * This method manage the association class case to explore participants + * attributes if needed. + * + * @param clazz where the attribute need to be find + * @param name attribute name to find + * @return the attribute found or null + */ + protected ObjectModelAttribute getAttribute(ObjectModelClass clazz, + String name) { + ObjectModelAttribute result = clazz.getAttribute(name); + + // Ano #619 : FD-2010-05-17 : Specific case for Association class : + // check on participant attributes + if (result == null && clazz instanceof ObjectModelAssociationClassImpl) { + if (log.isDebugEnabled()) { + log.debug("Attribute " + name + " not found from " + + clazz.getQualifiedName() +" association class. " + + "Will check participants..."); + } + ObjectModelAssociationClass assoc = (ObjectModelAssociationClass)clazz; + for (ObjectModelAttribute participant : assoc.getParticipantsAttributes()) { + if (participant.getName().equals(name)) { + result = participant; + break; + } + } + } + return result; + } }
participants (1)
-
fdesbois@users.nuiton.org