Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoratichenko2014-10-06 10:38:35 +0000
committerRemi Schnekenburger2014-11-06 09:20:09 +0000
commit52e499da81535aab544852157a85293478a9b905 (patch)
tree6afee4d102aef226a04c6d1d10bf38a35a80741b
parent8237c87ab58c3811e6e056effabd24203f815d10 (diff)
downloadorg.eclipse.papyrus-52e499da81535aab544852157a85293478a9b905.tar.gz
org.eclipse.papyrus-52e499da81535aab544852157a85293478a9b905.tar.xz
org.eclipse.papyrus-52e499da81535aab544852157a85293478a9b905.zip
Bug 428055 - navigate>restore related elements does not work for
associations Change-Id: If2c5689d3468105cfd6ad686ec553025b4a4f552 Signed-off-by: atichenko <ticher777@gmail.com>
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/edit/commands/RestoreRelatedLinksCommand.java3
-rw-r--r--plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/edit/part/CustomUMLDiagramUpdater.java83
2 files changed, 85 insertions, 1 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/edit/commands/RestoreRelatedLinksCommand.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/edit/commands/RestoreRelatedLinksCommand.java
index 012e50cb9c9..719575bad4b 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/edit/commands/RestoreRelatedLinksCommand.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/edit/commands/RestoreRelatedLinksCommand.java
@@ -143,7 +143,8 @@ public class RestoreRelatedLinksCommand extends AbstractTransactionalCommand {
if (sourceEditPart == null || targetEditPart == null) {
continue;
}
- CreateConnectionViewRequest.ConnectionViewDescriptor descriptor = new CreateConnectionViewRequest.ConnectionViewDescriptor(nextLinkDescriptor.getSemanticAdapter(), null, ViewUtil.APPEND, false, host.getDiagramPreferencesHint());
+ CreateConnectionViewRequest.ConnectionViewDescriptor descriptor = new CreateConnectionViewRequest.ConnectionViewDescriptor(nextLinkDescriptor.getSemanticAdapter(), String.valueOf(nextLinkDescriptor.getVisualID()), ViewUtil.APPEND, false,
+ host.getDiagramPreferencesHint());
CreateConnectionViewRequest ccr = new CreateConnectionViewRequest(descriptor);
ccr.setType(org.eclipse.gef.RequestConstants.REQ_CONNECTION_START);
ccr.setSourceEditPart(sourceEditPart);
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/edit/part/CustomUMLDiagramUpdater.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/edit/part/CustomUMLDiagramUpdater.java
index 0b03e686441..f52c3cc1794 100644
--- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/edit/part/CustomUMLDiagramUpdater.java
+++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/edit/part/CustomUMLDiagramUpdater.java
@@ -14,11 +14,13 @@
package org.eclipse.papyrus.uml.diagram.clazz.custom.edit.part;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.emf.core.util.CrossReferenceAdapter;
import org.eclipse.papyrus.uml.diagram.clazz.edit.parts.AssociationEditPart;
import org.eclipse.papyrus.uml.diagram.clazz.part.UMLDiagramUpdater;
import org.eclipse.papyrus.uml.diagram.clazz.part.UMLLinkDescriptor;
@@ -66,4 +68,85 @@ public class CustomUMLDiagramUpdater extends UMLDiagramUpdater {
}
return result;
}
+
+ @Override
+ protected Collection<UMLLinkDescriptor> getIncomingTypeModelFacetLinks_Association_4001(Type target, CrossReferenceAdapter crossReferencer) {
+ return new TypeModelFacetLinksRetriever_Association_4001(target) {
+
+ @Override
+ protected boolean check(Type source, Type target) {
+ return getRoot() == target;
+ }
+ }.getTypeModelFacetLinks_Association_4001();
+ }
+
+ @Override
+ protected Collection<UMLLinkDescriptor> getOutgoingTypeModelFacetLinks_Association_4001(Type source) {
+ return new TypeModelFacetLinksRetriever_Association_4001(source) {
+
+ @Override
+ protected boolean check(Type source, Type target) {
+ return getRoot() == source;
+ }
+ }.getTypeModelFacetLinks_Association_4001();
+ }
+
+ private abstract static class TypeModelFacetLinksRetriever_Association_4001 {
+ private final Type myRoot;
+
+ public TypeModelFacetLinksRetriever_Association_4001(Type root) {
+ myRoot = root;
+ }
+
+ public Collection<UMLLinkDescriptor> getTypeModelFacetLinks_Association_4001() {
+ Package container = null;
+ // Find container element for the link.
+ // Climb up by containment hierarchy starting from the source
+ // and return the first element that is instance of the container class.
+ for (EObject element = myRoot; element != null && container == null; element = element.eContainer()) {
+ if (element instanceof Package) {
+ container = (Package) element;
+ }
+ }
+ if (container == null) {
+ return Collections.emptyList();
+ }
+ LinkedList<UMLLinkDescriptor> result = new LinkedList<UMLLinkDescriptor>();
+ for (Iterator<?> links = container.getPackagedElements().iterator(); links.hasNext();) {
+ EObject linkObject = (EObject) links.next();
+ if (false == linkObject instanceof Association) {
+ continue;
+ }
+ Association link = (Association) linkObject;
+ if (AssociationEditPart.VISUAL_ID != UMLVisualIDRegistry.getLinkWithClassVisualID(link)) {
+ continue;
+ }
+ List<?> ends = link.getEndTypes();
+ if (ends == null || ends.isEmpty()) {
+ continue;
+ }
+ Object theTarget = ends.size() == 2 ? ends.get(1) : ends.get(0);
+ if (false == theTarget instanceof Type) {
+ continue;
+ }
+ Type dst = (Type) theTarget;
+ Object theSource = ends.get(0);
+ if (false == theSource instanceof Type) {
+ continue;
+ }
+ Type src = (Type) theSource;
+ if (!check(src, dst)) {
+ continue;
+ }
+ result.add(new UMLLinkDescriptor(src, dst, link, UMLElementTypes.Association_4001, AssociationEditPart.VISUAL_ID));
+ }
+ return result;
+ }
+
+ protected Type getRoot() {
+ return myRoot;
+ }
+
+ protected abstract boolean check(Type source, Type target);
+ }
}

Back to the top