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]].
