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