Author: bobtarling
Date: 2011-05-13 10:55:36-0700
New Revision: 19420

Modified:
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CollaborationsFactoryEUMLImpl.java
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/MetaTypesEUMLImpl.java
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
   trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java
   
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MetaTypesMDRImpl.java
   trunk/src/argouml-core-model/src/org/argouml/model/Facade.java
   trunk/src/argouml-core-model/src/org/argouml/model/MetaTypes.java

Log:
Handle Connector and ConnectorEnd metatypes

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CollaborationsFactoryEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CollaborationsFactoryEUMLImpl.java?view=diff&pathrev=19420&r1=19419&r2=19420
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CollaborationsFactoryEUMLImpl.java
     (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CollaborationsFactoryEUMLImpl.java
     2011-05-13 10:55:36-0700
@@ -13,15 +13,17 @@
 
 import org.argouml.model.AbstractModelFactory;
 import org.argouml.model.CollaborationsFactory;
-import org.eclipse.uml2.uml.Classifier;
 import org.eclipse.uml2.uml.Collaboration;
+import org.eclipse.uml2.uml.ConnectableElement;
+import org.eclipse.uml2.uml.Connector;
+import org.eclipse.uml2.uml.ConnectorEnd;
 import org.eclipse.uml2.uml.Element;
-import org.eclipse.uml2.uml.Gate;
 import org.eclipse.uml2.uml.Interaction;
 import org.eclipse.uml2.uml.Lifeline;
 import org.eclipse.uml2.uml.Message;
-import org.eclipse.uml2.uml.MessageEnd;
 import org.eclipse.uml2.uml.MessageOccurrenceSpecification;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
 import org.eclipse.uml2.uml.UMLFactory;
 
 /**
@@ -45,18 +47,38 @@
     }
 
     public Object buildActivator(Object owner, Object interaction) {
-        // TODO: Auto-generated method stub
-        return null;
+        throw new NotYetImplementedException();
     }
 
-    public Object buildAssociationEndRole(Object atype) {
-        // TODO: Auto-generated method stub
-        return null;
+    public ConnectorEnd buildAssociationEndRole(Object atype) {
+        Lifeline lifeline = (Lifeline) atype;
+        ConnectorEnd end = UMLFactory.eINSTANCE.createConnectorEnd();
+        ConnectableElement prop = lifeline.getRepresents();
+        if (prop == null) {
+            prop = UMLFactory.eINSTANCE.createProperty();
+            lifeline.setRepresents(prop);
+        }
+
+        end.setRole(prop);
+//        lifeline.setRepresents(prop);
+        return end;
     }
 
-    public Object buildAssociationRole(Object from, Object to) {
-        // TODO: Auto-generated method stub
-        return null;
+    public Connector buildAssociationRole(Object from, Object to) {
+        return buildAssociationRole((Lifeline) from, (Lifeline) to);
+    }
+    
+    /**
+     * Internal type-checked version of buildAssociationRole.
+     */
+    private Connector buildAssociationRole(Lifeline from,
+            Lifeline to) {
+        Connector connector = UMLFactory.eINSTANCE.createConnector();
+        from.getInteraction().getOwnedConnectors().add(connector);
+
+        connector.getEnds().add(buildAssociationEndRole(from));
+        connector.getEnds().add(buildAssociationEndRole(to));
+        return connector;
     }
 
     @Deprecated

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java?view=diff&pathrev=19420&r1=19419&r2=19420
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java
    (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java
    2011-05-13 10:55:36-0700
@@ -27,6 +27,7 @@
 
 import org.apache.log4j.Logger;
 import org.argouml.model.Facade;
+import org.argouml.model.NotImplementedException;
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.Enumerator;
@@ -235,9 +236,8 @@
     }
 
     public Collection getAssociationRoles(Object handle) {
-        // TODO: In UML 2.0, ClassifierRole, AssociationRole, and
-        // AssociationEndRole have been replaced by the internal 
-        // structure of the Collaboration
+        // TODO: How do we get the Connectors of an Association?
+        LOG.warn("Not yet implemented - returning empty");
         return Collections.emptySet();
     }
 
@@ -498,6 +498,9 @@
             // as a workaround we return an empty collection
             return Collections.emptyList();
         }
