]> git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.ui/src/org/argeo/app/ui/publish/PublishingApp.java
Default edition layer supports SWT UI provider
[gpl/argeo-suite.git] / org.argeo.app.ui / src / org / argeo / app / ui / publish / PublishingApp.java
1 package org.argeo.app.ui.publish;
2
3 import static org.argeo.app.ui.SuiteApp.DEFAULT_THEME_ID_PROPERTY;
4 import static org.argeo.app.ui.SuiteApp.DEFAULT_UI_NAME_PROPERTY;
5
6 import java.util.HashSet;
7 import java.util.Map;
8 import java.util.Set;
9
10 import javax.jcr.Node;
11 import javax.jcr.Repository;
12 import javax.jcr.Session;
13
14 import org.argeo.api.cms.CmsApp;
15 import org.argeo.app.ui.SuiteApp;
16 import org.argeo.api.cms.CmsLog;
17 import org.argeo.api.cms.ux.CmsUi;
18 import org.argeo.cms.AbstractCmsApp;
19 import org.argeo.cms.ui.CmsUiProvider;
20 import org.argeo.jcr.Jcr;
21 import org.argeo.util.LangUtils;
22 import org.eclipse.swt.layout.GridLayout;
23 import org.eclipse.swt.widgets.Composite;
24 import org.eclipse.swt.widgets.Control;
25 import org.osgi.framework.Constants;
26 import org.osgi.service.event.Event;
27 import org.osgi.service.event.EventHandler;
28
29 /**
30 * A {@link CmsApp} dedicated to publishing, typically a public or internal web
31 * site.
32 */
33 public class PublishingApp extends AbstractCmsApp implements EventHandler {
34 private final static CmsLog log = CmsLog.getLog(PublishingApp.class);
35
36 private String pid;
37 private String defaultThemeId;
38 private String defaultUiName = "";
39
40 private String publicBasePath = null;
41
42 private CmsUiProvider landingPage;
43 private CmsUiProvider defaultProvider = new DocumentUiProvider();
44
45 private Repository repository;
46
47 public void init(Map<String, String> properties) {
48 if (properties.containsKey(DEFAULT_UI_NAME_PROPERTY))
49 defaultUiName = LangUtils.get(properties, DEFAULT_UI_NAME_PROPERTY);
50 if (properties.containsKey(DEFAULT_THEME_ID_PROPERTY))
51 defaultThemeId = LangUtils.get(properties, DEFAULT_THEME_ID_PROPERTY);
52 publicBasePath = LangUtils.get(properties, SuiteApp.PUBLIC_BASE_PATH_PROPERTY);
53 pid = properties.get(Constants.SERVICE_PID);
54
55 if (log.isDebugEnabled())
56 log.info("Publishing App " + pid + " started");
57 }
58
59 public void destroy(Map<String, String> properties) {
60 if (log.isDebugEnabled())
61 log.info("Publishing App " + pid + " stopped");
62
63 }
64
65 @Override
66 public Set<String> getUiNames() {
67 Set<String> uiNames = new HashSet<>();
68 uiNames.add(defaultUiName);
69 return uiNames;
70 }
71
72 @Override
73 public CmsUi initUi(Object uiParent) {
74 Composite parent = (Composite) uiParent;
75 // Session adminSession = NodeUtils.openDataAdminSession(getRepository(), null);
76 Session session = Jcr.login(getRepository(), null);
77 parent.setLayout(new GridLayout());
78 Node indexNode = Jcr.getNode(session, publicBasePath + "/index");
79 // try {
80 // indexNode = JcrUtils.getOrAdd(Jcr.getRootNode(adminSession), DocumentPage.WWW, DbkType.article.get());
81 // adminSession.save();
82 // } catch (RepositoryException e) {
83 // throw new IllegalStateException(e);
84 // }
85
86 Control page;
87 if (landingPage != null) {
88 page = landingPage.createUiPart(parent, indexNode);
89 } else {
90 page = defaultProvider.createUiPart(parent, indexNode);
91 }
92 return (CmsUi) page;
93 }
94
95 @Override
96 public void refreshUi(CmsUi cmsUi, String state) {
97 Composite parent = (Composite) cmsUi;
98 parent.setLayout(new GridLayout());
99 if (landingPage != null)
100 landingPage.createUiPart(parent, (Node) null);
101 else
102 defaultProvider.createUiPart(parent, (Node) null);
103 }
104
105 @Override
106 public void setState(CmsUi cmsUi, String state) {
107
108 }
109
110 @Override
111 protected String getThemeId(String uiName) {
112 return defaultThemeId;
113 }
114
115 public void setLandingPage(CmsUiProvider landingPage) {
116 this.landingPage = landingPage;
117 }
118
119 @Override
120 public void handleEvent(Event event) {
121 // TODO listen to some events
122
123 }
124
125 public Repository getRepository() {
126 return repository;
127 }
128
129 public void setRepository(Repository repository) {
130 this.repository = repository;
131 }
132
133 }