]> git.argeo.org Git - lgpl/argeo-commons.git/blob - jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsUiProvider.java
4473498c19459b5dedc8642f7a54c00050b30d52
[lgpl/argeo-commons.git] / jcr / org.argeo.cms.ui / src / org / argeo / cms / ui / CmsUiProvider.java
1 package org.argeo.cms.ui;
2
3 import javax.jcr.Node;
4 import javax.jcr.RepositoryException;
5
6 import org.argeo.api.acr.Content;
7 import org.argeo.cms.jcr.acr.JcrContent;
8 import org.argeo.cms.swt.acr.SwtUiProvider;
9 import org.argeo.jcr.JcrException;
10 import org.eclipse.swt.widgets.Composite;
11 import org.eclipse.swt.widgets.Control;
12
13 /** Stateless factory building an SWT user interface given a JCR context. */
14 @FunctionalInterface
15 public interface CmsUiProvider extends SwtUiProvider {
16 /**
17 * Initialises a user interface.
18 *
19 * @param parent the parent composite
20 * @param context a context node (holding the JCR underlying session), or null
21 */
22 Control createUi(Composite parent, Node context) throws RepositoryException;
23
24 default Control createUiPart(Composite parent, Node context) {
25 try {
26 return createUi(parent, context);
27 } catch (RepositoryException e) {
28 throw new JcrException("Cannot create UI for context " + context, e);
29 }
30 }
31
32 @Override
33 default Control createUiPart(Composite parent, Content context) {
34 if (context == null)
35 return createUiPart(parent, (Node) null);
36 if (context instanceof JcrContent) {
37 Node node = ((JcrContent) context).getJcrNode();
38 return createUiPart(parent, node);
39 } else {
40 throw new IllegalArgumentException("Content " + context + " is not compatible with JCR");
41 }
42 }
43
44 }