Переглянути джерело

(Performance)semantic uri is stored in the marker instead of notation

Andreas Muelder 8 роки тому
батько
коміт
0f5cd38b9a

+ 2 - 30
plugins/org.yakindu.sct.model.sgraph.ui/src/org/yakindu/sct/model/sgraph/ui/validation/SCTDiagnosticConverterImpl.java

@@ -10,15 +10,8 @@
  */
 package org.yakindu.sct.model.sgraph.ui.validation;
 
-import java.util.Collection;
-
 import org.eclipse.emf.common.util.Diagnostic;
-import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.gmf.runtime.notation.Diagram;
-import org.eclipse.gmf.runtime.notation.NotationPackage;
-import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.xtext.EcoreUtil2;
 import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
 import org.eclipse.xtext.util.IAcceptor;
@@ -45,12 +38,8 @@ public class SCTDiagnosticConverterImpl extends DiagnosticConverterImpl {
 							eObject = EcoreUtil2.getContainerOfType(eObject, SpecificationElement.class);
 						}
 						if (eObject != null && eObject.eResource() != null) {
-							View notationView = findNotationView(eObject);
-							if (notationView != null && notationView.eResource() != null) {
-								acceptor.accept(
-										new SCTIssue(t, notationView.eResource().getURIFragment(notationView)));
-								notAccepted = false;
-							}
+							acceptor.accept(new SCTIssue(t, eObject.eResource().getURIFragment(eObject)));
+							notAccepted = false;
 						}
 					}
 				}
@@ -61,21 +50,4 @@ public class SCTDiagnosticConverterImpl extends DiagnosticConverterImpl {
 		});
 	}
 
-	protected View findNotationView(EObject semanticElement) {
-		Collection<Diagram> objects = EcoreUtil.getObjectsByType(semanticElement.eResource().getContents(),
-				NotationPackage.Literals.DIAGRAM);
-		for (Diagram diagram : objects) {
-			TreeIterator<EObject> eAllContents = diagram.eAllContents();
-			while (eAllContents.hasNext()) {
-				EObject next = eAllContents.next();
-				if (next instanceof View) {
-					if (((View) next).getElement() == semanticElement) {
-						return ((View) next);
-					}
-				}
-			}
-		}
-		return null;
-	}
-
 }

+ 5 - 5
plugins/org.yakindu.sct.model.sgraph.ui/src/org/yakindu/sct/model/sgraph/ui/validation/SCTIssue.java

