Bug 545069 - GenericEditor should support validation on tree
Change-Id: I98d131a86c0e6ea73fb92986e1e86a325c3aa185
Signed-off-by: Eugen Neufeld <eneufeld@eclipsesource.com>
diff --git a/bundles/org.eclipse.emfforms.editor/META-INF/MANIFEST.MF b/bundles/org.eclipse.emfforms.editor/META-INF/MANIFEST.MF
index 28ce25e..333a85a 100644
--- a/bundles/org.eclipse.emfforms.editor/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.emfforms.editor/META-INF/MANIFEST.MF
@@ -29,7 +29,8 @@
org.eclipse.emfforms.core.services;bundle-version="[1.20.0,1.21.0)",
org.eclipse.emfforms.core.services.editsupport;bundle-version="[1.20.0,1.21.0)",
org.eclipse.emfforms.swt.treemasterdetail;bundle-version="[1.20.0,1.21.0)",
- org.eclipse.emf.ecp.view.validation;bundle-version="[1.20.0,1.21.0)"
+ org.eclipse.emf.ecp.view.validation;bundle-version="[1.20.0,1.21.0)",
+ org.eclipse.emfforms.swt.treemasterdetail.decorator.validation.default;bundle-version="[1.20.0,1.21.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Import-Package: org.eclipse.emfforms.spi.swt.core.di;version="[1.20.0,1.21.0)"
diff --git a/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/GenericEditor.java b/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/GenericEditor.java
index b3c2185..420f62a 100644
--- a/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/GenericEditor.java
+++ b/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/GenericEditor.java
@@ -69,13 +69,16 @@
import org.eclipse.emfforms.spi.swt.treemasterdetail.MenuProvider;
import org.eclipse.emfforms.spi.swt.treemasterdetail.TreeMasterDetailComposite;
import org.eclipse.emfforms.spi.swt.treemasterdetail.TreeMasterDetailMenuListener;
+import org.eclipse.emfforms.spi.swt.treemasterdetail.TreeMasterDetailSWTBuilder;
import org.eclipse.emfforms.spi.swt.treemasterdetail.TreeMasterDetailSWTFactory;
import org.eclipse.emfforms.spi.swt.treemasterdetail.TreeViewerBuilder;
import org.eclipse.emfforms.spi.swt.treemasterdetail.actions.ActionCollector;
import org.eclipse.emfforms.spi.swt.treemasterdetail.actions.MasterDetailAction;
+import org.eclipse.emfforms.spi.swt.treemasterdetail.decorator.validation.ecp.ECPValidationLabelDecoratorProvider;
import org.eclipse.emfforms.spi.swt.treemasterdetail.diagnostic.DiagnosticCache;
import org.eclipse.emfforms.spi.swt.treemasterdetail.diagnostic.DiagnosticCache.ValidationListener;
import org.eclipse.emfforms.spi.swt.treemasterdetail.util.CreateElementCallback;
+import org.eclipse.emfforms.spi.swt.treemasterdetail.util.RootObject;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
@@ -382,12 +385,26 @@
IResource.DEPTH_ZERO);
}
- private void setupDiagnosticCache(Object editorInput) {
- if (!Notifier.class.isInstance(editorInput)) {
- return;
+ /**
+ * Get the Notifier from the tree input.
+ *
+ * @param editorInput The editor input to transform
+ * @return {@link Notifier}
+ * @throws IllegalStateException if the editor input is not a Notifier
+ */
+ protected Notifier getNotifierFromEditorInput(Object editorInput) {
+ Object input = editorInput;
+ if (input instanceof RootObject) {
+ input = ((RootObject) input).getRoot();
}
- final Notifier input = (Notifier) editorInput;
- cache = createDiangosticCache(input);
+ if (!Notifier.class.isInstance(input)) {
+ throw new IllegalStateException("The editor input is not a Notifier!"); //$NON-NLS-1$
+ }
+ return (Notifier) input;
+ }
+
+ private void setupDiagnosticCache(Object editorInput) {
+ cache = createDiangosticCache(getNotifierFromEditorInput(editorInput));
}
/**
@@ -474,7 +491,7 @@
final Composite composite,
Object editorInput,
final CreateElementCallback createElementCallback) {
- final TreeMasterDetailComposite treeMasterDetail = TreeMasterDetailSWTFactory
+ final TreeMasterDetailSWTBuilder builder = TreeMasterDetailSWTFactory
.fillDefaults(composite, SWT.NONE, editorInput)
.customizeCildCreation(createElementCallback)
.customizeMenu(new MenuProvider() {
@@ -493,8 +510,14 @@
}
})
- .customizeTree(createTreeViewerBuilder())
- .create();
+ .customizeTree(createTreeViewerBuilder());
+
+ if (enableValidation()) {
+ builder.customizeLabelDecorator(
+ new ECPValidationLabelDecoratorProvider(getNotifierFromEditorInput(editorInput), getDiagnosticCache()));
+ }
+
+ final TreeMasterDetailComposite treeMasterDetail = builder.create();
return treeMasterDetail;
}