diff options
| author | Steve Monnier | 2017-12-01 16:27:54 +0000 |
|---|---|---|
| committer | Steve Monnier | 2017-12-06 10:58:58 +0000 |
| commit | 00e3a30436417effb43dc1aaf468fc371c9bf3bf (patch) | |
| tree | 95d989b48362aa23cfeb1f8f1394e83e083c99df | |
| parent | 6d651f3a3331740a10f1c1ff1bae2f7a17af3336 (diff) | |
| download | org.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>
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 |