@@ -25,15 +25,15 @@ public class SCTIssue extends IssueImpl {
 
 	private final Issue delegate;
 
-	private final String notationViewURI;
+	private final String semanticURI;
 
-	public SCTIssue(final Issue delegate, String notationViewURI) {
+	public SCTIssue(final Issue delegate, String semanticURI) {
 		this.delegate = delegate;
-		this.notationViewURI = notationViewURI;
+		this.semanticURI = semanticURI;
 	}
 
-	public String getNotationViewURI() {
-		return notationViewURI;
+	public String getSemanticURI() {
+		return semanticURI;
 	}
 
 	public Severity getSeverity() {

+ 1 - 1
plugins/org.yakindu.sct.model.sgraph.ui/src/org/yakindu/sct/model/sgraph/ui/validation/SCTMarkerCreator.java

@@ -29,7 +29,7 @@ public class SCTMarkerCreator extends MarkerCreator {
 	protected void setMarkerAttributes(Issue issue, IResource resource, IMarker marker) throws CoreException {
 		super.setMarkerAttributes(issue, resource, marker);
 		if (issue instanceof SCTIssue) {
-			marker.setAttribute(ELEMENT_ID, ((SCTIssue) issue).getNotationViewURI());
+			marker.setAttribute(ELEMENT_ID, ((SCTIssue) issue).getSemanticURI());
 		}
 	}
 

+ 30 - 6
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/providers/StatechartMarkerNavigationProvider.java

@@ -11,13 +11,16 @@
 package org.yakindu.sct.ui.editor.providers;
 
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.requests.DirectEditRequest;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
@@ -26,6 +29,7 @@ import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
 import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
 import org.eclipse.gmf.runtime.emf.ui.providers.marker.AbstractModelMarkerNavigationProvider;
 import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.xtext.EcoreUtil2;
 import org.yakindu.base.xtext.utils.gmf.directedit.IXtextAwareEditPart;
@@ -49,15 +53,19 @@ public class StatechartMarkerNavigationProvider extends AbstractModelMarkerNavig
 			return;
 		}
 		DiagramEditor editor = (DiagramEditor) getEditor();
-		View targetView = (View) editor.getDiagram().eResource().getEObject(elementId);
-		if (targetView == null) {
+		EObject targetElement = (EObject) editor.getDiagram().eResource().getEObject(elementId);
+		if (targetElement == null) {
 			return;
 		}
-		Diagram element = DiagramPartitioningUtil.getDiagramContaining(targetView.getElement());
+		View view = findNotationView(targetElement);
+		if (view == null) {
+			return;
+		}
+		Diagram element = DiagramPartitioningUtil.getDiagramContaining(view.getElement());
 		editor = (DiagramEditor) DiagramPartitioningUtil.openEditor(element);
 		Map editPartRegistry = editor.getDiagramGraphicalViewer().getEditPartRegistry();
 
-		EditPart targetEditPart = (EditPart) editPartRegistry.get(targetView);
+		EditPart targetEditPart = (EditPart) editPartRegistry.get(view);
 		if (targetEditPart != null) {
 			selectElementsInDiagram(editor, Arrays.asList(new EditPart[] { targetEditPart }));
 		}
@@ -67,7 +75,7 @@ public class StatechartMarkerNavigationProvider extends AbstractModelMarkerNavig
 			if (type.equals(SCT_MARKER_TYPE)) {
 				final DirectEditRequest request = new DirectEditRequest();
 				request.setDirectEditFeature(SGraphPackage.eINSTANCE.getSpecificationElement_Specification());
-				List<EObject> allNotationElements = EcoreUtil2.eAllContentsAsList(targetView);
+				List<EObject> allNotationElements = EcoreUtil2.eAllContentsAsList(view);
 				for (EObject eObject : allNotationElements) {
 					if (eObject instanceof View) {
 						IGraphicalEditPart editPart = (IGraphicalEditPart) editPartRegistry.get(eObject);
@@ -80,10 +88,26 @@ public class StatechartMarkerNavigationProvider extends AbstractModelMarkerNavig
 		} catch (CoreException e) {
 			e.printStackTrace();
 		}
+	}
 
+	protected View findNotationView(EObject semanticElement) {
+		Collection<Diagram> objects = EcoreUtil.getObjectsByType(semanticElement.eResource().getContents(),
+				NotationPackage.Literals.DIAGRAM);
+		for (Diagram diagram : objects) {
+			TreeIterator<EObject> eAllContents = diagram.eAllContents();
+			while (eAllContents.hasNext()) {
+				EObject next = eAllContents.next();
+				if (next instanceof View) {
+					if (((View) next).getElement() == semanticElement) {
+						return ((View) next);
+					}
+				}
+			}
+		}
+		return null;
 	}
 
-	public static void selectElementsInDiagram(IDiagramWorkbenchPart diagramPart, List<EditPart> editParts) {
+	public void selectElementsInDiagram(IDiagramWorkbenchPart diagramPart, List<EditPart> editParts) {
 		diagramPart.getDiagramGraphicalViewer().deselectAll();
 
 		EditPart firstPrimary = null;

+ 7 - 7
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/providers/StatechartValidationDecorationProvider.java

@@ -17,7 +17,6 @@ import org.eclipse.draw2d.Label;
 import org.eclipse.gef.EditDomain;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.editparts.AbstractConnectionEditPart;
-import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IPrimaryEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditDomain;
@@ -53,7 +52,8 @@ public class StatechartValidationDecorationProvider extends AbstractDecoratorPro
 
 	public void createDecorators(IDecoratorTarget decoratorTarget) {
 		EditPart editPart = (EditPart) decoratorTarget.getAdapter(EditPart.class);
-		if (editPart instanceof GraphicalEditPart || editPart instanceof AbstractConnectionEditPart) {
+		if (editPart instanceof IPrimaryEditPart
+				&& (editPart instanceof GraphicalEditPart || editPart instanceof AbstractConnectionEditPart)) {
 			EditDomain ed = editPart.getViewer().getEditDomain();
 			if (!(ed instanceof DiagramEditDomain)) {
 				return;
@@ -83,7 +83,7 @@ public class StatechartValidationDecorationProvider extends AbstractDecoratorPro
 	public static class ValidationDecorator extends AbstractDecorator implements IResourceIssueStoreListener {
 
 		private IValidationIssueStore store;
-		private String elementId;
+		private String semanticID;
 
 		public ValidationDecorator(IDecoratorTarget decoratorTarget, IValidationIssueStore store) {
 			super(decoratorTarget);
@@ -95,7 +95,7 @@ public class StatechartValidationDecorationProvider extends AbstractDecoratorPro
 			if (view == null || view.eResource() == null) {
 				return;
 			}
-			elementId = ViewUtil.getIdStr(view);
+			semanticID = view.getElement().eResource().getURIFragment(view.getElement());
 			removeDecoration();
 			EditPart editPart = (EditPart) getDecoratorTarget().getAdapter(EditPart.class);
 			if (editPart == null || editPart.getViewer() == null || !(editPart instanceof IPrimaryEditPart)) {
@@ -113,7 +113,7 @@ public class StatechartValidationDecorationProvider extends AbstractDecoratorPro
 		}
 
 		protected void decorate(View view) {
-			List<SCTIssue> issues = store.getIssues(elementId);
+			List<SCTIssue> issues = store.getIssues(semanticID);
 			Severity severity = Severity.INFO;
 			Label toolTip = null;
 			if (issues.isEmpty())
@@ -171,8 +171,8 @@ public class StatechartValidationDecorationProvider extends AbstractDecoratorPro
 		}
 
 		@Override
-		public String getNotationURI() {
-			return elementId;
+		public String getSemanticURI() {
+			return semanticID;
 		}
 	}
 }

+ 12 - 10
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/validation/DefaultValidationIssueStore.java

@@ -52,7 +52,7 @@ public class DefaultValidationIssueStore implements IValidationIssueStore, IFile
 	private IssueUtil issueCreator;
 
 	private List<IResourceIssueStoreListener> listener;
-	// the URI of the notation element
+	// the URI of the semantic element
 	private Multimap<String, SCTIssue> persistentIssues;
 	private Multimap<String, SCTIssue> liveIssues;
 	private boolean connected = false;
@@ -85,16 +85,18 @@ public class DefaultValidationIssueStore implements IValidationIssueStore, IFile
 
 	protected void notifyListeners() {
 		synchronized (this.listener) {
+			System.out.println("Size " + this.listener.size());
 			for (IResourceIssueStoreListener iResourceIssueStoreListener : listener) {
 				iResourceIssueStoreListener.issuesChanged();
 			}
 		}
 	}
 
-	protected void notifyListeners(String notationURI) {
+	protected void notifyListeners(String semanticURI) {
 		synchronized (this.listener) {
+			System.out.println("Size " + this.listener.size());
 			for (IResourceIssueStoreListener iResourceIssueStoreListener : listener) {
-				if (notationURI.equals(iResourceIssueStoreListener.getNotationURI()))
+				if (semanticURI.equals(iResourceIssueStoreListener.getSemanticURI()))
 					iResourceIssueStoreListener.issuesChanged();
 			}
 		}
@@ -126,7 +128,7 @@ public class DefaultValidationIssueStore implements IValidationIssueStore, IFile
 		}
 		for (IMarker iMarker : markers) {
 			SCTIssue issue = createFromMarker(iMarker);
-			persistentIssues.put(issue.getNotationViewURI(), issue);
+			persistentIssues.put(issue.getSemanticURI(), issue);
 		}
 		notifyListeners();
 	}
@@ -142,9 +144,9 @@ public class DefaultValidationIssueStore implements IValidationIssueStore, IFile
 	}
 
 	protected SCTIssue createFromMarker(IMarker marker) {
-		String notationURI = marker.getAttribute(org.eclipse.gmf.runtime.common.ui.resources.IMarker.ELEMENT_ID, "");
+		String semanticURI = marker.getAttribute(org.eclipse.gmf.runtime.common.ui.resources.IMarker.ELEMENT_ID, "");
 		Issue delegate = issueCreator.createIssue(marker);
-		SCTIssue issue = new SCTIssue(delegate, notationURI);
+		SCTIssue issue = new SCTIssue(delegate, semanticURI);
 		return issue;
 	}
 
@@ -153,8 +155,8 @@ public class DefaultValidationIssueStore implements IValidationIssueStore, IFile
 		liveIssues.clear();
 		for (Issue issue : issues) {
 			if (issue instanceof SCTIssue) {
-				String notationViewURI = ((SCTIssue) issue).getNotationViewURI();
-				liveIssues.put(notationViewURI, (SCTIssue) issue);
+				String semanticURI = ((SCTIssue) issue).getSemanticURI();
+				liveIssues.put(semanticURI, (SCTIssue) issue);
 			}
 		}
 		notifyListeners();
@@ -186,8 +188,8 @@ public class DefaultValidationIssueStore implements IValidationIssueStore, IFile
 	@Override
 	public void handleMarkerAdded(IMarker marker) {
 		SCTIssue issue = createFromMarker(marker);
-		persistentIssues.put(issue.getNotationViewURI(), issue);
-		notifyListeners(issue.getNotationViewURI());
+		persistentIssues.put(issue.getSemanticURI(), issue);
+		notifyListeners(issue.getSemanticURI());
 	}
 
 	@Override

+ 1 - 1
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/validation/IValidationIssueStore.java

@@ -31,7 +31,7 @@ public interface IValidationIssueStore extends IValidationIssueProcessor {
 
 		public void issuesChanged();
 		
-		public String getNotationURI();
+		public String getSemanticURI();
 
 	}