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.