]> git.argeo.org Git - gpl/argeo-suite.git/blob - publishing/ui/PublishingApp.java
Prepare next development cycle
[gpl/argeo-suite.git] / publishing / ui / PublishingApp.java
1 package org.argeo.publishing.ui;
2
3 import static org.argeo.suite.ui.SuiteApp.DEFAULT_THEME_ID_PROPERTY;
4 import static org.argeo.suite.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.RepositoryException;
12 import javax.jcr.Session;
13
14 import org.apache.commons.logging.Log;
15 import org.apache.commons.logging.LogFactory;
16 import org.argeo.api.NodeUtils;
17 import org.argeo.cms.ui.AbstractCmsApp;
18 import org.argeo.cms.ui.CmsApp;
19 import org.argeo.cms.ui.CmsUiProvider;
20 import org.argeo.docbook.DbkType;
21 import org.argeo.docbook.ui.DocumentPage;
22 import org.argeo.jcr.Jcr;
23 import org.argeo.jcr.JcrUtils;
24 import org.argeo.util.LangUtils;
25 import org.eclipse.swt.layout.GridLayout;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Control;
28 import org.osgi.framework.Constants;
29
30 /**
31 * A {@link CmsApp} dedicated to publishing, typically a public or internal web
32 * site.
33 */
34 public class PublishingApp extends AbstractCmsApp {
35 private final static Log log = LogFactory.getLog(PublishingApp.class);
36
37 private String pid;
38 private String defaultThemeId;
39 private String defaultUiName = "";
40
41 private CmsUiProvider landingPage;
42
43 public void init(Map<String, String> properties) {
44 if (properties.containsKey(DEFAULT_UI_NAME_PROPERTY))
45 defaultUiName = LangUtils.get(properties, DEFAULT_UI_NAME_PROPERTY);
46 if (properties.containsKey(DEFAULT_THEME_ID_PROPERTY))
47 defaultThemeId = LangUtils.get(properties, DEFAULT_THEME_ID_PROPERTY);
48 pid = properties.get(Constants.SERVICE_PID);
49
50 if (log.isDebugEnabled())
51 log.info("Publishing App " + pid + " started");
52 }
53
54 public void destroy(Map<String, String> properties) {
55 if (log.isDebugEnabled())
56 log.info("Publishing App " + pid + " stopped");
57
58 }
59
60 @Override
61 public Set<String> getUiNames() {
62 Set<String> uiNames = new HashSet<>();
63 uiNames.add(defaultUiName);
64 return uiNames;
65 }
66
67 @Override
68 public Composite initUi(Composite parent) {
69 Session adminSession = NodeUtils.openDataAdminSession(getRepository(), null);
70 parent.setLayout(new GridLayout());
71 Node indexNode;
72 try {
73 indexNode = JcrUtils.getOrAdd(Jcr.getRootNode(adminSession), DocumentPage.WWW, DbkType.article.get());
74 adminSession.save();
75 } catch (RepositoryException e) {
76 throw new IllegalStateException(e);
77 }
78
79 Control page;
80 if (landingPage != null) {
81 page = landingPage.createUiPart(parent, indexNode);
82 } else {
83 page = new DocumentPage().createUiPart(parent, indexNode);
84 }
85 return (Composite) page;
86 }
87
88 @Override
89 public void refreshUi(Composite parent, String state) {
90 parent.setLayout(new GridLayout());
91 new DocumentPage().createUiPart(parent, null);
92 }
93
94 @Override
95 public void setState(Composite parent, String state) {
96
97 }
98
99 @Override
100 protected String getThemeId(String uiName) {
101 return defaultThemeId;
102 }
103
104 public void setLandingPage(CmsUiProvider landingPage) {
105 this.landingPage = landingPage;
106 }
107
108 }