From: Mathieu Baudier Date: Thu, 29 Oct 2015 18:28:25 +0000 (+0000) Subject: Introduce admin header and Reload App X-Git-Tag: argeo-commons-2.1.30~54 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=3d611c76cc8df95ab66d27307acf9521c3130556;p=lgpl%2Fargeo-commons.git Introduce admin header and Reload App git-svn-id: https://svn.argeo.org/commons/trunk@8535 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.cms/src/org/argeo/cms/internal/ImageManagerImpl.java b/org.argeo.cms/src/org/argeo/cms/internal/ImageManagerImpl.java index 3171b7113..bc6dc2226 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/ImageManagerImpl.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/ImageManagerImpl.java @@ -178,8 +178,8 @@ public class ImageManagerImpl implements CmsImageManager, CmsNames { IOUtils.closeQuietly(inputStream); JcrUtils.closeQuietly(binary); } - if (log.isDebugEnabled()) - log.debug("Registered image " + name); + if (log.isTraceEnabled()) + log.trace("Registered image " + name); } return resourceManager.getLocation(name); } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/Kernel.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/Kernel.java index c9f9b5fe8..a67900ca6 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/Kernel.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/Kernel.java @@ -142,6 +142,8 @@ final class Kernel implements KernelHeader, KernelConstants, ServiceListener { logger = new NodeLogger(logReaderService.getService()); logReaderService.close(); + // KernelUtils.logFrameworkProperties(log); + // Initialise services initTransactionManager(); repository = new NodeRepository(); diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java index cce1c4ff9..9b43044d4 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java @@ -7,6 +7,7 @@ import java.util.Dictionary; import java.util.Enumeration; import java.util.Hashtable; import java.util.Properties; +import java.util.TreeSet; import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; @@ -17,7 +18,6 @@ import org.apache.commons.logging.Log; import org.argeo.cms.CmsException; import org.argeo.cms.auth.AuthConstants; import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; /** Package utilities */ class KernelUtils implements KernelConstants { @@ -144,15 +144,19 @@ class KernelUtils implements KernelConstants { static void logFrameworkProperties(Log log) { BundleContext bc = Activator.getBundleContext(); - String[] keys = { Constants.FRAMEWORK_STORAGE, - Constants.FRAMEWORK_OS_NAME, Constants.FRAMEWORK_OS_VERSION, - Constants.FRAMEWORK_PROCESSOR, Constants.FRAMEWORK_SECURITY, - Constants.FRAMEWORK_TRUST_REPOSITORIES, - Constants.FRAMEWORK_WINDOWSYSTEM, Constants.FRAMEWORK_VENDOR, - Constants.FRAMEWORK_VERSION, Constants.FRAMEWORK_STORAGE_CLEAN, - Constants.FRAMEWORK_LANGUAGE, Constants.FRAMEWORK_UUID }; - for (String key : keys) - log.debug(key + "=" + bc.getProperty(key)); + for (Object sysProp : new TreeSet(System.getProperties() + .keySet())) { + log.debug(sysProp + "=" + bc.getProperty(sysProp.toString())); + } + // String[] keys = { Constants.FRAMEWORK_STORAGE, + // Constants.FRAMEWORK_OS_NAME, Constants.FRAMEWORK_OS_VERSION, + // Constants.FRAMEWORK_PROCESSOR, Constants.FRAMEWORK_SECURITY, + // Constants.FRAMEWORK_TRUST_REPOSITORIES, + // Constants.FRAMEWORK_WINDOWSYSTEM, Constants.FRAMEWORK_VENDOR, + // Constants.FRAMEWORK_VERSION, Constants.FRAMEWORK_STORAGE_CLEAN, + // Constants.FRAMEWORK_LANGUAGE, Constants.FRAMEWORK_UUID }; + // for (String key : keys) + // log.debug(key + "=" + bc.getProperty(key)); } private KernelUtils() { diff --git a/org.argeo.cms/src/org/argeo/cms/util/SimpleApp.java b/org.argeo.cms/src/org/argeo/cms/util/SimpleApp.java index 222e43c45..e5036fe63 100644 --- a/org.argeo.cms/src/org/argeo/cms/util/SimpleApp.java +++ b/org.argeo.cms/src/org/argeo/cms/util/SimpleApp.java @@ -5,6 +5,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -22,7 +23,7 @@ import org.argeo.cms.CmsException; import org.argeo.cms.CmsUiProvider; import org.argeo.cms.LifeCycleUiProvider; import org.argeo.jcr.JcrUtils; -import org.eclipse.gemini.blueprint.context.BundleContextAware; +import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.application.Application; import org.eclipse.rap.rwt.application.Application.OperationMode; import org.eclipse.rap.rwt.application.ApplicationConfiguration; @@ -30,15 +31,23 @@ import org.eclipse.rap.rwt.application.EntryPoint; import org.eclipse.rap.rwt.application.EntryPointFactory; import org.eclipse.rap.rwt.application.ExceptionHandler; import org.eclipse.rap.rwt.client.WebClient; +import org.eclipse.rap.rwt.client.service.JavaScriptExecutor; import org.eclipse.rap.rwt.service.ResourceLoader; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; /** A basic generic app based on {@link SimpleErgonomics}. */ -public class SimpleApp implements CmsConstants, ApplicationConfiguration, - BundleContextAware { +public class SimpleApp implements CmsConstants, ApplicationConfiguration { private final static Log log = LogFactory.getLog(SimpleApp.class); + private String contextName = null; + private Map> branding = new HashMap>(); private Map> styleSheets = new HashMap>(); @@ -48,7 +57,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, private Repository repository; private String workspace = null; - private String basePath = "/"; + private String jcrBasePath = "/"; private List roPrincipals = Arrays.asList("anonymous", "everyone"); private List rwPrincipals = Arrays.asList("everyone"); @@ -57,6 +66,8 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, private Integer headerHeight = 40; + private ServiceRegistration appReg; + public void configure(Application application) { try { StyleSheetResourceLoader styleSheetRL = new StyleSheetResourceLoader( @@ -78,7 +89,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, for (String resource : resources) { application.addResource(resource, bundleRL); if (log.isDebugEnabled()) - log.debug("Registered resource " + resource); + log.debug("Resource " + resource); } Map defaultBranding = null; @@ -98,7 +109,7 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, application.addResource(faviconRelPath, new BundleResourceLoader(bundleContext)); if (log.isTraceEnabled()) - log.trace("Registered favicon " + faviconRelPath); + log.trace("Favicon " + faviconRelPath); } @@ -121,14 +132,18 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, application.addEntryPoint("/" + page, new CmsEntryPointFactory( pages.get(page), repository, workspace, properties), properties); - log.info("Registered entry point /" + page); + log.info("Page /" + page); } // stylesheets for (String themeId : styleSheets.keySet()) { List cssLst = styleSheets.get(themeId); + if (log.isDebugEnabled()) + log.debug("Theme " + themeId); for (String css : cssLst) { application.addStyleSheet(themeId, css, styleSheetRL); + if (log.isDebugEnabled()) + log.debug(" CSS " + css); } } @@ -147,12 +162,12 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, VersionManager vm = session.getWorkspace().getVersionManager(); if (!vm.isCheckedOut("/")) vm.checkout("/"); - JcrUtils.mkdirs(session, basePath); + JcrUtils.mkdirs(session, jcrBasePath); for (String principal : rwPrincipals) - JcrUtils.addPrivilege(session, basePath, principal, + JcrUtils.addPrivilege(session, jcrBasePath, principal, Privilege.JCR_WRITE); for (String principal : roPrincipals) - JcrUtils.addPrivilege(session, basePath, principal, + JcrUtils.addPrivilege(session, jcrBasePath, principal, Privilege.JCR_READ); for (String pageName : pages.keySet()) { @@ -168,6 +183,9 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, } finally { JcrUtils.logoutQuietly(session); } + + // publish to OSGi + register(); } protected void initPage(Session adminSession, CmsUiProvider page) @@ -188,6 +206,23 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, } } + protected void register() { + Hashtable props = new Hashtable(); + if (contextName != null) + props.put("contextName", contextName); + appReg = bundleContext.registerService(ApplicationConfiguration.class, + this, props); + if (log.isDebugEnabled()) + log.debug("Registered " + (contextName == null ? "/" : contextName)); + } + + protected void unregister() { + appReg.unregister(); + if (log.isDebugEnabled()) + log.debug("Unregistered " + + (contextName == null ? "/" : contextName)); + } + public void setRepository(Repository repository) { this.repository = repository; } @@ -204,8 +239,8 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, this.pages = pages; } - public void setBasePath(String basePath) { - this.basePath = basePath; + public void setJcrBasePath(String basePath) { + this.jcrBasePath = basePath; } public void setRoPrincipals(List roPrincipals) { @@ -262,12 +297,30 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, @Override public EntryPoint create() { SimpleErgonomics entryPoint = new SimpleErgonomics(repository, - workspace, basePath, page, properties) { + workspace, jcrBasePath, page, properties) { @Override - protected void initUi(Composite parent) { - // TODO Auto-generated method stub - super.initUi(parent); + protected void createAdminArea(Composite parent) { + Composite adminArea = new Composite(parent, SWT.NONE); + adminArea.setLayout(new FillLayout()); + Button refresh = new Button(adminArea, SWT.PUSH); + refresh.setText("Reload App"); + refresh.addSelectionListener(new SelectionAdapter() { + private static final long serialVersionUID = -7671999525536351366L; + + @Override + public void widgetSelected(SelectionEvent e) { + long timeBeforeReload = 1000; + RWT.getClient() + .getService(JavaScriptExecutor.class) + .execute( + "setTimeout(function() { " + + "location.reload();" + + "}," + timeBeforeReload + + ");"); + reloadApp(); + } + }); } }; // entryPoint.setState(""); @@ -277,6 +330,15 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration, return entryPoint; } + private void reloadApp() { + new Thread("Refresh app") { + @Override + public void run() { + unregister(); + register(); + } + }.start(); + } } private static ResourceLoader createResourceLoader(final String resourceName) { diff --git a/org.argeo.cms/src/org/argeo/cms/util/SimpleErgonomics.java b/org.argeo.cms/src/org/argeo/cms/util/SimpleErgonomics.java index 2555cade5..e7192af0f 100644 --- a/org.argeo.cms/src/org/argeo/cms/util/SimpleErgonomics.java +++ b/org.argeo.cms/src/org/argeo/cms/util/SimpleErgonomics.java @@ -34,7 +34,6 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { private Integer headerHeight = 40; private CmsImageManager imageManager = new ImageManagerImpl(); - private UxContext uxContext = null; public SimpleErgonomics(Repository repository, String workspace, @@ -49,6 +48,7 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); parent.setLayout(CmsUtils.noSpaceGridLayout()); + // createAdminArea(parent); headerArea = new Composite(parent, SWT.NONE); headerArea.setLayout(new FillLayout()); GridData headerData = new GridData(SWT.FILL, SWT.FILL, false, false); @@ -76,6 +76,9 @@ public class SimpleErgonomics extends AbstractCmsEntryPoint { log.trace("UI refreshed " + getNode()); } + protected void createAdminArea(Composite parent) { + } + protected void refreshHeader() { for (Control child : headerArea.getChildren()) child.dispose();