diff options
| author | Pierre-Charles David | 2016-05-20 14:57:01 +0000 |
|---|---|---|
| committer | Pierre-Charles David | 2016-05-24 13:09:30 +0000 |
| commit | 3110d15a103a894399e5e66bdc69110377946e70 (patch) | |
| tree | 3e5a2efbbc26cdd867a0a48ea7975326fc77d549 | |
| parent | e9a2afbdc2e379096be447a224543ffa9ee7e7db (diff) | |
| download | org.eclipse.sirius-3110d15a103a894399e5e66bdc69110377946e70.tar.gz org.eclipse.sirius-3110d15a103a894399e5e66bdc69110377946e70.tar.xz org.eclipse.sirius-3110d15a103a894399e5e66bdc69110377946e70.zip | |
[494175] Allow specifiers to opt-out of the new properties view
If a representation description in the VSM (or any of its ancestors)
contains the special keyword FORCE_LEGACY_PROPERTIES in its
documentation field, revert to the old properties view and do not try to
use an EEFTabbedPropertySheetPage implementation.
Bug: 494175
Change-Id: I5650cadcacc93b3646d5f74f5879a39eb09c4370
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
5 files changed, 40 insertions, 3 deletions
diff --git a/incubation/org.eclipse.sirius.ui.properties/META-INF/MANIFEST.MF b/incubation/org.eclipse.sirius.ui.properties/META-INF/MANIFEST.MF index f6daaf952b..84fa2c43a0 100644 --- a/incubation/org.eclipse.sirius.ui.properties/META-INF/MANIFEST.MF +++ b/incubation/org.eclipse.sirius.ui.properties/META-INF/MANIFEST.MF @@ -25,6 +25,7 @@ Require-Bundle: org.eclipse.eef;bundle-version="1.6.0", org.eclipse.eef.ide.ui.properties;bundle-version="[1.6.0,2.0.0)", org.eclipse.sirius.ext.emf.edit;bundle-version="4.0.0" Import-Package: com.ibm.icu.util, + org.eclipse.sirius.ui.business.api.dialect;version="3.1.0", org.eclipse.sirius.ui.tools.api.properties;version="2.1.0" Bundle-Activator: org.eclipse.sirius.ui.properties.internal.SiriusUIPropertiesPlugin$Implementation Bundle-ActivationPolicy: lazy diff --git a/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/EEFPropertySheetPageProvider.java b/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/EEFPropertySheetPageProvider.java index d0b894357b..8042535033 100644 --- a/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/EEFPropertySheetPageProvider.java +++ b/incubation/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/EEFPropertySheetPageProvider.java @@ -11,7 +11,13 @@ package org.eclipse.sirius.ui.properties.internal; import org.eclipse.eef.properties.ui.api.EEFTabbedPropertySheetPage; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.sirius.ui.business.api.dialect.DialectEditor; import org.eclipse.sirius.ui.tools.api.properties.ISiriusPropertySheetPageProvider; +import org.eclipse.sirius.viewpoint.DRepresentation; +import org.eclipse.sirius.viewpoint.description.DocumentedElement; +import org.eclipse.sirius.viewpoint.description.RepresentationDescription; import org.eclipse.ui.views.properties.IPropertySheetPage; /** @@ -20,8 +26,38 @@ import org.eclipse.ui.views.properties.IPropertySheetPage; * @author pcdavid */ public class EEFPropertySheetPageProvider implements ISiriusPropertySheetPageProvider { + private static final String DESCRIPTION_REFERENCE_NAME = "description"; + @Override public IPropertySheetPage getPropertySheetPage(Object source, String contributorId) { + if (source instanceof DialectEditor) { + DialectEditor editor = (DialectEditor) source; + DRepresentation representation = editor.getRepresentation(); + if (representation != null && representation.eClass().getEStructuralFeature(EEFPropertySheetPageProvider.DESCRIPTION_REFERENCE_NAME) != null) { + EStructuralFeature ref = representation.eClass().getEStructuralFeature(EEFPropertySheetPageProvider.DESCRIPTION_REFERENCE_NAME); + Object value = representation.eGet(ref); + if (value instanceof RepresentationDescription) { + RepresentationDescription description = (RepresentationDescription) value; + if (forcesLegacyPropertySheet(description)) { + return null; + } + } + } + } return new EEFTabbedPropertySheetPage(source, contributorId); } + + private boolean forcesLegacyPropertySheet(RepresentationDescription description) { + EObject current = description; + while (current != null) { + if (current instanceof DocumentedElement) { + String doc = ((DocumentedElement) current).getDocumentation(); + if (doc != null && doc.contains("FORCE_LEGACY_PROPERTIES")) { + return true; + } + } + current = current.eContainer(); + } + return false; + } } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/SiriusDiagramEditor.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/SiriusDiagramEditor.java index bbb23de0bc..1ee0269405 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/SiriusDiagramEditor.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/SiriusDiagramEditor.java @@ -110,7 +110,7 @@ public class SiriusDiagramEditor extends DiagramDocumentEditor implements IGotoM }; } if (type == IPropertySheetPage.class) { - IPropertySheetPage contributedPage = SiriusEditPlugin.getPlugin().getPropertySheetPage(type, getContributorId()); + IPropertySheetPage contributedPage = SiriusEditPlugin.getPlugin().getPropertySheetPage(this, getContributorId()); if (contributedPage != null) { return contributedPage; } diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTreeEditor.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTreeEditor.java index 4f3398f032..74e30eb207 100644 --- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTreeEditor.java +++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/editor/AbstractDTreeEditor.java @@ -537,7 +537,7 @@ public abstract class AbstractDTreeEditor extends EditorPart Object result = super.getAdapter(type); if (result == null) { if (type == IPropertySheetPage.class) { - IPropertySheetPage contributedPage = SiriusEditPlugin.getPlugin().getPropertySheetPage(type, getContributorId()); + IPropertySheetPage contributedPage = SiriusEditPlugin.getPlugin().getPropertySheetPage(this, getContributorId()); if (contributedPage != null) { currentPropertySheetpage = null; result = contributedPage; diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerView.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerView.java index 25c66cefee..44add54dbb 100644 --- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerView.java +++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerView.java @@ -142,7 +142,7 @@ public class ModelExplorerView extends CommonNavigator implements IModelExplorer public Object getAdapter(Class type) { Object result = null; if (type == IPropertySheetPage.class) { - IPropertySheetPage contributedPage = SiriusEditPlugin.getPlugin().getPropertySheetPage(type, getContributorId()); + IPropertySheetPage contributedPage = SiriusEditPlugin.getPlugin().getPropertySheetPage(this, getContributorId()); if (contributedPage != null) { result = contributedPage; } else { |
