Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Monnier2017-12-01 16:27:54 +0000
committerSteve Monnier2017-12-06 10:58:58 +0000
commit00e3a30436417effb43dc1aaf468fc371c9bf3bf (patch)
tree95d989b48362aa23cfeb1f8f1394e83e083c99df
parent6d651f3a3331740a10f1c1ff1bae2f7a17af3336 (diff)
downloadorg.eclipse.sirius-00e3a30436417effb43dc1aaf468fc371c9bf3bf.tar.gz
org.eclipse.sirius-00e3a30436417effb43dc1aaf468fc371c9bf3bf.tar.xz
org.eclipse.sirius-00e3a30436417effb43dc1aaf468fc371c9bf3bf.zip
[528024] Add local models by D&D if all semantic resource are locals
The addition of a local model to a session by D&D in the aird editor needs to be authorize only if each models of the session are local (platform resource). Bug: 528024 Change-Id: Ia4c823944430fa028ad539e472eff70481e4aedf Signed-off-by: Steve Monnier <steve.monnier@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.tests.swtbot.support/src/org/eclipse/sirius/tests/swtbot/support/utils/SWTBotUtils.java41
-rw-r--r--plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/DndWorkspaceToAirdEditorTest.java28
-rw-r--r--plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/internal/ModelCommonDropAdapterAssistant.java4
3 files changed, 46 insertions, 27 deletions
diff --git a/plugins/org.eclipse.sirius.tests.swtbot.support/src/org/eclipse/sirius/tests/swtbot/support/utils/SWTBotUtils.java b/plugins/org.eclipse.sirius.tests.swtbot.support/src/org/eclipse/sirius/tests/swtbot/support/utils/SWTBotUtils.java
index 1ac0e385d8..c774c768d6 100644
--- a/plugins/org.eclipse.sirius.tests.swtbot.support/src/org/eclipse/sirius/tests/swtbot/support/utils/SWTBotUtils.java
+++ b/plugins/org.eclipse.sirius.tests.swtbot.support/src/org/eclipse/sirius/tests/swtbot/support/utils/SWTBotUtils.java
@@ -19,12 +19,15 @@ import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.palette.PaletteEntry;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.bindings.keys.ParseException;
+import org.eclipse.jface.util.Geometry;
import org.eclipse.sirius.business.api.metamodel.helper.FontFormatHelper;
import org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor;
+import org.eclipse.sirius.tests.swtbot.support.utils.dnd.DndUtil;
import org.eclipse.sirius.tests.swtbot.support.utils.menu.SWTBotContextMenu;
import org.eclipse.sirius.viewpoint.FontFormat;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
@@ -37,6 +40,7 @@ import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
+import org.eclipse.swtbot.eclipse.gef.finder.SWTGefBot;
import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefEditPart;
import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
@@ -45,6 +49,7 @@ import org.eclipse.swtbot.swt.finder.results.BoolResult;
import org.eclipse.swtbot.swt.finder.results.Result;
import org.eclipse.swtbot.swt.finder.results.VoidResult;
import org.eclipse.swtbot.swt.finder.results.WidgetResult;
+import org.eclipse.swtbot.swt.finder.waits.DefaultCondition;
import org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
@@ -52,6 +57,7 @@ import org.eclipse.swtbot.swt.finder.widgets.SWTBotToolbarDropDownButton;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.eclipse.swtbot.swt.finder.widgets.TimeoutException;
+import org.eclipse.ui.internal.dnd.DragUtil;
import org.hamcrest.Matcher;
import org.hamcrest.Matchers;
import org.junit.Assert;
@@ -775,4 +781,39 @@ public final class SWTBotUtils {
throw new WidgetNotFoundException("The menu item \"" + label + "\" has not been found.");
}
+ /**
+ * Drag and drop a local file to the session editor.
+ *
+ * @param currentBot
+ * current {@link SWTGefBot}
+ * @param semanticAirdTree
+ * {@link SWTBotTree} in the aird editor.
+ * @param sampleFile
+ * {@link SWTBotTreeItem} to drag and drop in the aird editor
+ */
+ public static void dragAndDropFileToAirdEditor(SWTGefBot currentBot, SWTBotTree semanticAirdTree, SWTBotTreeItem sampleFile) {
+ int modelNumber = semanticAirdTree.getAllItems().length;
+
+ currentBot.getDisplay().asyncExec(() -> {
+ // compute drop point
+ Point dropPoint = Geometry.centerPoint(DragUtil.getDisplayBounds(semanticAirdTree.widget));
+ // drag and drop
+ sampleFile.select();
+ DndUtil util = new DndUtil(currentBot.getDisplay());
+ util.dragAndDrop(sampleFile, dropPoint);
+ });
+ currentBot.waitUntil(new DefaultCondition() {
+
+ @Override
+ public boolean test() throws Exception {
+ return semanticAirdTree.getAllItems().length > modelNumber;
+ }
+
+ @Override
+ public String getFailureMessage() {
+ return "No model was added after the drag and drop.";
+ }
+ });
+ }
+
}
diff --git a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/DndWorkspaceToAirdEditorTest.java b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/DndWorkspaceToAirdEditorTest.java
index 77781ed7c5..f75328c099 100644
--- a/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/DndWorkspaceToAirdEditorTest.java
+++ b/plugins/org.eclipse.sirius.tests.swtbot/src/org/eclipse/sirius/tests/swtbot/DndWorkspaceToAirdEditorTest.java
@@ -15,21 +15,18 @@ import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.transaction.RunnableWithResult;
-import org.eclipse.jface.util.Geometry;
import org.eclipse.sirius.tests.support.api.TestsUtil;
import org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase;
import org.eclipse.sirius.tests.swtbot.support.api.business.UIResource;
+import org.eclipse.sirius.tests.swtbot.support.utils.SWTBotUtils;
import org.eclipse.sirius.tests.swtbot.support.utils.dnd.DndUtil;
import org.eclipse.sirius.ui.editor.SessionEditor;
-import org.eclipse.swt.graphics.Point;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
-import org.eclipse.swtbot.swt.finder.waits.DefaultCondition;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.internal.dnd.DragUtil;
import org.eclipse.ui.part.FileEditorInput;
import org.junit.Assume;
import org.junit.Before;
@@ -124,28 +121,7 @@ public class DndWorkspaceToAirdEditorTest extends AbstractSiriusSwtBotGefTestCas
SWTBotTree modelExplorerTree = bot.viewByTitle("Model Explorer").bot().tree();
SWTBotTreeItem sampleFile = modelExplorerTree.expandNode(designerProject.getName())
.expandNode(SAMPLE_MODEL_FILE);
- int modelNumber = semanticAirdTree.getAllItems().length;
-
- bot.getDisplay().asyncExec(() -> {
- // compute drop point
- Point dropPoint = Geometry.centerPoint(DragUtil.getDisplayBounds(semanticAirdTree.widget));
- // drag and drop
- sampleFile.select();
- DndUtil util = new DndUtil(bot.getDisplay());
- util.dragAndDrop(sampleFile, dropPoint);
- });
- bot.waitUntil(new DefaultCondition() {
-
- @Override
- public boolean test() throws Exception {
- return semanticAirdTree.getAllItems().length > modelNumber;
- }
-
- @Override
- public String getFailureMessage() {
- return "No model was added after the drag and drop.";
- }
- });
+ SWTBotUtils.dragAndDropFileToAirdEditor(bot, semanticAirdTree, sampleFile);
// check item of the semantic aird tree
boolean isDragAndDropOk = false;
for (SWTBotTreeItem swtBotTreeItem : semanticAirdTree.getAllItems()) {
diff --git a/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/internal/ModelCommonDropAdapterAssistant.java b/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/internal/ModelCommonDropAdapterAssistant.java
index d6b915e28d..b496cf5edc 100644
--- a/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/internal/ModelCommonDropAdapterAssistant.java
+++ b/plugins/org.eclipse.sirius.ui.editor/src/org/eclipse/sirius/ui/editor/internal/ModelCommonDropAdapterAssistant.java
@@ -50,7 +50,9 @@ public class ModelCommonDropAdapterAssistant extends CommonDropAdapterAssistant
public IStatus validateDrop(Object target, int operation, TransferData transferType) {
if (DND.DROP_MOVE == operation) {
Optional<Session> session = findCurrentSession();
- if (session.isPresent()) {
+ // Drag and drop of models is only authorized if existing semantic
+ // resources are all local
+ if (session.isPresent() && session.get().getSemanticResources().stream().allMatch(res -> res.getURI().isPlatformResource())) {
Collection<IFile> droppedModelFiles = collectDroppedSemanticModelCandidates(LocalSelectionTransfer.getTransfer().getSelection(), session.get());
if (!droppedModelFiles.isEmpty()) {
// Found at least one potential semantic model in the

Back to the top