Simplify project structure
[gpl/argeo-suite.git] / org.argeo.publishing.ui / src / org / argeo / publishing / ui / PublishingApp.java
diff --git a/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingApp.java b/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingApp.java
new file mode 100644 (file)
index 0000000..705eb96
--- /dev/null
@@ -0,0 +1,121 @@
+package org.argeo.publishing.ui;
+
+import static org.argeo.suite.ui.SuiteApp.DEFAULT_THEME_ID_PROPERTY;
+import static org.argeo.suite.ui.SuiteApp.DEFAULT_UI_NAME_PROPERTY;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.jcr.Node;
+import javax.jcr.Session;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.cms.ui.AbstractCmsApp;
+import org.argeo.cms.ui.CmsApp;
+import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.docbook.ui.DocumentPage;
+import org.argeo.jcr.Jcr;
+import org.argeo.suite.ui.SuiteApp;
+import org.argeo.util.LangUtils;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.osgi.framework.Constants;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventHandler;
+
+/**
+ * A {@link CmsApp} dedicated to publishing, typically a public or internal web
+ * site.
+ */
+public class PublishingApp extends AbstractCmsApp implements EventHandler {
+       private final static Log log = LogFactory.getLog(PublishingApp.class);
+
+       private String pid;
+       private String defaultThemeId;
+       private String defaultUiName = "";
+
+       private String publicBasePath = null;
+
+       private CmsUiProvider landingPage;
+       private CmsUiProvider defaultProvider = new DocumentUiProvider();
+
+       public void init(Map<String, String> properties) {
+               if (properties.containsKey(DEFAULT_UI_NAME_PROPERTY))
+                       defaultUiName = LangUtils.get(properties, DEFAULT_UI_NAME_PROPERTY);
+               if (properties.containsKey(DEFAULT_THEME_ID_PROPERTY))
+                       defaultThemeId = LangUtils.get(properties, DEFAULT_THEME_ID_PROPERTY);
+               publicBasePath = LangUtils.get(properties, SuiteApp.PUBLIC_BASE_PATH_PROPERTY);
+               pid = properties.get(Constants.SERVICE_PID);
+
+               if (log.isDebugEnabled())
+                       log.info("Publishing App " + pid + " started");
+       }
+
+       public void destroy(Map<String, String> properties) {
+               if (log.isDebugEnabled())
+                       log.info("Publishing App " + pid + " stopped");
+
+       }
+
+       @Override
+       public Set<String> getUiNames() {
+               Set<String> uiNames = new HashSet<>();
+               uiNames.add(defaultUiName);
+               return uiNames;
+       }
+
+       @Override
+       public Composite initUi(Composite parent) {
+//             Session adminSession = NodeUtils.openDataAdminSession(getRepository(), null);
+               Session session = Jcr.login(getRepository(), null);
+               parent.setLayout(new GridLayout());
+               Node indexNode = Jcr.getNode(session, publicBasePath + "/index");
+//             try {
+//                     indexNode = JcrUtils.getOrAdd(Jcr.getRootNode(adminSession), DocumentPage.WWW, DbkType.article.get());
+//                     adminSession.save();
+//             } catch (RepositoryException e) {
+//                     throw new IllegalStateException(e);
+//             }
+
+               Control page;
+               if (landingPage != null) {
+                       page = landingPage.createUiPart(parent, indexNode);
+               } else {
+                       page = defaultProvider.createUiPart(parent, indexNode);
+               }
+               return (Composite) page;
+       }
+
+       @Override
+       public void refreshUi(Composite parent, String state) {
+               parent.setLayout(new GridLayout());
+               if (landingPage != null)
+                       landingPage.createUiPart(parent, null);
+               else
+                       defaultProvider.createUiPart(parent, null);
+       }
+
+       @Override
+       public void setState(Composite parent, String state) {
+
+       }
+
+       @Override
+       protected String getThemeId(String uiName) {
+               return defaultThemeId;
+       }
+
+       public void setLandingPage(CmsUiProvider landingPage) {
+               this.landingPage = landingPage;
+       }
+
+       @Override
+       public void handleEvent(Event event) {
+               // TODO listen to some events
+
+       }
+
+}