Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Charles David2016-04-29 13:41:17 +0000
committerPierre-Charles David2016-05-13 15:03:50 +0000
commita1eb96a92a216a922f9cafe4b964affd5a29e113 (patch)
tree70b3f55c55f130a17ba34fb15a4d8641e6fa789c /plugins/org.eclipse.sirius.ext.emf.edit
parent407a3a24d89c963d1bc01ae0dce3ae732eed4eb8 (diff)
downloadorg.eclipse.sirius-a1eb96a92a216a922f9cafe4b964affd5a29e113.tar.gz
org.eclipse.sirius-a1eb96a92a216a922f9cafe4b964affd5a29e113.tar.xz
org.eclipse.sirius-a1eb96a92a216a922f9cafe4b964affd5a29e113.zip
[482831] Expose EMF Edit features in new standard service class
Bug: 482831 Change-Id: Iec8707b35ef9407c7efdd9382682eb804607bffa Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
Diffstat (limited to 'plugins/org.eclipse.sirius.ext.emf.edit')
-rw-r--r--plugins/org.eclipse.sirius.ext.emf.edit/META-INF/MANIFEST.MF4
-rw-r--r--plugins/org.eclipse.sirius.ext.emf.edit/src/org/eclipse/sirius/ext/emf/edit/EditingDomainServices.java674
2 files changed, 678 insertions, 0 deletions
diff --git a/plugins/org.eclipse.sirius.ext.emf.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.ext.emf.edit/META-INF/MANIFEST.MF
index 24c31f6db3..ca34769029 100644
--- a/plugins/org.eclipse.sirius.ext.emf.edit/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.sirius.ext.emf.edit/META-INF/MANIFEST.MF
@@ -6,3 +6,7 @@ Bundle-Version: 4.0.0.qualifier
Bundle-Vendor: %providerName
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-Localization: plugin
+Export-Package: org.eclipse.sirius.ext.emf.edit;version="4.0.0"
+Require-Bundle: org.eclipse.emf.common;bundle-version="2.8.0",
+ org.eclipse.emf.ecore;bundle-version="2.8.0",
+ org.eclipse.emf.edit;bundle-version="2.8.0"
diff --git a/plugins/org.eclipse.sirius.ext.emf.edit/src/org/eclipse/sirius/ext/emf/edit/EditingDomainServices.java b/plugins/org.eclipse.sirius.ext.emf.edit/src/org/eclipse/sirius/ext/emf/edit/EditingDomainServices.java
new file mode 100644
index 0000000000..01beb07e3d
--- /dev/null
+++ b/plugins/org.eclipse.sirius.ext.emf.edit/src/org/eclipse/sirius/ext/emf/edit/EditingDomainServices.java
@@ -0,0 +1,674 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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.ext.emf.edit;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.emf.edit.command.CommandParameter;
+import org.eclipse.emf.edit.command.MoveCommand;
+import org.eclipse.emf.edit.command.RemoveCommand;
+import org.eclipse.emf.edit.command.ReplaceCommand;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IItemColorProvider;
+import org.eclipse.emf.edit.provider.IItemFontProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IItemStyledLabelProvider;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemColorProvider;
+import org.eclipse.emf.edit.provider.ITableItemFontProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+
+/**
+ * Provides access to common {@link EditingDomain} and
+ * {@link AdapterFactoryEditingDomain} methods in a way that is compatible with
+ * "Java services" invocation from Sirius interpreted expressions.
+ * <p>
+ * <h4>General EditingDomain-related Services</h4>
+ * <p>
+ * The following general services are made available:
+ * <ul>
+ * <li>{@link #getEditingDomain(EObject)}</li>
+ * <li>{@link #isStale(EObject)}</li>
+ * <li>{@link #isControlled(EObject)}</li>
+ * <li>{@link #getAdapterFactory(EObject)}</li>
+ * <li>{@link #getAdapter(EObject, Class)}</li>
+ * </ul>
+ * <p>
+ * <h4>Item Providers Services</h4>
+ * <p>
+ * Most public methods of the following interfaces are available as services on
+ * any {@link EObject} (typically from a Sirius session):
+ * <ul>
+ * <li>{@link org.eclipse.emf.edit.provider.IItemLabelProvider}</li>
+ * <li>{@link org.eclipse.emf.edit.provider.IItemColorProvider}</li>
+ * <li>{@link org.eclipse.emf.edit.provider.IItemFontProvider}</li>
+ * <li>{@link org.eclipse.emf.edit.provider.IItemStyledLabelProvider} (only
+ * available in EMF 2.10 and later)</li>
+ * <li>{@link org.eclipse.emf.edit.provider.IStructuredItemContentProvider}</li>
+ * <li>{@link org.eclipse.emf.edit.provider.ITreeItemContentProvider}</li>
+ * <li>{@link org.eclipse.emf.edit.provider.ITableItemLabelProvider}</li>
+ * <li>{@link org.eclipse.emf.edit.provider.ITableItemColorProvider}</li>
+ * <li>{@link org.eclipse.emf.edit.provider.ITableItemFontProvider}</li>
+ * </ul>
+ * <p>
+ * In all cases, a {@code getXXXProvider()} service method is also made
+ * available (for example {@link #getLabelProvider(EObject)}, which returns the
+ * item provider itself (or <code>null</code>). The item provider is located
+ * using the {@link ItemProviderAdapter} returned by the {@link AdapterFactory}
+ * associated to the element's editing domain. This assumes said domain is an
+ * {@link AdapterFactoryEditingDomain} (which is true in practice in Sirius,
+ * which uses a <code>TransactionalEditingDomain</code> that inherits from
+ * this).
+ * <p>
+ * All service methods return an explicit <code>null</code> value (or
+ * <code>false</code> for services that return a boolean) if the corresponding
+ * item provider could not be found. Note that this is indistinguishable from an
+ * item provider method which actually returns <code>null</code>/
+ * <code>false</code>.
+ * <h4>Item Property-Related Services</h4>
+ * <p>
+ * The {@link IItemPropertySource} associated with an element and its
+ * {@link IItemPropertyDescriptor}s can be obtained using the following
+ * services:
+ * <ul>
+ * <li>{@link #getItemPropertySource(EObject)}</li>
+ * <li>{@link #getPropertyDescriptors(EObject)} to obtain <em>all</em> the
+ * {@link IItemPropertyDescriptor} of the element.</li>
+ * <li>{@link #getPropertyDescriptorForFeature(EObject, String)} to obtain the
+ * {@link IItemPropertyDescriptor} of an element's specific feature</li>
+ * </ul>
+ * <p>
+ * The following services, which all take a feature name as a second argument
+ * (the first explicit one when invoked as a service) give access to the
+ * corresponding methods in the {@link IItemPropertyDescriptor} associated to
+ * the corresponding element's feature:
+ * <ul>
+ * <li>{@link #getPropertyDescriptorPropertyValue()}</li>
+ * <li>{@link #isPropertyDescriptorPropertySet()}</li>
+ * <li>{@link #canSetPropertyDescriptorProperty()}</li>
+ * <li>{@link #resetPropertyDescriptorPropertyValue()}</li>
+ * <li>{@link #setPropertyDescriptorPropertyValue()}</li>
+ * <li>{@link #getPropertyDescriptorCategory()}</li>
+ * <li>{@link #getPropertyDescriptorDescription()}</li>
+ * <li>{@link #getPropertyDescriptorDisplayName()}</li>
+ * <li>{@link #getPropertyDescriptorFilterFlags()}</li>
+ * <li>{@link #getPropertyDescriptorHelpContextIds()}</li>
+ * <li>{@link #getPropertyDescriptorId()}</li>
+ * <li>{@link #getPropertyDescriptorLabelProvider()}</li>
+ * <li>{@link #getPropertyDescriptorFeature()}</li>
+ * <li>{@link #isPropertyDescriptorMany()}</li>
+ * <li>{@link #getPropertyDescriptorChoiceOfValues()}</li>
+ * <li>{@link #isPropertyDescriptorMultiLine()}</li>
+ * <li>{@link #isPropertyDescriptorSortChoices()}</li>
+ * </ul>
+ * <p>
+ * <h4>Command-related Services</h4>
+ * <p>
+ * A series of service methods can be used to invoke the standard EMF Commands
+ * available from {@link ItemProviderAdapter}'s various
+ * {@code createXXXCommand()} methods. Note that contrary to the
+ * {@code createXXXCommand()} methods which simply returns a {@link Command}
+ * instance, the service methods exposed in this class will directly
+ * <em>execute</em> the command on the editing domains {@link CommandStack}.
+ * Their names follow the {@code perfomXXXCommand()} pattern to reflect this.
+ * They all return the {@code self} element (the {@link EObject} on which the
+ * service was invoked.
+ * <p>
+ * The command-related services available are:
+ * <ul>
+ * <li>{@link #performSetCommand()}</li>
+ * <li>{@link #performUnsetCommand()}</li>
+ * <li>{@link #performAddCommand()}</li>
+ * <li>{@link #performRemoveCommand()}</li>
+ * <li>{@link #performReplaceCommand()}</li>
+ * <li>{@link #performMoveCommand()}</li>
+ * </ul>
+ * <p>
+ * The implementation of these services delegate to the
+ * {@link ItemProviderAdapter#createCommand(Object, EditingDomain, Class, CommandParameter)}
+ * method, so any customization made in the {@link ItemProviderAdapter}'s
+ * implementation will be taken into account.
+ *
+ * @author pcdavid
+ */
+// CHECKSTYLE:OFF
+public class EditingDomainServices {
+
+ public EditingDomain getEditingDomain(EObject self) {
+ return AdapterFactoryEditingDomain.getEditingDomainFor(self);
+ }
+
+ // Services from AdapterFactoryEditingDomain
+
+ public boolean isStale(EObject self) {
+ return AdapterFactoryEditingDomain.isStale(self);
+ }
+
+ public boolean isControlled(EObject self) {
+ return AdapterFactoryEditingDomain.isControlled(self);
+ }
+
+ public AdapterFactory getAdapterFactory(EObject self) {
+ EditingDomain domain = getEditingDomain(self);
+ if (domain instanceof AdapterFactoryEditingDomain) {
+ return ((AdapterFactoryEditingDomain) domain).getAdapterFactory();
+ } else {
+ return null;
+ }
+ }
+
+ private <T> T getAdapter(EObject self, Class<T> type) {
+ AdapterFactory af = getAdapterFactory(self);
+ if (af != null) {
+ Adapter adapter = af.adapt(self, type);
+ if (type.isInstance(adapter)) {
+ return type.cast(adapter);
+ }
+ }
+ return null;
+ }
+
+ public ItemProviderAdapter getItemProviderAdapter(EObject self) {
+ return getAdapter(self, ItemProviderAdapter.class);
+ }
+
+ // Services from IItemLabelProvider
+
+ public IItemLabelProvider getLabelProvider(EObject self) {
+ return getAdapter(self, IItemLabelProvider.class);
+ }
+
+ public String getLabelProviderText(EObject self) {
+ IItemLabelProvider lp = getLabelProvider(self);
+ if (lp != null) {
+ return lp.getText(self);
+ } else {
+ return null;
+ }
+ }
+
+ public Object getLabelProviderImage(EObject self) {
+ IItemLabelProvider lp = getLabelProvider(self);
+ if (lp != null) {
+ return lp.getImage(self);
+ } else {
+ return null;
+ }
+ }
+
+ // Services from IItemColorProvider
+
+ public IItemColorProvider getColorProvider(EObject self) {
+ return getAdapter(self, IItemColorProvider.class);
+ }
+
+ public Object getColorProviderForeground(EObject self) {
+ IItemColorProvider cp = getColorProvider(self);
+ if (cp != null) {
+ return cp.getForeground(self);
+ } else {
+ return null;
+ }
+ }
+
+ public Object getColorProviderBackground(EObject self) {
+ IItemColorProvider cp = getColorProvider(self);
+ if (cp != null) {
+ return cp.getBackground(self);
+ } else {
+ return null;
+ }
+ }
+
+ // Services from IItemFontProvider
+
+ public IItemFontProvider getFontProvider(EObject self) {
+ return getAdapter(self, IItemFontProvider.class);
+ }
+
+ public Object getFontProviderFont(EObject self) {
+ IItemFontProvider fp = getFontProvider(self);
+ if (fp != null) {
+ return fp.getFont(self);
+ } else {
+ return null;
+ }
+ }
+
+ // Services from IItemStyledLabelProvider (EMF 2.10+)
+
+ public IItemStyledLabelProvider getStyledLabelProvider(EObject self) {
+ return getAdapter(self, IItemStyledLabelProvider.class);
+ }
+
+ public Object getStyledProviderStyledText(EObject self) {
+ IItemStyledLabelProvider slp = getStyledLabelProvider(self);
+ if (slp != null) {
+ return slp.getStyledText(self);
+ } else {
+ return null;
+ }
+ }
+
+ // Services from IStructuredItemContentProvider
+
+ public IStructuredItemContentProvider getStructuredItemContentProvider(EObject self) {
+ return getAdapter(self, IStructuredItemContentProvider.class);
+ }
+
+ public Collection<?> getStructuredItemContentProviderElements(EObject self) {
+ IStructuredItemContentProvider scp = getStructuredItemContentProvider(self);
+ if (scp != null) {
+ return scp.getElements(self);
+ } else {
+ return null;
+ }
+ }
+
+ // Services from ITreeItemContentProvider
+
+ public ITreeItemContentProvider getTreeContentProvider(EObject self) {
+ return getAdapter(self, ITreeItemContentProvider.class);
+ }
+
+ public Collection<?> getTreeContentProviderChildren(EObject self) {
+ ITreeItemContentProvider tp = getTreeContentProvider(self);
+ if (tp != null) {
+ return tp.getChildren(self);
+ } else {
+ return null;
+ }
+ }
+
+ public boolean hasTreeContentProviderChildren(EObject self) {
+ ITreeItemContentProvider tp = getTreeContentProvider(self);
+ if (tp != null) {
+ return tp.hasChildren(self);
+ } else {
+ return false;
+ }
+ }
+
+ public Object getTreeContentProviderParent(EObject self) {
+ ITreeItemContentProvider tp = getTreeContentProvider(self);
+ if (tp != null) {
+ return tp.getParent(self);
+ } else {
+ return false;
+ }
+ }
+
+ // Services from ITableItemLabelProvider
+
+ public ITableItemLabelProvider getTableLabelProvider(EObject self) {
+ return getAdapter(self, ITableItemLabelProvider.class);
+ }
+
+ public String getTableLabelProviderColumnText(EObject self, int columnIndex) {
+ ITableItemLabelProvider tlp = getTableLabelProvider(self);
+ if (tlp != null) {
+ return tlp.getColumnText(self, columnIndex);
+ } else {
+ return null;
+ }
+ }
+
+ public Object getTableLabelProviderColumnImage(EObject self, int columnIndex) {
+ ITableItemLabelProvider tlp = getTableLabelProvider(self);
+ if (tlp != null) {
+ return tlp.getColumnImage(self, columnIndex);
+ } else {
+ return null;
+ }
+ }
+
+ // Services from ITableItemColorProvider
+
+ public ITableItemColorProvider getTableColorProvider(EObject self) {
+ return getAdapter(self, ITableItemColorProvider.class);
+ }
+
+ public Object getTableColorProviderForeground(EObject self, int columnIndex) {
+ ITableItemColorProvider tcp = getTableColorProvider(self);
+ if (tcp != null) {
+ return tcp.getForeground(self, columnIndex);
+ } else {
+ return null;
+ }
+ }
+
+ public Object getTableColorProviderBackground(EObject self, int columnIndex) {
+ ITableItemColorProvider tcp = getTableColorProvider(self);
+ if (tcp != null) {
+ return tcp.getBackground(self, columnIndex);
+ } else {
+ return null;
+ }
+ }
+
+ // Services from ITableItemFontProvider
+
+ public ITableItemFontProvider getTableFontProvider(EObject self) {
+ return getAdapter(self, ITableItemFontProvider.class);
+ }
+
+ public Object getTableFontProviderFont(EObject self, int columnIndex) {
+ ITableItemFontProvider tfp = getTableFontProvider(self);
+ if (tfp != null) {
+ return tfp.getFont(self, columnIndex);
+ } else {
+ return null;
+ }
+ }
+
+ // Services from IItemPropertySource & IItemPropertyDescriptor
+
+ public IItemPropertySource getItemPropertySource(EObject self) {
+ return getAdapter(self, IItemPropertySource.class);
+ }
+
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(EObject self) {
+ IItemPropertySource ips = getItemPropertySource(self);
+ if (ips != null) {
+ return ips.getPropertyDescriptors(self);
+ } else {
+ return null;
+ }
+ }
+
+ public IItemPropertyDescriptor getPropertyDescriptor(EObject self, Object propertyID) {
+ IItemPropertySource ips = getItemPropertySource(self);
+ if (ips != null) {
+ return ips.getPropertyDescriptor(self, propertyID);
+ } else {
+ return null;
+ }
+ }
+
+ public IItemPropertyDescriptor getPropertyDescriptorForFeature(EObject self, EStructuralFeature feature) {
+ if (feature.getEContainingClass().isSuperTypeOf(self.eClass())) {
+ IItemPropertySource ips = getItemPropertySource(self);
+ if (ips != null) {
+ for (IItemPropertyDescriptor propertyDescriptor : ips.getPropertyDescriptors(self)) {
+ if ((propertyDescriptor.getFeature(self)) == feature) {
+ return propertyDescriptor;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ public IItemPropertyDescriptor getPropertyDescriptorForFeature(EObject self, String featureName) {
+ EStructuralFeature feature = self.eClass().getEStructuralFeature(featureName);
+ if (feature != null) {
+ return getPropertyDescriptorForFeature(self, feature);
+ } else {
+ return null;
+ }
+ }
+
+ public Object getPropertyDescriptorPropertyValue(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ Object result = desc.getPropertyValue(self);
+ if (result instanceof ItemPropertyDescriptor.PropertyValueWrapper) {
+ return ((ItemPropertyDescriptor.PropertyValueWrapper) result).getEditableValue(self);
+ } else {
+ return result;
+ }
+ } else {
+ return null;
+ }
+ }
+
+ public boolean isPropertyDescriptorPropertySet(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.isPropertySet(self);
+ } else {
+ return false;
+ }
+ }
+
+ public boolean canSetPropertyDescriptorProperty(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.canSetProperty(self);
+ } else {
+ return false;
+ }
+ }
+
+ public void resetPropertyDescriptorPropertyValue(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ desc.resetPropertyValue(self);
+ }
+ }
+
+ public void setPropertyDescriptorPropertyValue(EObject self, String featureName, Object value) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ desc.setPropertyValue(self, value);
+ }
+ }
+
+ public String getPropertyDescriptorCategory(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.getCategory(self);
+ } else {
+ return null;
+ }
+ }
+
+ public String getPropertyDescriptorDescription(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.getDescription(self);
+ } else {
+ return null;
+ }
+ }
+
+ public String getPropertyDescriptorDisplayName(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.getDisplayName(self);
+ } else {
+ return null;
+ }
+ }
+
+ public String[] getPropertyDescriptorFilterFlags(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.getFilterFlags(self);
+ } else {
+ return null;
+ }
+ }
+
+ public Object getPropertyDescriptorHelpContextIds(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.getHelpContextIds(self);
+ } else {
+ return null;
+ }
+ }
+
+ public String getPropertyDescriptorId(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.getId(self);
+ } else {
+ return null;
+ }
+ }
+
+ public IItemLabelProvider getPropertyDescriptorLabelProvider(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.getLabelProvider(self);
+ } else {
+ return null;
+ }
+ }
+
+ public Object getPropertyDescriptorFeature(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.getFeature(self);
+ } else {
+ return null;
+ }
+ }
+
+ public boolean isPropertyDescriptorMany(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.isMany(self);
+ } else {
+ return false;
+ }
+ }
+
+ public Collection<?> getPropertyDescriptorChoiceOfValues(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.getChoiceOfValues(self);
+ } else {
+ return null;
+ }
+ }
+
+ public boolean isPropertyDescriptorMultiLine(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.isMultiLine(self);
+ } else {
+ return false;
+ }
+ }
+
+ public boolean isPropertyDescriptorSortChoices(EObject self, String featureName) {
+ IItemPropertyDescriptor desc = getPropertyDescriptorForFeature(self, featureName);
+ if (desc != null) {
+ return desc.isSortChoices(self);
+ } else {
+ return false;
+ }
+ }
+
+ // Commands: createXXXCommand from ItemProviderAdapter
+
+ private void performCommand(EObject self, Class<? extends Command> cmdClass, CommandParameter param) {
+ ItemProviderAdapter ipa = getItemProviderAdapter(self);
+ if (ipa != null) {
+ EditingDomain domain = getEditingDomain(self);
+ if (domain != null) {
+ Command cmd = ipa.createCommand(self, domain, cmdClass, param);
+ CommandStack stack = domain.getCommandStack();
+ stack.execute(cmd);
+ }
+ }
+ }
+
+ public EObject performSetCommand(EObject self, String featureName, Object value, int index) {
+ EStructuralFeature feature = self.eClass().getEStructuralFeature(featureName);
+ if (feature != null) {
+ performCommand(self, SetCommand.class, new CommandParameter(self, feature, value, index));
+ }
+ return self;
+ }
+
+ public EObject performUnsetCommand(EObject self, String featureName, int index) {
+ EStructuralFeature feature = self.eClass().getEStructuralFeature(featureName);
+ if (feature != null) {
+ performCommand(self, SetCommand.class, new CommandParameter(self, feature, SetCommand.UNSET_VALUE, index));
+ }
+ return self;
+ }
+
+ public EObject performSetCommand(EObject self, String featureName, Object value) {
+ EStructuralFeature feature = self.eClass().getEStructuralFeature(featureName);
+ if (feature != null) {
+ performCommand(self, SetCommand.class, new CommandParameter(self, feature, value));
+ }
+ return self;
+ }
+
+ public EObject performUnsetCommand(EObject self, String featureName) {
+ EStructuralFeature feature = self.eClass().getEStructuralFeature(featureName);
+ if (feature != null) {
+ performCommand(self, SetCommand.class, new CommandParameter(self, feature, SetCommand.UNSET_VALUE));
+ }
+ return self;
+ }
+
+ public EObject performAddCommand(EObject self, String featureName, Collection<?> collection, int index) {
+ EStructuralFeature feature = self.eClass().getEStructuralFeature(featureName);
+ if (feature != null) {
+
+ performCommand(self, AddCommand.class, new CommandParameter(self, feature, collection, index));
+ }
+ return self;
+ }
+
+ public EObject performAddCommand(EObject self, String featureName, Collection<?> collection) {
+ EStructuralFeature feature = self.eClass().getEStructuralFeature(featureName);
+ if (feature != null) {
+ performCommand(self, AddCommand.class, new CommandParameter(self, feature, collection));
+ }
+ return self;
+ }
+
+ public EObject performRemoveCommand(EObject self, String featureName, Collection<?> collection) {
+ EStructuralFeature feature = self.eClass().getEStructuralFeature(featureName);
+ if (feature != null) {
+ performCommand(self, RemoveCommand.class, new CommandParameter(self, feature, collection));
+ }
+ return self;
+ }
+
+ public EObject performReplaceCommand(EObject self, String featureName, Object value, Collection<?> collection) {
+ EStructuralFeature feature = self.eClass().getEStructuralFeature(featureName);
+ if (feature != null) {
+ performCommand(self, ReplaceCommand.class, new CommandParameter(self, feature, value, collection));
+ }
+ return self;
+ }
+
+ public EObject performMoveCommand(EObject self, String featureName, Object value, int index) {
+ EStructuralFeature feature = self.eClass().getEStructuralFeature(featureName);
+ if (feature != null) {
+ performCommand(self, MoveCommand.class, new CommandParameter(self, feature, value, index));
+ }
+ return self;
+ }
+}

Back to the top