svn commit: r19420 - trunk/src: argouml-core-model-euml/src/org/argouml/model/euml argouml-core-model-mdr/src/org/argouml/model/mdr argouml-core-model/src/org/argouml/model

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
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]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.