|
@@ -0,0 +1,124 @@
|
|
|
+/**
|
|
|
+ * Copyright (c) 2011 itemis AG and others.
|
|
|
+ * 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:
|
|
|
+ * itemis AG - initial API and implementation
|
|
|
+ *
|
|
|
+ */
|
|
|
+package de.itemis.gmf.runtime.commons.properties;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Iterator;
|
|
|
+
|
|
|
+import org.eclipse.core.runtime.IAdaptable;
|
|
|
+import org.eclipse.emf.common.notify.AdapterFactory;
|
|
|
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
|
|
|
+import org.eclipse.emf.edit.provider.IItemPropertySource;
|
|
|
+import org.eclipse.emf.edit.ui.provider.PropertySource;
|
|
|
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
|
|
|
+import org.eclipse.emf.transaction.util.TransactionUtil;
|
|
|
+import org.eclipse.gef.EditPart;
|
|
|
+import org.eclipse.gmf.runtime.diagram.ui.properties.sections.AdvancedPropertySection;
|
|
|
+import org.eclipse.gmf.runtime.notation.View;
|
|
|
+import org.eclipse.jface.viewers.ISelection;
|
|
|
+import org.eclipse.jface.viewers.StructuredSelection;
|
|
|
+import org.eclipse.ui.IWorkbenchPart;
|
|
|
+import org.eclipse.ui.views.properties.IPropertySource;
|
|
|
+import org.eclipse.ui.views.properties.IPropertySourceProvider;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Copied from GMF Tooling generated code. Property Section, that uses
|
|
|
+ * {@link IItemPropertySource} generated by EMF (edit plugin) to display
|
|
|
+ * semantic model information in the property section.
|
|
|
+ *
|
|
|
+ * @author andreas muelder (andreas.muelder@itemis.de)
|
|
|
+ *
|
|
|
+ */
|
|
|
+public class SemanticPropertySection extends AdvancedPropertySection implements
|
|
|
+ IPropertySourceProvider {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPropertySource getPropertySource(final Object object) {
|
|
|
+ if (object instanceof IPropertySource) {
|
|
|
+ return (IPropertySource) object;
|
|
|
+ }
|
|
|
+ final AdapterFactory af = getAdapterFactory(object);
|
|
|
+ if (af != null) {
|
|
|
+ final IItemPropertySource ips = (IItemPropertySource) af.adapt(
|
|
|
+ object, IItemPropertySource.class);
|
|
|
+ if (ips != null) {
|
|
|
+ return new PropertySource(object, ips);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (object instanceof IAdaptable) {
|
|
|
+ return (IPropertySource) ((IAdaptable) object)
|
|
|
+ .getAdapter(IPropertySource.class);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected IPropertySourceProvider getPropertySourceProvider() {
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Modify/unwrap selection.
|
|
|
+ */
|
|
|
+ protected Object transformSelection(final Object selected) {
|
|
|
+
|
|
|
+ if (selected instanceof EditPart) {
|
|
|
+ final Object model = ((EditPart) selected).getModel();
|
|
|
+ return model instanceof View ? ((View) model).getElement() : null;
|
|
|
+ }
|
|
|
+ if (selected instanceof View) {
|
|
|
+ return ((View) selected).getElement();
|
|
|
+ }
|
|
|
+ if (selected instanceof IAdaptable) {
|
|
|
+ final View view = (View) ((IAdaptable) selected)
|
|
|
+ .getAdapter(View.class);
|
|
|
+ if (view != null) {
|
|
|
+ return view.getElement();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return selected;
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings({ "rawtypes", "unchecked" })
|
|
|
+ @Override
|
|
|
+ public void setInput(final IWorkbenchPart part, final ISelection selection) {
|
|
|
+ if (selection.isEmpty()
|
|
|
+ || false == selection instanceof StructuredSelection) {
|
|
|
+ super.setInput(part, selection);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ final StructuredSelection structuredSelection = ((StructuredSelection) selection);
|
|
|
+ final ArrayList transformedSelection = new ArrayList(
|
|
|
+ structuredSelection.size());
|
|
|
+ for (final Iterator it = structuredSelection.iterator(); it.hasNext();) {
|
|
|
+ final Object r = transformSelection(it.next());
|
|
|
+ if (r != null) {
|
|
|
+ transformedSelection.add(r);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ super.setInput(part, new StructuredSelection(transformedSelection));
|
|
|
+ }
|
|
|
+
|
|
|
+ protected AdapterFactory getAdapterFactory(final Object object) {
|
|
|
+ if (getEditingDomain() instanceof AdapterFactoryEditingDomain) {
|
|
|
+ return ((AdapterFactoryEditingDomain) getEditingDomain())
|
|
|
+ .getAdapterFactory();
|
|
|
+ }
|
|
|
+ final TransactionalEditingDomain editingDomain = TransactionUtil
|
|
|
+ .getEditingDomain(object);
|
|
|
+ if (editingDomain != null) {
|
|
|
+ return ((AdapterFactoryEditingDomain) editingDomain)
|
|
|
+ .getAdapterFactory();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+}
|