+        if (handle instanceof Connector) {
+            return ((Connector) handle).getEnds();
+        }
         if (!(handle instanceof Association)) {
             throw new IllegalArgumentException(
                     "handle must be instance of Association"); //$NON-NLS-1$
@@ -942,7 +945,24 @@
     }
 
     public Object getLink(Object handle) {
-        throw new NotYetImplementedException();
+        throw new NotImplementedException("Not a UML2 element"); //$NON-NLS-1$
+    }
+    
+    public Object getLifeline(Object handle) {
+        Connector connector = (Connector) ((ConnectorEnd) handle).getOwner();
+        ConnectableElement prop = ((ConnectorEnd) handle).getRole();
+        Interaction interaction = (Interaction) connector.getOwner();
+        
+        for (Lifeline lifeline : interaction.getLifelines()) {
+            if (lifeline.getRepresents() == prop) {
+                return lifeline;
+            }
+        }
+        
+        throw new IllegalStateException(
+                "The lifeline for " + handle //$NON-NLS-1$
+                + " can't be found in the interaction " //$NON-NLS-1$
+                + interaction);
     }
 
     public Collection getLinkEnds(Object handle) {
@@ -1688,10 +1708,14 @@
     }
 
     public Object getType(Object handle) {
-        if (!(handle instanceof TypedElement)) {
-            throw new IllegalArgumentException();
+        if (handle instanceof Connector) {
+            return ((Connector) handle).getType();
+        } else if (handle instanceof TypedElement) {
+            return ((TypedElement) handle).getType();
         }
-        return ((TypedElement) handle).getType();
+        throw new IllegalArgumentException(
+                "handle most be a TypedElement or a Connector." //$NON-NLS-1$
+                + "Got " + handle); //$NON-NLS-1$
     }
 
     public Collection getTypedValues(Object handle) {
@@ -1979,6 +2003,14 @@
         return (handle instanceof Region);
     }
 
+    public boolean isAConnector(Object handle) {
+        return handle instanceof Connector;
+    }
+
+    public boolean isAConnectorEnd(Object handle) {
+        return handle instanceof ConnectorEnd;
+    }
+    
     public boolean isAConstraint(Object handle) {
         return handle instanceof Constraint;
     }

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/MetaTypesEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/MetaTypesEUMLImpl.java?view=diff&pathrev=19420&r1=19419&r2=19420
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/MetaTypesEUMLImpl.java
 (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/MetaTypesEUMLImpl.java
 2011-05-13 10:55:36-0700
@@ -261,7 +261,11 @@
 //        throw new NotImplementedException(
 //            "This is not a UML2 element"); //$NON-NLS-1$
     }
-    
+
+    public Object getConnector() {
+        return Connector.class;
+    }
+
     public Object getConstraint() {
         return Constraint.class;
     }

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java?view=diff&pathrev=19420&r1=19419&r2=19420
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
        (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
        2011-05-13 10:55:36-0700
@@ -27,6 +27,7 @@
 import org.argouml.model.IllegalModelElementConnectionException;
 import org.argouml.model.InvalidElementException;
 import org.argouml.model.MetaTypes;
+import org.argouml.model.Model;
 import org.argouml.model.UmlFactory;
 import org.argouml.model.Defaults;
 import org.eclipse.emf.common.util.URI;
@@ -43,6 +44,7 @@
 import org.eclipse.uml2.uml.Classifier;
 import org.eclipse.uml2.uml.Component;
 import org.eclipse.uml2.uml.ComponentRealization;
+import org.eclipse.uml2.uml.Connector;
 import org.eclipse.uml2.uml.ControlFlow;
 import org.eclipse.uml2.uml.ControlNode;
 import org.eclipse.uml2.uml.DataType;
@@ -57,6 +59,7 @@
 import org.eclipse.uml2.uml.Generalization;
 import org.eclipse.uml2.uml.Include;
 import org.eclipse.uml2.uml.Interface;
+import org.eclipse.uml2.uml.Lifeline;
 import org.eclipse.uml2.uml.NamedElement;
 import org.eclipse.uml2.uml.Node;
 import org.eclipse.uml2.uml.ObjectFlow;
@@ -142,6 +145,7 @@
     // TODO: This should be built by reflection from the metamodel - tfm
     //       Update for UML 2.x metamodel if not replaced by reflection
     private static final Class[][] VALID_CONNECTIONS = {
+        {Connector.class,  Lifeline.class, },
         {Generalization.class,   Classifier.class, },
         {ComponentRealization.class, Element.class, Component.class},
         {Dependency.class,       Element.class, },
@@ -202,7 +206,10 @@
 
         Object connection = null;
 
-        if (elementType == metaTypes.getAssociation()) {
+        if (elementType == metaTypes.getAssociationRole()) {
+            connection =
+                
Model.getCollaborationsFactory().buildAssociationRole(fromElement, toElement);
+        } else if (elementType == metaTypes.getAssociation()) {
             // Note for UML2 the aggregation ends are swapped
             connection = modelImpl.getCoreFactory().buildAssociation(
                     (Classifier) fromElement, (AggregationKind) toStyle,

Modified: 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java?view=diff&pathrev=19420&r1=19419&r2=19420
==============================================================================
--- 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java   
    (original)
+++ 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java   
    2011-05-13 10:55:36-0700
@@ -423,10 +423,18 @@
         return false;
     }
 
+    public boolean isAConnector(Object handle) {
+        return false;
+    }
+
+    public boolean isAConnectorEnd(Object handle) {
+        return false;
+    }    
+    
     public boolean isAConstraint(Object handle) {
         return handle instanceof Constraint;
     }
-
+    
     public boolean isACreateAction(Object handle) {
         return handle instanceof CreateAction;
     }
@@ -685,6 +693,9 @@
         return illegalArgumentObject(handle);
     }
 
+    public Object getLifeline(Object handle) {
+        throw new NotImplementedException("Not a UML1.4 element");
+    }
 
     public Object getLink(Object handle) {
         try {

Modified: 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MetaTypesMDRImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MetaTypesMDRImpl.java?view=diff&pathrev=19420&r1=19419&r2=19420
==============================================================================
--- 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MetaTypesMDRImpl.java
    (original)
+++ 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MetaTypesMDRImpl.java
    2011-05-13 10:55:36-0700
@@ -336,6 +336,10 @@
         return CompositeState.class;
     }
     
+    public Object getConnector() {
+        throw new NotImplementedException("This is not a UML1.4 class");
+    }
+
     public Object getConstraint() {
         return Constraint.class;
     }

Modified: trunk/src/argouml-core-model/src/org/argouml/model/Facade.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/Facade.java?view=diff&pathrev=19420&r1=19419&r2=19420
==============================================================================
--- trunk/src/argouml-core-model/src/org/argouml/model/Facade.java      
(original)
+++ trunk/src/argouml-core-model/src/org/argouml/model/Facade.java      
2011-05-13 10:55:36-0700
@@ -481,6 +481,22 @@
     boolean isAComponentRealization(Object handle);
 
     /**
+     * Recognizer for Connector.
+     *
+     * @param handle candidate
+     * @return true if handle is a Connector
+     */
+    public boolean isAConnector(Object handle);
+
+    /**
+     * Recognizer for ConnectorEnd.
+     *
+     * @param handle candidate
+     * @return true if handle is a ConnectorEnd
+     */
+    public boolean isAConnectorEnd(Object handle);
+    
+    /**
      * Recognizer for Constraint.
      *
      * @param handle candidate
@@ -981,6 +997,14 @@
      * @return Instance or ClassifierRole
      */
     Object getReceiver(Object handle);
+    
+    /**
+     * Return the Lifeline belonging to the given ConnectionEnd.
+     *
+     * @param handle the ConnectionEnd
+     * @return the Lifeline
+     */
+    Object getLifeline(Object handle);
 
     /**
      * Return the Link belonging to the given LinkEnd.

Modified: trunk/src/argouml-core-model/src/org/argouml/model/MetaTypes.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/MetaTypes.java?view=diff&pathrev=19420&r1=19419&r2=19420
==============================================================================
--- trunk/src/argouml-core-model/src/org/argouml/model/MetaTypes.java   
(original)
+++ trunk/src/argouml-core-model/src/org/argouml/model/MetaTypes.java   
2011-05-13 10:55:36-0700
@@ -240,6 +240,11 @@
     Object getControlFlow();
     
     /**
+     * @return Returns the Connector class for UML2
+     */
+    Object getConnector();
+    
+    /**
      * @return Returns the CreateAction.
      */
     Object getCreateAction();

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2735849

To unsubscribe from this discussion, e-mail: 
[[email protected]].

Reply via email to