X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Fpublish%2FPublishingApp.java;fp=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Fpublish%2FPublishingApp.java;h=d57706cf8ac438248008c9989d72dc899af9bfdb;hp=0000000000000000000000000000000000000000;hb=6e56ffa34cb02ab04d028423aea342e3dfed4358;hpb=c285180bece610b2c2921d44fe14b6dde2123efa diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/publish/PublishingApp.java b/org.argeo.app.ui/src/org/argeo/app/ui/publish/PublishingApp.java new file mode 100644 index 0000000..d57706c --- /dev/null +++ b/org.argeo.app.ui/src/org/argeo/app/ui/publish/PublishingApp.java @@ -0,0 +1,133 @@ +package org.argeo.app.ui.publish; + +import static org.argeo.app.ui.SuiteApp.DEFAULT_THEME_ID_PROPERTY; +import static org.argeo.app.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.Repository; +import javax.jcr.Session; + +import org.argeo.api.cms.CmsApp; +import org.argeo.api.cms.CmsUi; +import org.argeo.app.ui.SuiteApp; +import org.argeo.api.cms.CmsLog; +import org.argeo.cms.AbstractCmsApp; +import org.argeo.cms.ui.CmsUiProvider; +import org.argeo.jcr.Jcr; +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 CmsLog log = CmsLog.getLog(PublishingApp.class); + + private String pid; + private String defaultThemeId; + private String defaultUiName = ""; + + private String publicBasePath = null; + + private CmsUiProvider landingPage; + private CmsUiProvider defaultProvider = new DocumentUiProvider(); + + private Repository repository; + + 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 CmsUi initUi(Object uiParent) { + Composite parent = (Composite) uiParent; +// 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 (CmsUi) page; + } + + @Override + public void refreshUi(CmsUi cmsUi, String state) { + Composite parent = (Composite) cmsUi; + parent.setLayout(new GridLayout()); + if (landingPage != null) + landingPage.createUiPart(parent, null); + else + defaultProvider.createUiPart(parent, null); + } + + @Override + public void setState(CmsUi cmsUi, 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 + + } + + public Repository getRepository() { + return repository; + } + + public void setRepository(Repository repository) { + this.repository = repository; + } + +}