Introduce admin header and Reload App
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 29 Oct 2015 18:28:25 +0000 (18:28 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 29 Oct 2015 18:28:25 +0000 (18:28 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@8535 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.cms/src/org/argeo/cms/internal/ImageManagerImpl.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/Kernel.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java
org.argeo.cms/src/org/argeo/cms/util/SimpleApp.java
org.argeo.cms/src/org/argeo/cms/util/SimpleErgonomics.java

index 3171b71135c102e43a1d542fbad50ff102cc35e8..bc6dc2226b6134f8f3d757c4d8b3181e58155d3f 100644 (file)
@@ -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);
        }
index c9f9b5fe817374d78eaa3b70c8d08b2f2f73b021..a67900ca69873885e1bd551fbfcbd68c4444a0c5 100644 (file)
@@ -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();
index cce1c4ff9fbba627e2f6e1f4e624c867ef1c3780..9b43044d446a0e638a8d17292387cfcf525642d8 100644 (file)
@@ -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<Object>(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() {
index 222e43c45f70ffaacd2be05837e97382f7956ec2..e5036fe6309c5a340a79d5beffa2fe47a727db66 100644 (file)
@@ -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<String, Map<String, String>> branding = new HashMap<String, Map<String, String>>();
        private Map<String, List<String>> styleSheets = new HashMap<String, List<String>>();
 
@@ -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<String> roPrincipals = Arrays.asList("anonymous", "everyone");
        private List<String> rwPrincipals = Arrays.asList("everyone");
 
@@ -57,6 +66,8 @@ public class SimpleApp implements CmsConstants, ApplicationConfiguration,
 
        private Integer headerHeight = 40;
 
+       private ServiceRegistration<ApplicationConfiguration> 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<String, String> 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<String> 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<String, String> props = new Hashtable<String, String>();
+               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<String> 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) {
index 2555cade56338141a39b6d142acedf39cf5c9b89..e7192af0f37a70e41357c82c277f915144a18e63 100644 (file)
@@ -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();