X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.publishing.ui%2Fsrc%2Forg%2Fargeo%2Fpublishing%2Fui%2FPublishingApp.java;fp=org.argeo.publishing.ui%2Fsrc%2Forg%2Fargeo%2Fpublishing%2Fui%2FPublishingApp.java;h=705eb96facadc4a415211beffa0e83135dc79695;hb=3440f51df3e4c015972c7b6a0efb3ce16188b89b;hp=0000000000000000000000000000000000000000;hpb=752a7b2614895002a3d184be166ef4162caf0d05;p=gpl%2Fargeo-suite.git 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 index 0000000..705eb96 --- /dev/null +++ b/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingApp.java @@ -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 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 properties) { + if (log.isDebugEnabled()) + log.info("Publishing App " + pid + " stopped"); + + } + + @Override + public Set getUiNames() { + Set 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 + + } + +}