Bug 400890 - Extract into a fragment - Multiple elements
Change-Id: I1f5b75448ea79b0457ecb31ebbfc5fde31633f3b
Signed-off-by: klevis <klevis.ramo7@gmail.com>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
index 8087b53..c9ecf03 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/ModelEditor.java
@@ -13,7 +13,6 @@
package org.eclipse.e4.tools.emf.ui.internal.common;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -634,8 +633,11 @@
@Override
public void menuAboutToShow(IMenuManager manager) {
final IStructuredSelection s = (IStructuredSelection) viewer.getSelection();
+ final List listOfSelections = s.toList();
+ int noSelected = listOfSelections.size();
+
boolean addSeparator = false;
- if (!s.isEmpty()) {
+ if (!s.isEmpty() && noSelected == 1) {
List<Action> actions;
if (s.getFirstElement() instanceof VirtualEntry<?>) {
actions = virtualEditors.get(((VirtualEntry<?>) s.getFirstElement()).getId()).getActions(s.getFirstElement());
@@ -661,36 +663,6 @@
if (addSeparator)
manager.add(new Separator());
- // build the extract action
- if ((!((VirtualEntry<?>) s.getFirstElement()).getList().isEmpty()) && (!isModelFragment()) && modelExtractor != null) {
- manager.add(new Action(messages.ModelEditor_ExtractFragment, ImageDescriptor.createFromImage(resourcePool.getImageUnchecked(ResourceProvider.IMG_ModelFragments))) {
- @Override
- public void run() {
- VirtualEntry<?> ve = (VirtualEntry<?>) s.getFirstElement();
- EObject container = (EObject) ve.getOriginalParent();
- String containerId = ((MApplicationElement) container).getElementId();
- if (containerId == null || containerId.length() == 0) {
- MessageDialog.openError(viewer.getControl().getShell(), null, messages.ModelEditor_ExtractFragment_NoParentId);
- return;
- }
- ArrayList<MApplicationElement> maes = new ArrayList<MApplicationElement>();
- IObservableList list = ve.getList();
- Iterator iterator = list.iterator();
- while (iterator.hasNext()) {
- maes.add((MApplicationElement) iterator.next());
- }
-
- if (modelExtractor.extract(viewer.getControl().getShell(), project, maes)) {
- for (MApplicationElement mae : maes) {
- Command cmd = DeleteCommand.create(ModelEditor.this.modelProvider.getEditingDomain(), mae);
- if (cmd.canExecute()) {
- ModelEditor.this.modelProvider.getEditingDomain().getCommandStack().execute(cmd);
- }
- }
- }
- };
- });
- }
} else {
final EObject o = (EObject) s.getFirstElement();
@@ -743,12 +715,62 @@
}
}
}
+ // multi selection
+ if (noSelected > 0) {
+ if ((!isModelFragment()) && modelExtractor != null)
+ manager.add(new Action(messages.ModelEditor_ExtractFragment, ImageDescriptor.createFromImage(resourcePool.getImageUnchecked(ResourceProvider.IMG_ModelFragments))) {
+ public void run() {
+ ArrayList<MApplicationElement> maes = new ArrayList<MApplicationElement>();
+ for (Object objSelect : listOfSelections) {
+ EObject container = null;
+ if (objSelect instanceof VirtualEntry<?>) {
+
+ VirtualEntry<?> ve = (VirtualEntry<?>) objSelect;
+ container = (EObject) ve.getOriginalParent();
+ IObservableList list = ve.getList();
+ Iterator iterator = list.iterator();
+ while (iterator.hasNext()) {
+ maes.add((MApplicationElement) iterator.next());
+ }
+
+ } else {
+ container = ((EObject) objSelect).eContainer();
+ MApplicationElement objSelect2 = (MApplicationElement) objSelect;
+ if (!(objSelect2 instanceof MApplication))
+ maes.add(objSelect2);
+ else {
+ // can't extract application
+ return;
+ }
+
+ }
+
+ String containerId = ((MApplicationElement) container).getElementId();
+ if (containerId == null || containerId.length() == 0) {
+ MessageDialog.openError(viewer.getControl().getShell(), null, messages.ModelEditor_ExtractFragment_NoParentId);
+
+ return;
+ }
+
+ }
+
+ if (modelExtractor.extract(viewer.getControl().getShell(), project, maes)) {
+ Command cmd = DeleteCommand.create(ModelEditor.this.modelProvider.getEditingDomain(), maes);
+ if (cmd.canExecute()) {
+ ModelEditor.this.modelProvider.getEditingDomain().getCommandStack().execute(cmd);
+ }
+ }
+
+ };
+ });
+
+ }
IExtensionRegistry registry = RegistryFactory.getRegistry();
IExtensionPoint extPoint = registry.getExtensionPoint("org.eclipse.e4.tools.emf.ui.scripting"); //$NON-NLS-1$
final IConfigurationElement[] elements = extPoint.getConfigurationElements();
- if (elements.length > 0 && !s.isEmpty() && s.getFirstElement() instanceof MApplicationElement) {
+ if (elements.length > 0 && !s.isEmpty() && s.getFirstElement() instanceof MApplicationElement && noSelected == 1) {
if (addSeparator) {
manager.add(new Separator());
}
@@ -818,27 +840,6 @@
}
}
- if ((s.getFirstElement() instanceof MApplicationElement) && (!isModelFragment()) && (!(s.getFirstElement() instanceof MApplication)) && modelExtractor != null) {
- manager.add(new Action(messages.ModelEditor_ExtractFragment, ImageDescriptor.createFromImage(resourcePool.getImageUnchecked(ResourceProvider.IMG_ModelFragments))) {
- @Override
- public void run() {
- MApplicationElement oe = (MApplicationElement) s.getFirstElement();
- EObject container = ((EObject) oe).eContainer();
- String containerId = ((MApplicationElement) container).getElementId();
- if (containerId == null || containerId.length() == 0) {
- MessageDialog.openError(viewer.getControl().getShell(), null, messages.ModelEditor_ExtractFragment_NoParentId);
- return;
- }
- if (modelExtractor.extract(viewer.getControl().getShell(), project, Collections.singletonList(oe))) {
- Command cmd = DeleteCommand.create(ModelEditor.this.modelProvider.getEditingDomain(), oe);
- if (cmd.canExecute()) {
- ModelEditor.this.modelProvider.getEditingDomain().getCommandStack().execute(cmd);
- }
- }
- };
-
- });
- }
if (addSeparator) {
manager.add(new Separator());
@@ -1010,10 +1011,10 @@
TreeViewer tempViewer = null;
String property = System.getProperty(ORG_ECLIPSE_E4_TOOLS_MODELEDITOR_FILTEREDTREE_ENABLED_XMITAB_DISABLED);
if (property != null) {
- FilteredTree viewParent = new FilteredTree(treeArea, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL, new PatternFilter(), true);
+ FilteredTree viewParent = new FilteredTree(treeArea, SWT.MULTI | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL, new PatternFilter(), true);
tempViewer = viewParent.getViewer();
} else {
- tempViewer = new TreeViewer(treeArea, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
+ tempViewer = new TreeViewer(treeArea, SWT.MULTI | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
}
final TreeViewer viewer = tempViewer;
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/ExtractContributionModelWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/ExtractContributionModelWizard.java
index 4584f3c..b20e70f 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/ExtractContributionModelWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/ExtractContributionModelWizard.java
@@ -50,16 +50,16 @@
@Override
protected EObject createInitialModel() {
MModelFragments createModelFragments = MFragmentFactory.INSTANCE.createModelFragments();
- MStringModelFragment createStringModelFragment = MFragmentFactory.INSTANCE.createStringModelFragment();
for (MApplicationElement moe : oes) {
-
+ MStringModelFragment createStringModelFragment = MFragmentFactory.INSTANCE.createStringModelFragment();
MApplicationElement e = (MApplicationElement) EcoreUtil.copy((EObject) moe);
String featurename = ((EObject) moe).eContainmentFeature().getName();
createStringModelFragment.setParentElementId(((MApplicationElement) ((EObject) moe).eContainer()).getElementId());
createStringModelFragment.getElements().add(e);
createStringModelFragment.setFeaturename(featurename);
- }
+
createModelFragments.getFragments().add(createStringModelFragment);
+ }
return (EObject)createModelFragments;
}