Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Fasani2018-01-03 17:54:29 +0000
committerLaurent Fasani2018-01-29 15:10:31 +0000
commit734ac9d4e8c775f0ad7aeae0f6712059050a693a (patch)
tree9e1c8d50a2dfe0b517d0e9deb3e8b4c06d55cd81
parent2b528103c22e87f404f92ebb6b2a399a52eb8362 (diff)
downloadorg.eclipse.sirius-734ac9d4e8c775f0ad7aeae0f6712059050a693a.tar.gz
org.eclipse.sirius-734ac9d4e8c775f0ad7aeae0f6712059050a693a.tar.xz
org.eclipse.sirius-734ac9d4e8c775f0ad7aeae0f6712059050a693a.zip
[522407] Allow to reload VSM from deployed plug-ins
* add a toolbar, in the eclipse main toolbar, and an action to reload the VSM of installed plug-ins. It is available only in runtime environment. * change * to *.ecore to "Model file Extension" of vpTest in v1.odesign and v2.odesign to fix test ViewpointSelectionTests. Bug: 522407 Change-Id: I361b4aeb37610829b69e73d2d197c62e1946189b Signed-off-by: Laurent Fasani <laurent.fasani@obeo.fr> Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.doc/doc/Release_Notes.html27
-rw-r--r--plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile7
-rw-r--r--plugins/org.eclipse.sirius.doc/doc/specifier/general/Specifying_Viewpoints.html15
-rw-r--r--plugins/org.eclipse.sirius.doc/doc/specifier/general/Specifying_Viewpoints.textile12
-rw-r--r--plugins/org.eclipse.sirius.editor/icons/full/obj16/reload_vsm.pngbin0 -> 727 bytes
-rw-r--r--plugins/org.eclipse.sirius.editor/plugin.properties4
-rw-r--r--plugins/org.eclipse.sirius.editor/plugin.xml31
-rw-r--r--plugins/org.eclipse.sirius.editor/src/org/eclipse/sirius/editor/tools/internal/commands/ReloadVSMHandler.java38
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/data/unit/comparator/vp1.odesign4
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/data/unit/comparator/vp2.odesign4
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/ViewpointSelectionTests.java11
-rw-r--r--plugins/org.eclipse.sirius/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/componentization/ViewpointRegistry.java15
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/componentization/ViewpointRegistryImpl.java (renamed from plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/componentization/ViewpointRegistryImpl.java)90
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/danalysis/SessionVSMUpdater.java19
15 files changed, 237 insertions, 41 deletions
diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
index e8a6f84af6..b0a3d737b7 100644
--- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
+++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
@@ -132,6 +132,11 @@
</li>
</ul>
<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> An action is added in main toolbar to reload the VSM of installed plug-ins that may have changed. Refer to the
+ <a href="specifier/general/Specifying_Viewpoints.html#reloadVSM">specifier documentation</a> for details.
+ </li>
+ </ul>
<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
<h4 id="Changesinorg.eclipse.sirius.common">Changes in
<code>org.eclipse.sirius.common</code>
@@ -143,6 +148,18 @@
<code>org.eclipse.sirius.common.tools.api.contentassist</code> which has its own types.
</li>
</ul>
+ <h4 id="Changesinorg.eclipse.sirius">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.business.api.componentization.ViewpointRegistry.reloadAllFromPlugins()</code> has been added to reload, from the runtime, all the VSMs of installed plug-ins and have the effect dynamically in the runtime.
+ </li>
+ <li><span class="label label-info">Modified</span> The class
+ <code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl()</code> has been moved to
+ <code>org.eclipse.sirius.business.internal.componentization</code> package.
+ </li>
+ </ul>
<h4 id="Migrations">Migrations</h4>
<h4 id="TranslationKeysChanges">Translation Keys Changes</h4>
<h2 id="sirius5.1.1">Changes in Sirius 5.1.1</h2>
@@ -170,7 +187,7 @@
</li>
</ul>
<h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
- <h4 id="Changesinorg.eclipse.sirius">Changes in
+ <h4 id="Changesinorg.eclipse.sirius2">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -334,7 +351,7 @@
<code>createLocalRepresentationInSeparateResource</code> at true. For more detail, see the developer documentation:
<a href="./developer/representations_lazy_loading.html">Representations lazy loading (experimental)</a>.
</p>
- <h4 id="Changesinorg.eclipse.sirius2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius3">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -657,7 +674,7 @@
<code>org.eclipse.emf.edit.ui.celleditor.FeatureEditorDialog</code> equivalent provided by EMF directly instead.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius4">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -1360,7 +1377,7 @@ SWTBotUtils.waitAllUiEvents();
</ul>
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius4">Changes in
+ <h4 id="Changesinorg.eclipse.sirius5">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -1802,7 +1819,7 @@ SWTBotUtils.waitAllUiEvents();
<a href="developer/extensions-provide_custom_bundled_image_shape.html">developer documentation</a> for more details.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius5">Changes in
+ <h4 id="Changesinorg.eclipse.sirius6">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
index dce46562b3..c73183a98f 100644
--- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
+++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
@@ -12,12 +12,19 @@ h3. User-Visible Changes
h3. Specifier-Visible Changes
+* <span class="label label-success">Added</span> An action is added in main toolbar to reload the VSM of installed plug-ins that may have changed. Refer to the "specifier documentation":specifier/general/Specifying_Viewpoints.html#reloadVSM for details.
+
+
h3. Developer-Visible Changes
h4. Changes in @org.eclipse.sirius.common@
* <span class="label label-danger">Removed</span> The interface @org.eclipse.sirius.common.tools.api.interpreter.IExpressionProposal@ and its only implementation @DefaultExpressionProposal@ (in the same package) have been removed. They were not used anywhere, expression completion API is actually defined in package @org.eclipse.sirius.common.tools.api.contentassist@ which has its own types.
+h4. Changes in @org.eclipse.sirius@
+
+* <span class="label label-success">Added</span> The method @org.eclipse.sirius.business.api.componentization.ViewpointRegistry.reloadAllFromPlugins()@ has been added to reload, from the runtime, all the VSMs of installed plug-ins and have the effect dynamically in the runtime.
+* <span class="label label-info">Modified</span> The class @org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl()@ has been moved to @org.eclipse.sirius.business.internal.componentization@ package.
h4. Migrations
diff --git a/plugins/org.eclipse.sirius.doc/doc/specifier/general/Specifying_Viewpoints.html b/plugins/org.eclipse.sirius.doc/doc/specifier/general/Specifying_Viewpoints.html
index 2e9806cd6c..06ea5cd4bd 100644
--- a/plugins/org.eclipse.sirius.doc/doc/specifier/general/Specifying_Viewpoints.html
+++ b/plugins/org.eclipse.sirius.doc/doc/specifier/general/Specifying_Viewpoints.html
@@ -508,6 +508,21 @@
<br/></div>
</p>
<p>Note that Sirius does its best to take into account any change in the VSM, even for existing and opened representations. Sometimes, if the changes are too complex or in some corner cases not yet supported, you may need to close and reopen your representation, or in extreme case delete it and create a new one, in order to take the VSM changes into account properly.</p>
+ <h4 id="reloadVSM">Reload installed VSM</h4>
+ <p>Even though having your VSP in the runtime environment workspace is the best way to do dynamic development of your VSM, if your VSP is in the installed runtime plug-ins (that is the VSP plug-in is in the development environment workspace), you have the ability the reload it from your runtime to take external changes into account.
+ <br/>This is done with the
+ <em>Reload installed VSM</em> action from the main eclipse tool bar.
+ <br/>Click on
+ <em>Reload installed VSM</em> will have automatically effects in opened representations(depending on refresh options).
+ </p>
+ <p>
+ <em>Limitations</em>:
+ </p>
+ <ul>
+ <li>The action is available only if specifier plug-ins are installed.</li>
+ <li>The action is available only if the Eclipse Runtime is a started from PDE (that is, is not a stand alone application).</li>
+ <li>Only the VSM is reloaded. The java classes that may have been changed in the VSP are updated as normal java classes managed in debug mode.</li>
+ </ul>
<h3 id="migration">Migration from Previous Versions</h3>
<p>The
<em>Viewpoint Specification Model</em> can evolve between two versions of Sirius. The migration process is done automatically. That means all VSM are migrated at loading time without any action from the user. While a VSM is not saved, the automatic migration will be replayed at the next opening.
diff --git a/plugins/org.eclipse.sirius.doc/doc/specifier/general/Specifying_Viewpoints.textile b/plugins/org.eclipse.sirius.doc/doc/specifier/general/Specifying_Viewpoints.textile
index 896cf1cb97..308a6e0ce6 100644
--- a/plugins/org.eclipse.sirius.doc/doc/specifier/general/Specifying_Viewpoints.textile
+++ b/plugins/org.eclipse.sirius.doc/doc/specifier/general/Specifying_Viewpoints.textile
@@ -201,6 +201,18 @@ Keep both your representations and the VSM that define them open at the same tim
Note that Sirius does its best to take into account any change in the VSM, even for existing and opened representations. Sometimes, if the changes are too complex or in some corner cases not yet supported, you may need to close and reopen your representation, or in extreme case delete it and create a new one, in order to take the VSM changes into account properly.
+h4(#reloadVSM). Reload installed VSM
+
+Even though having your VSP in the runtime environment workspace is the best way to do dynamic development of your VSM, if your VSP is in the installed runtime plug-ins (that is the VSP plug-in is in the development environment workspace), you have the ability the reload it from your runtime to take external changes into account.
+This is done with the _Reload installed VSM_ action from the main eclipse tool bar.
+Click on _Reload installed VSM_ will have automatically effects in opened representations(depending on refresh options).
+
+_Limitations_:
+* The action is available only if specifier plug-ins are installed.
+* The action is available only if the Eclipse Runtime is a started from PDE (that is, is not a stand alone application).
+* Only the VSM is reloaded. The java classes that may have been changed in the VSP are updated as normal java classes managed in debug mode.
+
h3(#migration). Migration from Previous Versions
The _Viewpoint Specification Model_ can evolve between two versions of Sirius. The migration process is done automatically. That means all VSM are migrated at loading time without any action from the user. While a VSM is not saved, the automatic migration will be replayed at the next opening.
+
diff --git a/plugins/org.eclipse.sirius.editor/icons/full/obj16/reload_vsm.png b/plugins/org.eclipse.sirius.editor/icons/full/obj16/reload_vsm.png
new file mode 100644
index 0000000000..627d74579f
--- /dev/null
+++ b/plugins/org.eclipse.sirius.editor/icons/full/obj16/reload_vsm.png
Binary files differ
diff --git a/plugins/org.eclipse.sirius.editor/plugin.properties b/plugins/org.eclipse.sirius.editor/plugin.properties
index 91fb0c7c43..5d270b1081 100644
--- a/plugins/org.eclipse.sirius.editor/plugin.properties
+++ b/plugins/org.eclipse.sirius.editor/plugin.properties
@@ -365,4 +365,8 @@ properties.WidgetStyle = 1000
ServiceNavigator_targetInitialization_error=The service from expression {0} could not be opened with a Java editor. Make sure the service exists and its class is defined in the VSM as Java extension.
ServiceNavigator_serviceNavigationDialog_title=Service navigation
ServiceNavigator_serviceNavigationDialog_description=Select the class containing the service to edit.
+
+# on Main eclipse toolbar
+command.reloadVSM.name=Reload installed VSMs
+
#End of user code specific keys
diff --git a/plugins/org.eclipse.sirius.editor/plugin.xml b/plugins/org.eclipse.sirius.editor/plugin.xml
index b54781dcaf..1825ed596f 100644
--- a/plugins/org.eclipse.sirius.editor/plugin.xml
+++ b/plugins/org.eclipse.sirius.editor/plugin.xml
@@ -1368,6 +1368,11 @@
id="org.eclipse.sirius.editor.command.show.outline"
name="VSM Quick outline">
</command>
+ <command
+ categoryId="org.eclipse.ui.category.views"
+ id="org.eclipse.sirius.editor.reloadVSMCommand"
+ name="%command.reloadVSM.name">
+ </command>
</extension>
<extension
point="org.eclipse.ui.bindings">
@@ -1392,6 +1397,10 @@
class="org.eclipse.sirius.editor.tools.internal.commands.VSMQuickOutlineHandler"
commandId="org.eclipse.sirius.editor.command.show.outline">
</handler>
+ <handler
+ class="org.eclipse.sirius.editor.tools.internal.commands.ReloadVSMHandler"
+ commandId="org.eclipse.sirius.editor.reloadVSMCommand">
+ </handler>
</extension>
<extension
@@ -1400,6 +1409,26 @@
class="org.eclipse.sirius.editor.utils.WorkspaceClassLoading">
</override>
</extension>
+ <extension
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ allPopups="false"
+ locationURI="toolbar:org.eclipse.ui.main.toolbar">
+ <toolbar
+ id="org.eclipse.sirius.editor.reloadVSMtoolbar"
+ label="%command.reloadVSM.name">
+ <command
+ commandId="org.eclipse.sirius.editor.reloadVSMCommand"
+ icon="icons/full/obj16/reload_vsm.png"
+ label="%command.reloadVSM.name"
+ style="push">
+ <visibleWhen
+ checkEnabled="true">
+ </visibleWhen>
+ </command>
+ </toolbar>
+ </menuContribution>
+ </extension>
<!-- End of user code plugin.xml end specifics -->
-</plugin> \ No newline at end of file
+</plugin>
diff --git a/plugins/org.eclipse.sirius.editor/src/org/eclipse/sirius/editor/tools/internal/commands/ReloadVSMHandler.java b/plugins/org.eclipse.sirius.editor/src/org/eclipse/sirius/editor/tools/internal/commands/ReloadVSMHandler.java
new file mode 100644
index 0000000000..f6de911889
--- /dev/null
+++ b/plugins/org.eclipse.sirius.editor/src/org/eclipse/sirius/editor/tools/internal/commands/ReloadVSMHandler.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Obeo.
+ *
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.editor.tools.internal.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.sirius.business.api.componentization.ViewpointRegistry;
+
+/**
+ * Handler to reload VSMs of installed plug-ins.
+ *
+ * @author <a href="mailto:laurent.fasani@obeo.fr">Laurent Fasani</a>
+ */
+public class ReloadVSMHandler extends AbstractHandler {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ViewpointRegistry.getInstance().reloadAllFromPlugins();
+ return null;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ // This handler is enabled only if the eclipse is a runtime application launched with pde (from a launch config
+ // for example)
+ return Boolean.getBoolean("eclipse.pde.launch"); //$NON-NLS-1$
+ }
+
+}
diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/comparator/vp1.odesign b/plugins/org.eclipse.sirius.tests.junit/data/unit/comparator/vp1.odesign
index e40211fdda..e6309c3f98 100644
--- a/plugins/org.eclipse.sirius.tests.junit/data/unit/comparator/vp1.odesign
+++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/comparator/vp1.odesign
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="ASCII"?>
-<description:Group xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" name="vp1" version="8.0.0">
- <ownedViewpoints name="vp1" label="vpTest">
+<description:Group xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" name="vp1" version="11.1.1.201610211630">
+ <ownedViewpoints name="vp1" label="vpTest" modelFileExtension="*.ecore">
<ownedRepresentations xsi:type="description_1:DiagramDescription" name="d1" label="testDiagram" domainClass="EPackage">
<defaultLayer name="Default">
<nodeMappings name="p1" semanticCandidatesExpression="var:self" domainClass="EPackage">
diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/comparator/vp2.odesign b/plugins/org.eclipse.sirius.tests.junit/data/unit/comparator/vp2.odesign
index 2c36eb658d..2c8545656b 100644
--- a/plugins/org.eclipse.sirius.tests.junit/data/unit/comparator/vp2.odesign
+++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/comparator/vp2.odesign
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="ASCII"?>
-<description:Group xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:tool="http://www.eclipse.org/sirius/diagram/description/tool/1.1.0" name="vp2" version="8.0.0">
- <ownedViewpoints name="vp2" label="vpTest">
+<description:Group xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:tool="http://www.eclipse.org/sirius/diagram/description/tool/1.1.0" name="vp2" version="11.1.1.201610211630">
+ <ownedViewpoints name="vp2" label="vpTest" modelFileExtension="*.ecore">
<ownedRepresentations xsi:type="description_1:DiagramDescription" name="d2" label="testDiagram" domainClass="EPackage">
<defaultLayer name="Default">
<nodeMappings name="p2" detailDescriptions="//@ownedViewpoints[name='vp2']/@ownedRepresentations[name='d2']/@defaultLayer/@toolSections.0/@ownedTools[name='dcd']" semanticCandidatesExpression="var:self" domainClass="EPackage">
diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/ViewpointSelectionTests.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/ViewpointSelectionTests.java
index 7d3c641f39..ffd7749441 100644
--- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/ViewpointSelectionTests.java
+++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/session/ViewpointSelectionTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, 2014 THALES GLOBAL SERVICES.
+ * Copyright (c) 2010, 2018 THALES GLOBAL SERVICES.
* 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
@@ -63,7 +63,9 @@ public class ViewpointSelectionTests extends TestCase {
Set<Viewpoint> viewpoints = ViewpointSelection.getViewpoints("lolita");
assertFalse(viewpoints.isEmpty());
- assertEquals(1, viewpoints.size());
+ StringBuilder sb = new StringBuilder("ViewpointSelection.getViewpoints('lolita')\n");
+ viewpoints.stream().forEach(vp -> sb.append(vp + "\n"));
+ assertEquals(sb.toString(), 1, viewpoints.size());
viewpoints = ViewpointSelection.getViewpoints("tatata");
assertFalse(viewpoints.isEmpty());
@@ -104,8 +106,11 @@ public class ViewpointSelectionTests extends TestCase {
ViewpointRegistry.getInstance().registerFromWorkspace(createdViewpoints);
Set<Viewpoint> viewpoints = ViewpointSelection.getViewpoints("treztattaaaazzz");
+ StringBuilder sb = new StringBuilder("ViewpointSelection.getViewpoints('treztattaaaazzz')\n");
+ viewpoints.stream().forEach(vp -> sb.append(vp + "\n"));
+
assertFalse(viewpoints.isEmpty());
- assertEquals(1, viewpoints.size());
+ assertEquals(sb.toString(), 1, viewpoints.size());
viewpoints = ViewpointSelection.getViewpoints("toto");
assertFalse(viewpoints.isEmpty());
diff --git a/plugins/org.eclipse.sirius/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius/META-INF/MANIFEST.MF
index 3d0689ac24..9653e0d50b 100644
--- a/plugins/org.eclipse.sirius/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.sirius/META-INF/MANIFEST.MF
@@ -37,6 +37,7 @@ Export-Package: org.eclipse.sirius.business.api.action;version="2.0.4",
org.eclipse.sirius.business.api.tool;version="2.0.4",
org.eclipse.sirius.business.internal.color;version="2.0.4";x-internal:=true,
org.eclipse.sirius.business.internal.command.control;version="2.0.4";x-internal:=true,
+ org.eclipse.sirius.business.internal.componentization;x-internal:=true,
org.eclipse.sirius.business.internal.contribution;version="2.0.4";x-internal:=true,
org.eclipse.sirius.business.internal.dialect;version="3.0.0";x-internal:=true,
org.eclipse.sirius.business.internal.dialect.command;version="2.0.4";x-internal:=true,
diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/componentization/ViewpointRegistry.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/componentization/ViewpointRegistry.java
index cd4b8506f3..7472705081 100644
--- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/componentization/ViewpointRegistry.java
+++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/componentization/ViewpointRegistry.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2014 THALES GLOBAL SERVICES and others.
+ * Copyright (c) 2007, 2018 THALES GLOBAL SERVICES 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
@@ -21,6 +21,7 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.ECrossReferenceAdapter;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.sirius.business.api.query.IdentifiedElementQuery;
+import org.eclipse.sirius.business.internal.componentization.ViewpointRegistryImpl;
import org.eclipse.sirius.business.internal.movida.Movida;
import org.eclipse.sirius.viewpoint.description.Component;
import org.eclipse.sirius.viewpoint.description.RepresentationDescription;
@@ -62,6 +63,7 @@ public class ViewpointRegistry implements IResourceChangeListener {
* @return the result of the comparison, as defined in
* {@link Comparator#compare(Object, Object)}.
*/
+ @Override
public int compare(final Viewpoint vp1, final Viewpoint vp2) {
int result = -1;
@@ -262,6 +264,16 @@ public class ViewpointRegistry implements IResourceChangeListener {
public void disposeFromPlugin(Viewpoint viewpoint) {
throw new UnsupportedOperationException();
}
+
+ /**
+ * Reload all VSM that are contained in installed plug-ins.</br>
+ * That is useful if the specifier has made changes in the odesign file because he do not have to restart the
+ * eclipse to have the change effect.</br>
+ * Opened representation editors will be automatically refreshed.
+ */
+ public void reloadAllFromPlugins() {
+ throw new UnsupportedOperationException();
+ }
/**
* Add a filter on the registry.
@@ -320,6 +332,7 @@ public class ViewpointRegistry implements IResourceChangeListener {
/**
* {@inheritDoc}
*/
+ @Override
public void resourceChanged(IResourceChangeEvent event) {
// Do nothing.
}
diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/componentization/ViewpointRegistryImpl.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/componentization/ViewpointRegistryImpl.java
index be516aa9bb..3d4bb56dfd 100644
--- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/componentization/ViewpointRegistryImpl.java
+++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/componentization/ViewpointRegistryImpl.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2011, 2016 THALES GLOBAL SERVICES.
+ * Copyright (c) 2011, 2018 THALES GLOBAL SERVICES.
* 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
@@ -8,7 +8,7 @@
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
-package org.eclipse.sirius.business.api.componentization;
+package org.eclipse.sirius.business.internal.componentization;
import java.io.IOException;
import java.text.MessageFormat;
@@ -18,6 +18,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -43,9 +44,15 @@ import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.resource.impl.URIMappingRegistryImpl;
import org.eclipse.emf.ecore.util.ECrossReferenceAdapter;
import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.sirius.business.api.componentization.ISiriusComponent;
+import org.eclipse.sirius.business.api.componentization.ViewpointFileCollector;
+import org.eclipse.sirius.business.api.componentization.ViewpointRegistry;
+import org.eclipse.sirius.business.api.componentization.ViewpointRegistryFilter;
+import org.eclipse.sirius.business.api.componentization.ViewpointRegistryListener2;
import org.eclipse.sirius.business.api.dialect.DialectManager;
import org.eclipse.sirius.business.api.helper.SiriusUtil;
import org.eclipse.sirius.business.api.query.RepresentationDescriptionQuery;
+import org.eclipse.sirius.business.api.query.ViewpointQuery;
import org.eclipse.sirius.business.api.session.Session;
import org.eclipse.sirius.business.api.session.SessionManager;
import org.eclipse.sirius.common.tools.DslCommonPlugin;
@@ -77,7 +84,7 @@ import com.google.common.collect.Lists;
public class ViewpointRegistryImpl extends ViewpointRegistry {
private ResourceSet resourceSet;
- private Set<Viewpoint> viewpointsFromPlugin;
+ private Map<URI, Viewpoint> viewpointsFromPlugin;
private Set<Viewpoint> viewpointsFromWorkspace;
@@ -169,7 +176,7 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
*/
@Override
public void init(final int size) {
- this.viewpointsFromPlugin = new HashSet<Viewpoint>(size);
+ this.viewpointsFromPlugin = new LinkedHashMap<>();
this.viewpointsFromWorkspace = new HashSet<Viewpoint>(size);
this.resourceSet = new ResourceSetImpl();
@@ -315,20 +322,33 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
final Set<Viewpoint> addedViewpoints = new HashSet<Viewpoint>();
try {
- final URI fileURI = URI.createPlatformPluginURI(modelerModelResourcePath, true);
- final EObject root = load(fileURI, resourceSet);
- Option<ViewpointFileCollector> collector = getCollectorFromURI(fileURI);
+ final URI resourceURI = URI.createPlatformPluginURI(modelerModelResourcePath, true);
+ Resource resource = resourceSet.getResource(resourceURI, false);
+ if (resource != null) {
+ unloadAndRemove(resource);
+ }
+ final EObject root = load(resourceURI, resourceSet);
+ Option<ViewpointFileCollector> collector = getCollectorFromURI(resourceURI);
if (collector.some() && collector.get().isValid(root)) {
for (final Viewpoint viewpoint : collector.get().collect(root)) {
- viewpointsFromPlugin.add(viewpoint);
+ Option<URI> uri = new ViewpointQuery(viewpoint).getViewpointURI();
+ if (uri.some()) {
+ viewpointsFromPlugin.put(uri.get(), viewpoint);
+ } else {
+ viewpointsFromPlugin.put(EcoreUtil.getURI(viewpoint), viewpoint);
+ }
mapToViewpointProtocol(viewpoint);
addedViewpoints.add(viewpoint);
}
+ // needed so that invalidateCache works correctly.
+ // DiagramDescriptionMappingsRegistryImpl.cleanDiagramDescriptionNoMoreInResource() required that vp is
+ // not in a resource.
+ unloadInExistingSessions(resourceURI.toPlatformString(true), false);
/* add cross referencer */
addCrossReferencer(root.eResource());
} else {
- unloadAndRemove(fileURI);
+ unloadAndRemove(resourceURI);
}
} catch (final IOException e) {
@@ -343,6 +363,24 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
invalidateCache();
return addedViewpoints;
}
+
+ @Override
+ public void reloadAllFromPlugins() {
+ boolean[] touched = { false };
+ this.viewpointsFromPlugin.values().stream().map(vp -> vp.eResource()).distinct().filter(r -> r != null).forEach(res -> {
+ URI uri = res.getURI();
+ if (uri != null) {
+ String path = uri.toPlatformString(true);
+ this.registerFromPlugin(path);
+ touched[0] = true;
+ }
+ });
+ if (touched[0] && newListeners != null) {
+ for (final ViewpointRegistryListener2 listener : newListeners) {
+ listener.modelerDesciptionFilesLoaded();
+ }
+ }
+ }
private Option<ViewpointFileCollector> getCollectorFromURI(URI fileURI) {
Option<ViewpointFileCollector> result = Options.newNone();
@@ -404,7 +442,7 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
final String pluginName = vpResource.getURI().segment(1);
if (vpName != null && pluginName != null) {
- Iterable<Viewpoint> sameNameAndPluginViewpoints = Iterables.filter(viewpointsFromPlugin, new Predicate<Viewpoint>() {
+ Iterable<Viewpoint> sameNameAndPluginViewpoints = Iterables.filter(viewpointsFromPlugin.values(), new Predicate<Viewpoint>() {
@Override
public boolean apply(final Viewpoint input) {
@@ -419,7 +457,7 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
}
}
- for (final Viewpoint viewpointFromPlugin : viewpointsFromPlugin) {
+ for (final Viewpoint viewpointFromPlugin : viewpointsFromPlugin.values()) {
if (viewpointFromPlugin.eResource().equals(vpResource)) {
return;
}
@@ -443,7 +481,7 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
public Set<Viewpoint> getViewpoints() {
final Set<Viewpoint> all = new HashSet<Viewpoint>(this.viewpointsFromPlugin.size() + this.viewpointsFromWorkspace.size());
all.addAll(this.viewpointsFromWorkspace);
- all.addAll(this.viewpointsFromPlugin);
+ all.addAll(this.viewpointsFromPlugin.values());
if (filters != null) {
final Set<Viewpoint> toRemove = new LinkedHashSet<Viewpoint>();
@@ -459,7 +497,7 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
/*
* Filter viewpoints from plug-in
*/
- for (final Viewpoint viewpoint : this.viewpointsFromPlugin) {
+ for (final Viewpoint viewpoint : this.viewpointsFromPlugin.values()) {
if (filter.filter(viewpoint)) {
toRemove.add(viewpoint);
}
@@ -499,7 +537,7 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
@Override
public boolean isFromPlugin(final Viewpoint viewpoint) {
if (viewpointsFromPlugin != null) {
- return viewpointsFromPlugin.contains(viewpoint);
+ return viewpointsFromPlugin.containsValue(viewpoint);
}
return false;
}
@@ -602,11 +640,9 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
unloadAndRemove(URI.createPlatformResourceURI(file.getFullPath().toOSString(), true));
}
- private void unloadAndRemove(final URI fileURI) {
-
- Resource resource = resourceSet.getResource(fileURI, true);
+ private void unloadAndRemove(final URI resourceURI) {
+ Resource resource = resourceSet.getResource(resourceURI, false);
unloadAndRemove(resource);
-
}
private void unloadAndRemove(final Resource resource) {
@@ -647,10 +683,10 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
}
/* CHECKSTYLE:OFF -> this method may throw runtime exception */
- private EObject load(final URI fileURI, final ResourceSet set) throws IOException, WrappedException, RuntimeException {
- final Resource loaded = set.getResource(fileURI, true);
- loaded.load(Collections.EMPTY_MAP);
- return loaded.getContents().get(0);
+ private EObject load(final URI resourceURI, final ResourceSet set) throws IOException, WrappedException, RuntimeException {
+ final Resource resource = set.getResource(resourceURI, true);
+ resource.load(Collections.EMPTY_MAP);
+ return resource.getContents().get(0);
/* CHECKSTYLE:ON */
}
@@ -852,14 +888,18 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
}
}
- private void unloadInExistingSessions(final IFile odesignFile, boolean remove) {
+ private void unloadInExistingSessions(IFile file, boolean remove) {
+ unloadInExistingSessions(file.getFullPath().toString(), remove);
+ }
+
+ private void unloadInExistingSessions(String resourcePath, boolean remove) {
/* Reload EditingDomain of all Sessions. */
for (Session session : SessionManager.INSTANCE.getSessions()) {
ResourceSet sessionResourceSet = session.getTransactionalEditingDomain().getResourceSet();
for (final Resource resource : Lists.newArrayList(sessionResourceSet.getResources())) {
final URI resourceURI = resource.getURI();
if (resourceURI != null) {
- if (resourceURI.toPlatformString(true) != null && resourceURI.toPlatformString(true).equals(odesignFile.getFullPath().toString())) {
+ if (resourceURI.toPlatformString(true) != null && resourceURI.toPlatformString(true).equals(resourcePath)) {
resource.unload();
if (remove) {
sessionResourceSet.getResources().remove(resource);
@@ -880,7 +920,7 @@ public class ViewpointRegistryImpl extends ViewpointRegistry {
this.viewpointsFromWorkspace.remove(viewpoint);
URI viewpointUri = ViewpointProtocolParser.buildViewpointUri(EcoreUtil.getURI(viewpoint));
- for (Viewpoint vp : this.viewpointsFromPlugin) {
+ for (Viewpoint vp : this.viewpointsFromPlugin.values()) {
if (StringUtil.equals(vp.getName(), viewpoint.getName())) {
URI vpURI = ViewpointProtocolParser.buildViewpointUri(EcoreUtil.getURI(vp));
if (vpURI != null && viewpointUri != null && StringUtil.equals(vpURI.toString(), viewpointUri.toString())) {
diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/danalysis/SessionVSMUpdater.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/danalysis/SessionVSMUpdater.java
index 378b673e2b..d7626dc4f8 100644
--- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/danalysis/SessionVSMUpdater.java
+++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/danalysis/SessionVSMUpdater.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2015 THALES GLOBAL SERVICES and Obeo.
+ * Copyright (c) 2007, 2018 THALES GLOBAL SERVICES and Obeo.
* 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
@@ -52,7 +52,7 @@ public class SessionVSMUpdater implements ViewpointRegistryListener2 {
@Override
public void modelerDesciptionFilesLoaded() {
Collection<Resource> allResources = Lists.newArrayList(session.getTransactionalEditingDomain().getResourceSet().getResources());
- for (Resource res : Iterables.filter(allResources, new ResourceFileExtensionPredicate(SiriusUtil.DESCRIPTION_MODEL_EXTENSION, true))) {
+ for (Resource res : Iterables.filter(allResources, new ResourceFileExtensionPredicate(SiriusUtil.DESCRIPTION_MODEL_EXTENSION, false))) {
// Unload emtpy odesign.
if (!res.isModified() && res.isLoaded() && res.getContents().isEmpty()) {
session.unregisterResourceInCrossReferencer(res);
@@ -72,6 +72,21 @@ public class SessionVSMUpdater implements ViewpointRegistryListener2 {
} catch (IOException e) {
SiriusPlugin.getDefault().warning(MessageFormat.format(Messages.SessionVSMUpdater_VSMLoadErrorMsg, res.getURI()), e);
}
+ } else if (res.getURI().isPlatformPlugin()) {
+ if (res.isLoaded()) {
+ res.unload();
+ }
+ try {
+ res.load(Collections.emptyMap());
+ if (res.isLoaded() && !res.getContents().isEmpty()) {
+ session.registerResourceInCrossReferencer(res);
+ // Refresh the imports of interpreter in case of new
+ // Java Extension
+ InterpreterRegistry.prepareImportsFromSession(session.getInterpreter(), session);
+ }
+ } catch (IOException e) {
+ SiriusPlugin.getDefault().warning(MessageFormat.format(Messages.SessionVSMUpdater_VSMLoadErrorMsg, res.getURI()), e);
+ }
}
}
session.notifyListeners(SessionListener.VSM_UPDATED);

Back to the top