001: package org.andromda.metafacades.emf.uml2;
002:
003: import java.util.Collection;
004: import java.util.Iterator;
005: import java.util.List;
006:
007: import org.andromda.metafacades.uml.AssociationEndFacade;
008: import org.andromda.metafacades.uml.MetafacadeUtils;
009: import org.andromda.metafacades.uml.UMLMetafacadeProperties;
010: import org.apache.commons.collections.CollectionUtils;
011: import org.apache.commons.lang.StringUtils;
012: import org.eclipse.uml2.AssociationClass;
013:
014: /**
015: * MetafacadeLogic implementation for
016: * org.andromda.metafacades.uml.AssociationFacade.
017: *
018: * @see org.andromda.metafacades.uml.AssociationFacade
019: */
020: public class AssociationFacadeLogicImpl extends AssociationFacadeLogic {
021: public AssociationFacadeLogicImpl(
022: final org.eclipse.uml2.Association metaObject,
023: final String context) {
024: super (metaObject, context);
025: }
026:
027: /**
028: * @see org.andromda.metafacades.uml.AssociationFacade#getRelationName()
029: */
030: protected java.lang.String handleGetRelationName() {
031: final Collection ends = this .getAssociationEnds();
032: final Iterator endIt = ends.iterator();
033: final AssociationEndFacade firstEnd = (AssociationEndFacade) endIt
034: .next();
035: final AssociationEndFacade secondEnd = (AssociationEndFacade) endIt
036: .next();
037: return MetafacadeUtils
038: .toRelationName(
039: firstEnd.getName(),
040: secondEnd.getName(),
041: String
042: .valueOf(this
043: .getConfiguredProperty(UMLMetafacadeProperties.RELATION_NAME_SEPARATOR)));
044: }
045:
046: /**
047: * Overriden: A name may not have a name, which
048: * is problematic for getSqlName (for an EntityAssociation).
049: * We use the relation name as default
050: * @see org.andromda.metafacades.emf.uml2.ModelElementFacadeLogic#handleGetName()
051: */
052: public String handleGetName() {
053: String name = super .handleGetName();
054:
055: // if the name isn't defined, use the relation name
056: if (StringUtils.isEmpty(name)) {
057: name = this .getRelationName();
058: }
059: return name;
060: }
061:
062: /**
063: * @see org.andromda.metafacades.uml.AssociationFacade#isMany2Many()
064: */
065: protected boolean handleIsMany2Many() {
066: return ((AssociationEndFacade) this .getAssociationEnds()
067: .iterator().next()).isMany2Many();
068: }
069:
070: /**
071: * @see org.andromda.metafacades.uml.AssociationFacade#getAssociationEnds()
072: */
073: protected java.util.List handleGetAssociationEnds() {
074: return (List) CollectionUtils.collect(this .metaObject
075: .getMemberEnds(), UmlUtilities.ELEMENT_TRANSFORMER);
076: }
077:
078: /**
079: * @see org.andromda.metafacades.uml.AssociationFacade#isAssociationClass()
080: */
081: protected boolean handleIsAssociationClass() {
082: // TODO: Test this if it works.
083: return AssociationClass.class.isAssignableFrom(this .metaObject
084: .getClass());
085: }
086:
087: /**
088: * @see org.andromda.metafacades.uml.AssociationFacade#getAssociationEndA()
089: */
090: protected Object handleGetAssociationEndA() {
091: return this .getAssociationEnds().get(0);
092: }
093:
094: /**
095: * @see org.andromda.metafacades.uml.AssociationFacade#getAssociationEndB()
096: */
097: protected Object handleGetAssociationEndB() {
098: return this .getAssociationEnds().get(1);
099: }
100:
101: /**
102: * @see org.andromda.metafacades.uml.AssociationFacade#isAbstract()
103: */
104: protected boolean handleIsAbstract() {
105: return this .metaObject.isAbstract();
106: }
107:
108: /**
109: * @see org.andromda.metafacades.uml.AssociationFacade#isLeaf
110: */
111: protected boolean handleIsLeaf() {
112: return this.metaObject.isLeaf();
113: }
114: }
|