Commit 9a7ad57d authored by Snejana Bisa's avatar Snejana Bisa Committed by Balazs Grill
Browse files

Bug 570615 - Advanced property section shows no properties for


IWrapperItemProvider elements

Ensured IPropertySourceProvider can be retrieved for WrapperItemProvider
elements when no cached IPropertySourceProvider is available

Change-Id: Ia36bd2eb1b336881c1b05317b5cb4b39cb54b4a1
Signed-off-by: default avatarSnejana Bisa <snejana_b@yahoo.com>
parent 9f571c2e
Loading
Loading
Loading
Loading
+25 −7
Original line number Diff line number Diff line
@@ -30,11 +30,13 @@ import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.ui.celleditor.ExtendedDialogCellEditor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.util.FeatureMap;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.FeatureMapEntryWrapperItemProvider;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.emf.edit.provider.IItemPropertySource;
import org.eclipse.emf.edit.provider.ItemProviderAdapter;
import org.eclipse.emf.edit.provider.WrapperItemProvider;
import org.eclipse.emf.edit.ui.provider.PropertyDescriptor;
import org.eclipse.emf.edit.ui.provider.PropertySource;
import org.eclipse.emf.transaction.NotificationFilter;
@@ -247,7 +249,7 @@ public class BasicTransactionalAdvancedPropertySection extends AdvancedPropertyS
			// Try to retrieve model property source provider for given object and remember it so as to have it at hand
			// for subsequent objects for which no property source provider can be retrieved (e.g., FeatureMap.Entry
			// objects with primitive values)
			TransactionalEditingDomain editingDomain = TransactionUtil.getEditingDomain(object);
			TransactionalEditingDomain editingDomain = getEditingDomain(object);
			if (editingDomain != null) {
				lastPropertySourceProviderDelegate = createModelPropertySourceProvider(editingDomain);
			}
@@ -264,12 +266,28 @@ public class BasicTransactionalAdvancedPropertySection extends AdvancedPropertyS
		// Let Eclipse Platform try to find a property source adapter for objects that are not supported by EMF.Edit
		if (object instanceof IAdaptable) {
			IAdaptable adaptable = (IAdaptable) object;
			return (IPropertySource) adaptable.getAdapter(IPropertySource.class);
			return adaptable.getAdapter(IPropertySource.class);
		}

		return null;
	}

	private TransactionalEditingDomain getEditingDomain(Object object) {

		TransactionalEditingDomain editingDomain = null;
		if (object instanceof WrapperItemProvider) {
			Object wrappedValue = ((WrapperItemProvider) object).getValue();
			if (wrappedValue instanceof FeatureMap.Entry) {
				Object value = ((FeatureMap.Entry) wrappedValue).getValue();
				editingDomain = TransactionUtil.getEditingDomain(value);
			}
		} else {
			editingDomain = TransactionUtil.getEditingDomain(object);
		}
		return editingDomain;

	}

	protected IPropertySourceProvider createModelPropertySourceProvider(TransactionalEditingDomain editingDomain) {
		Assert.isNotNull(editingDomain);

@@ -354,9 +372,9 @@ public class BasicTransactionalAdvancedPropertySection extends AdvancedPropertyS
	 * </p>
	 *
	 * @return The custom {@link AdapterFactory adapter factory} that is to be used by this
	 *         {@link BasicModelEditActionProvider action provider}. <code>null</code> the default
	 *         {@link AdapterFactory adapter factory} returned by {@link #getAdapterFactory(TransactionalEditingDomain)}
	 *         should be used instead.
	 *         {@link BasicModelEditActionProvider action provider}. <code>null</code> the default {@link AdapterFactory
	 *         adapter factory} returned by {@link #getAdapterFactory(TransactionalEditingDomain)} should be used
	 *         instead.
	 * @see #getAdapterFactory(TransactionalEditingDomain)
	 */
	protected AdapterFactory getCustomAdapterFactory() {
@@ -403,8 +421,8 @@ public class BasicTransactionalAdvancedPropertySection extends AdvancedPropertyS
									@Override
									protected Object openDialogBox(Control cellEditorWindow) {
										ProxyURIFeatureEditorDialog dialog = new ProxyURIFeatureEditorDialog(cellEditorWindow.getShell(),
												editLabelProvider, eObject, reference, propertyDescriptor.getDisplayName(), new ArrayList<Object>(
														choiceOfValues), false, itemPropertyDescriptor.isSortChoices(eObject));
												editLabelProvider, eObject, reference, propertyDescriptor.getDisplayName(),
												new ArrayList<Object>(choiceOfValues), false, itemPropertyDescriptor.isSortChoices(eObject));
										dialog.open();
										return dialog.getResult();
									}