diff options
Diffstat (limited to 'plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/NodeOperations.java')
-rw-r--r-- | plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/NodeOperations.java | 79 |
1 files changed, 77 insertions, 2 deletions
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/NodeOperations.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/NodeOperations.java index 6c32c357..961c4336 100644 --- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/NodeOperations.java +++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/operations/NodeOperations.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007 IBM Corporation and others. + * Copyright (c) 2005, 2008 IBM Corporation, Embarcadero Technologies, and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,8 +7,9 @@ * * Contributors: * IBM - initial API and implementation + * Kenn Hussey (Embarcadero Technologies) - 205188 * - * $Id: NodeOperations.java,v 1.6 2007/05/03 21:11:51 khussey Exp $ + * $Id: NodeOperations.java,v 1.7 2008/01/09 18:56:10 khussey Exp $ */ package org.eclipse.uml2.uml.internal.operations; @@ -17,8 +18,18 @@ import java.util.Map; import org.eclipse.emf.common.util.BasicDiagnostic; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.common.util.DiagnosticChain; +import org.eclipse.emf.common.util.ECollections; +import org.eclipse.emf.common.util.UniqueEList; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.uml2.uml.AggregationKind; +import org.eclipse.uml2.uml.Association; +import org.eclipse.uml2.uml.CommunicationPath; import org.eclipse.uml2.uml.Node; +import org.eclipse.uml2.uml.Property; +import org.eclipse.uml2.uml.UMLPackage; import org.eclipse.uml2.uml.util.UMLValidator; @@ -31,6 +42,8 @@ import org.eclipse.uml2.uml.util.UMLValidator; * The following operations are supported: * <ul> * <li>{@link org.eclipse.uml2.uml.Node#validateInternalStructure(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Internal Structure</em>}</li> + * <li>{@link org.eclipse.uml2.uml.Node#createCommunicationPath(boolean, org.eclipse.uml2.uml.AggregationKind, java.lang.String, int, int, org.eclipse.uml2.uml.Node, boolean, org.eclipse.uml2.uml.AggregationKind, java.lang.String, int, int) <em>Create Communication Path</em>}</li> + * <li>{@link org.eclipse.uml2.uml.Node#getCommunicationPaths() <em>Get Communication Paths</em>}</li> * </ul> * </p> * @@ -83,4 +96,66 @@ public class NodeOperations return true; } + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * <!-- begin-model-doc --> + * Creates a (binary) communication path between this node and the specified other node, with the specified navigabilities, aggregations, names, lower bounds, and upper bounds, and owned by this node's nearest package. + * @param node The receiving '<em><b>Node</b></em>' model object. + * @param end1IsNavigable The navigability for the first end of the new communication path. + * @param end1Aggregation The aggregation for the first end of the new communication path. + * @param end1Name The name for the first end of the new communication path. + * @param end1Lower The lower bound for the first end of the new communication path. + * @param end1Upper The upper bound for the first end of the new communication path. + * @param end1Node The type for the first end of the new communication path. + * @param end2IsNavigable The navigability for the second end of the new communication path. + * @param end2Aggregation The aggregation for the second end of the new communication path. + * @param end2Name The name for the second end of the new communication path. + * @param end2Lower The lower bound for the second end of the new communication path. + * @param end2Upper The upper bound for the second end of the new communication path. + * <!-- end-model-doc --> + * @generated NOT + */ + public static CommunicationPath createCommunicationPath(Node node, + boolean end1IsNavigable, AggregationKind end1Aggregation, + String end1Name, int end1Lower, int end1Upper, Node end1Node, + boolean end2IsNavigable, AggregationKind end2Aggregation, + String end2Name, int end2Lower, int end2Upper) { + return (CommunicationPath) TypeOperations.createAssociation(node, + end1IsNavigable, end1Aggregation, end1Name, end1Lower, end1Upper, + end1Node, end2IsNavigable, end2Aggregation, end2Name, end2Lower, + end2Upper, UMLPackage.Literals.COMMUNICATION_PATH); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * <!-- begin-model-doc --> + * Retrieves the communication paths in which this node is involved. + * @param node The receiving '<em><b>Node</b></em>' model object. + * <!-- end-model-doc --> + * @generated NOT + */ + public static EList<CommunicationPath> getCommunicationPaths(Node node) { + EList<CommunicationPath> communicationPaths = new UniqueEList.FastCompare<CommunicationPath>(); + + for (EStructuralFeature.Setting nonNavigableInverseReference : getNonNavigableInverseReferences(node)) { + + if (nonNavigableInverseReference.getEStructuralFeature() == UMLPackage.Literals.TYPED_ELEMENT__TYPE) { + EObject eObject = nonNavigableInverseReference.getEObject(); + + if (eObject instanceof Property) { + Association association = ((Property) eObject) + .getAssociation(); + + if (association instanceof CommunicationPath) { + communicationPaths.add((CommunicationPath) association); + } + } + } + } + + return ECollections.unmodifiableEList(communicationPaths); + } + } // NodeOperations
\ No newline at end of file |