Improve ACR / JCR integration.
[lgpl/argeo-commons.git] / jcr / org.argeo.cms.ui / src / org / argeo / cms / ui / CmsUiProvider.java
index ec76321fee31e2cbcd56a4c3355f1017a07099b3..08b100efa00f0ccd9d211f1d36fa953f88edb7ad 100644 (file)
@@ -3,13 +3,16 @@ package org.argeo.cms.ui;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
-import org.argeo.api.cms.MvcProvider;
+import org.argeo.api.acr.Content;
+import org.argeo.cms.jcr.acr.JcrContent;
+import org.argeo.cms.swt.acr.SwtUiProvider;
+import org.argeo.jcr.JcrException;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 
 /** Stateless factory building an SWT user interface given a JCR context. */
 @FunctionalInterface
-public interface CmsUiProvider extends MvcProvider<Composite, Node, Control> {
+public interface CmsUiProvider extends SwtUiProvider {
        /**
         * Initialises a user interface.
         * 
@@ -18,12 +21,21 @@ public interface CmsUiProvider extends MvcProvider<Composite, Node, Control> {
         */
        Control createUi(Composite parent, Node context) throws RepositoryException;
 
-       @Override
        default Control createUiPart(Composite parent, Node context) {
                try {
                        return createUi(parent, context);
                } catch (RepositoryException e) {
-                       throw new IllegalStateException("Cannot create UI for context " + context, e);
+                       throw new JcrException("Cannot create UI for context " + context, e);
+               }
+       }
+
+       @Override
+       default Control createUiPart(Composite parent, Content context) {
+               if (context instanceof JcrContent) {
+                       Node node = ((JcrContent) context).getJcrNode();
+                       return createUiPart(parent, node);
+               } else {
+                       throw new IllegalArgumentException("Content " + context + " is not compatible with JCR");
                }
        }