Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.etrice.ui.common.base/src')
-rw-r--r--plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramReferenceUpdater.xtend79
-rw-r--r--plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramRenameParticipant.java2
-rw-r--r--plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/resource/DiagramResource.java3
-rw-r--r--plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/DiagramAccessBase.java2
4 files changed, 84 insertions, 2 deletions
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramReferenceUpdater.xtend b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramReferenceUpdater.xtend
new file mode 100644
index 000000000..d2502b191
--- /dev/null
+++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramReferenceUpdater.xtend
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * CONTRIBUTORS:
+ * Juergen Haug (initial contribution)
+ *
+ *******************************************************************************/
+
+package org.eclipse.etrice.ui.common.base.refactoring
+
+import org.eclipse.core.runtime.IProgressMonitor
+import org.eclipse.xtext.resource.IReferenceDescription
+import org.eclipse.xtext.ui.refactoring.ElementRenameArguments
+import org.eclipse.xtext.ui.refactoring.IRefactoringUpdateAcceptor
+import org.eclipse.xtext.ui.refactoring.impl.EmfResourceReferenceUpdater
+import com.google.common.collect.Multimap
+import org.eclipse.emf.common.util.URI
+import org.eclipse.emf.ecore.resource.ResourceSet
+import org.eclipse.graphiti.mm.pictograms.Diagram
+import org.eclipse.graphiti.services.Graphiti
+import org.eclipse.emf.ecore.util.EcoreUtil
+import org.eclipse.etrice.core.fsm.fSM.ModelComponent
+import com.google.inject.Inject
+import org.eclipse.etrice.ui.common.base.support.DiagramAccessBase
+import org.eclipse.graphiti.ui.internal.GraphitiUIPlugin
+import org.eclipse.graphiti.internal.GraphitiPlugin
+import org.eclipse.xtext.ui.refactoring.impl.EmfResourceChangeUtil
+import org.eclipse.ltk.core.refactoring.resource.RenameResourceChange
+import org.eclipse.etrice.core.common.scoping.StandardModelLocator
+import org.eclipse.core.runtime.Path
+import org.eclipse.core.runtime.Platform
+import org.eclipse.core.resources.ResourcesPlugin
+import com.google.common.collect.Multimaps
+import com.google.common.collect.MultimapBuilder
+import com.google.common.collect.ArrayListMultimap
+
+/**
+ * Update diagrams in case of xtext rename refactoring
+ */
+class DiagramReferenceUpdater extends EmfResourceReferenceUpdater {
+
+ @Inject DiagramAccessBase diagramAccess
+ @Inject EmfResourceChangeUtil changeUtil
+
+
+ override protected createReferenceUpdates(ElementRenameArguments elementRenameArguments, Multimap<URI, IReferenceDescription> resource2references, ResourceSet resourceSet, IRefactoringUpdateAcceptor updateAcceptor, IProgressMonitor monitor) {
+
+ //-- update references in diagrams
+ super.createReferenceUpdates(elementRenameArguments, resource2references, resourceSet, updateAcceptor, monitor)
+
+ //-- rename diagrams
+ val diagramMap = ArrayListMultimap.create => [map |
+ // there could be several (orphaned) diagrams for one ActorClass
+ resource2references.keySet.map[uri | resourceSet.getResource(uri, false)].map[contents].flatten.filter(Diagram).forEach[diagram |
+ map.put(diagram.link.businessObjects.head, diagram)
+ ]
+ ]
+ elementRenameArguments.renamedElementURIs.map[origURI | resourceSet.getEObject(elementRenameArguments.getNewElementURI(origURI), false)].filter(ModelComponent).forEach[mc |
+ val wsDiagrams = diagramMap.get(mc).filter[eResource.URI.isPlatformResource].toList
+ val newFileName = diagramAccess.getDigramFileName(mc)
+
+ val workspaceRoot = ResourcesPlugin.workspace.root
+ val parents = wsDiagrams.groupBy[workspaceRoot.getFile(new Path(eResource.URI.segmentsList.tail.join('/'))).parent]
+ parents.forEach[parent, diagrams |
+ // avoid file name conflicts => choose latest modified
+ val diagram = diagrams.maxBy[eResource.timeStamp]
+ val diagFile = workspaceRoot.getFile(new Path(diagram.eResource.URI.segmentsList.tail.join('/')))
+ updateAcceptor.accept(diagram.eResource.URI, new RenameResourceChange(diagFile.fullPath, newFileName))
+ // TODO update name of diagram
+ ]
+ ]
+
+ }
+
+}
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramRenameParticipant.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramRenameParticipant.java
index 3c03dee42..631f0c64e 100644
--- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramRenameParticipant.java
+++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramRenameParticipant.java
@@ -62,7 +62,7 @@ public class DiagramRenameParticipant extends RenameParticipant {
private static String[] diagramEditorsIds;
static {
- IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor("org.eclipse.etrice.ui.common.refactoring.rename");
+ IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor("org.eclipse.etrice.ui.common.base.refactoring.rename");
diagramExtensions = new String[elements.length];
diagramEditorsIds = new String[elements.length];
for(int i=0;i<elements.length;i++){
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/resource/DiagramResource.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/resource/DiagramResource.java
index 2ee928879..d17c34742 100644
--- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/resource/DiagramResource.java
+++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/resource/DiagramResource.java
@@ -21,6 +21,9 @@ import org.eclipse.etrice.core.common.scoping.RelativeFileURIHandler;
import com.google.common.collect.Maps;
+/**
+ * Customize load/save of diagram resources, e.g. serialized URIs to .room.
+ */
public class DiagramResource extends XMIResourceImpl {
public DiagramResource() {
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/DiagramAccessBase.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/DiagramAccessBase.java
index 232d0ae90..d380b3c07 100644
--- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/DiagramAccessBase.java
+++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/DiagramAccessBase.java
@@ -245,7 +245,7 @@ public abstract class DiagramAccessBase {
public abstract String getDiagramName(EObject rootObject);
public abstract IBulkDiagramExporter getDiagramExporter();
- abstract protected String getDigramFileName(EObject rootObject);
+ public abstract String getDigramFileName(EObject rootObject);
abstract protected String getDiagramTypeId();
abstract protected String getEditorId();
abstract protected Command getInitialCommand(EObject rootObject, Diagram diagram, TransactionalEditingDomain editingDomain);

Back to the top