You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2011/01/12 15:24:08 UTC

svn commit: r1058154 - in /sling/trunk/installer/core: ./ src/main/java/org/apache/sling/installer/core/impl/ src/main/java/org/apache/sling/installer/core/impl/console/

Author: cziegeler
Date: Wed Jan 12 14:24:08 2011
New Revision: 1058154

URL: http://svn.apache.org/viewvc?rev=1058154&view=rev
Log:
SLING-755 : jcrinstall console plugin

Added:
    sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/console/
    sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/console/OsgiInstallerWebConsolePlugin.java   (with props)
Modified:
    sling/trunk/installer/core/pom.xml
    sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/Activator.java
    sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java
    sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/PersistentResourceList.java

Modified: sling/trunk/installer/core/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/installer/core/pom.xml?rev=1058154&r1=1058153&r2=1058154&view=diff
==============================================================================
--- sling/trunk/installer/core/pom.xml (original)
+++ sling/trunk/installer/core/pom.xml Wed Jan 12 14:24:08 2011
@@ -54,6 +54,9 @@
 						<Bundle-Activator>
 							org.apache.sling.installer.core.impl.Activator
                         </Bundle-Activator>
+                        <Import-Package>
+                            javax.servlet;javax.servlet.http;resolution:=optional,*
+                        </Import-Package>
 						<Export-Package>
 							org.apache.sling.installer.api;version=3.0.0,
                             org.apache.sling.installer.api.tasks;version=1.0.0
@@ -125,6 +128,10 @@
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
       <!-- We use a class from the config admin implementation to read config files -->
         <dependency>
             <groupId>org.apache.felix</groupId>

Modified: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/Activator.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/Activator.java?rev=1058154&r1=1058153&r2=1058154&view=diff
==============================================================================
--- sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/Activator.java (original)
+++ sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/Activator.java Wed Jan 12 14:24:08 2011
@@ -26,6 +26,7 @@ import org.apache.sling.installer.api.Os
 import org.apache.sling.installer.api.tasks.InstallTaskFactory;
 import org.apache.sling.installer.api.tasks.ResourceTransformer;
 import org.apache.sling.installer.core.impl.config.ConfigTaskCreator;
+import org.apache.sling.installer.core.impl.console.OsgiInstallerWebConsolePlugin;
 import org.apache.sling.installer.core.impl.tasks.BundleTaskCreator;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
@@ -47,6 +48,9 @@ public class Activator implements Bundle
     private OsgiInstallerImpl osgiControllerService;
     private ServiceRegistration osgiControllerServiceReg;
 
+    /** Registration for the web console plugin. */
+    private ServiceRegistration webReg;
+
     /**
      * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
      */
@@ -66,12 +70,24 @@ public class Activator implements Bundle
                 OsgiInstaller.class.getName()
         };
         osgiControllerServiceReg = context.registerService(serviceInterfaces, osgiControllerService, props);
+
+        try {
+            this.webReg = OsgiInstallerWebConsolePlugin.register(context,
+                    this.osgiControllerService);
+        } catch (final Throwable ignore) {
+            // ignore this
+        }
     }
 
     /**
      * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
      */
     public void stop(final BundleContext context) {
+        // stop web console plugin
+        if ( this.webReg != null ) {
+            this.webReg.unregister();
+            this.webReg = null;
+        }
         // stop osgi installer service
         if ( this.osgiControllerService != null ) {
             this.osgiControllerService.deactivate();

Modified: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java?rev=1058154&r1=1058153&r2=1058154&view=diff
==============================================================================
--- sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java (original)
+++ sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java Wed Jan 12 14:24:08 2011
@@ -221,6 +221,14 @@ public class OsgiInstallerImpl
         }
     }
 
+    public Object getResourcesLock() {
+        return this.resourcesLock;
+    }
+
+    public PersistentResourceList getPersistentResourceList() {
+        return this.persistentList;
+    }
+
     /**
      * Create new installable resources for all installable resources.
      * The new versions has a set resource type.

Modified: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/PersistentResourceList.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/PersistentResourceList.java?rev=1058154&r1=1058153&r2=1058154&view=diff
==============================================================================
--- sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/PersistentResourceList.java (original)
+++ sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/PersistentResourceList.java Wed Jan 12 14:24:08 2011
@@ -200,6 +200,7 @@ public class PersistentResourceList {
     public List<RegisteredResource> getUnknownResources() {
         return this.unknownResources;
     }
+
     /**
      * Remove a resource by url
      * @param url The url to remove

Added: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/console/OsgiInstallerWebConsolePlugin.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/console/OsgiInstallerWebConsolePlugin.java?rev=1058154&view=auto
==============================================================================
--- sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/console/OsgiInstallerWebConsolePlugin.java (added)
+++ sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/console/OsgiInstallerWebConsolePlugin.java Wed Jan 12 14:24:08 2011
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.installer.core.impl.console;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.servlet.GenericServlet;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.apache.sling.installer.api.tasks.RegisteredResource;
+import org.apache.sling.installer.core.impl.EntityResourceList;
+import org.apache.sling.installer.core.impl.OsgiInstallerImpl;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceRegistration;
+
+@SuppressWarnings("serial")
+public class OsgiInstallerWebConsolePlugin extends GenericServlet {
+
+    private final OsgiInstallerImpl installer;
+
+    public static ServiceRegistration register(final BundleContext bundleContext,
+            final OsgiInstallerImpl installer) {
+        final OsgiInstallerWebConsolePlugin plugin = new OsgiInstallerWebConsolePlugin(
+                installer);
+        final Hashtable<String, Object> props = new Hashtable<String, Object>();
+        props.put("felix.webconsole.label", "osgi-installer");
+        props.put("felix.webconsole.title", "OSGi Installer");
+        props.put("felix.webconsole.configprinter.modes", new String[] {"zip", "txt"});
+        props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
+        props.put(Constants.SERVICE_DESCRIPTION,
+            "OSGi Installer Web Console Plugin");
+        return bundleContext.registerService("javax.servlet.Servlet", plugin,
+            props);
+    }
+
+    private OsgiInstallerWebConsolePlugin(
+            final OsgiInstallerImpl installer) {
+        this.installer = installer;
+    }
+
+    @Override
+    public void service(ServletRequest req, ServletResponse res)
+    throws IOException {
+
+        final PrintWriter pw = res.getWriter();
+
+        pw.println("<h1>Entities</h1>");
+        pw.println("<ul>");
+        synchronized ( this.installer.getResourcesLock() ) {
+            Collection<String> entities = this.installer.getPersistentResourceList().getEntityIds();
+            for (String entityId : entities) {
+                EntityResourceList erl = this.installer.getPersistentResourceList().getEntityResourceList(entityId);
+                RegisteredResource registeredResource = erl.getActiveResource();
+                if (registeredResource != null) {
+                    pw.printf("<li>%s: %s, %s, %s%n",
+                        registeredResource.getEntityId(),
+                        registeredResource.getDigest(),
+                        registeredResource.getScheme(),
+                        registeredResource.getState());
+                }
+                Collection<RegisteredResource> resources = erl.getResources();
+                if (resources.size() > 0) {
+                    pw.println("<ul>");
+                    for (RegisteredResource resource : resources) {
+                        pw.printf("<li>%s: %s, %s, %s</li>%n",
+                            resource.getEntityId(), resource.getDigest(),
+                            resource.getScheme(), resource.getState());
+                    }
+                    pw.println("</ul>");
+                }
+                pw.println("</li>");
+            }
+            pw.println("</ul>");
+
+            printUnknownResources(pw, this.installer.getPersistentResourceList().getUnknownResources());
+        }
+    }
+
+    /**
+     * Method for the configuration printer.
+     */
+    public void printConfiguration(final PrintWriter pw, final String mode) {
+        if ( !"zip".equals(mode) && !"txt".equals(mode) ) {
+            return;
+        }
+        pw.println("Apache Sling OSGi Installer");
+        pw.println("===========================");
+        pw.println("Entities:");
+        synchronized ( this.installer.getResourcesLock() ) {
+            Collection<String> entities = this.installer.getPersistentResourceList().getEntityIds();
+            for (String entityId : entities) {
+                EntityResourceList erl = this.installer.getPersistentResourceList().getEntityResourceList(entityId);
+                RegisteredResource registeredResource = erl.getActiveResource();
+                if (registeredResource != null) {
+                    pw.printf("- %s: %s, %s, %s%n",
+                        registeredResource.getEntityId(),
+                        registeredResource.getDigest(),
+                        registeredResource.getScheme(),
+                        registeredResource.getState());
+                }
+                Collection<RegisteredResource> resources = erl.getResources();
+                if (resources.size() > 0) {
+                    for (RegisteredResource resource : resources) {
+                        pw.printf("- %s: %s, %s, %s%n",
+                            resource.getEntityId(), resource.getDigest(),
+                            resource.getScheme(), resource.getState());
+                    }
+                }
+            }
+
+            pw.println();
+            pw.println("Unknown Resources:");
+            for (RegisteredResource registeredResource : this.installer.getPersistentResourceList().getUnknownResources()) {
+                pw.printf("- %s: %s, %s, %s</li>%n",
+                    registeredResource.getEntityId(),
+                    registeredResource.getDigest(), registeredResource.getScheme(),
+                    registeredResource.getState());
+            }
+        }
+    }
+
+    private void printUnknownResources(final PrintWriter pw,
+            final List<RegisteredResource> unknown) {
+        pw.println("<h1>Unknown Resources</h1>");
+        pw.println("<ul>");
+        for (RegisteredResource registeredResource : unknown) {
+            pw.printf("<li>%s: %s, %s, %s</li>%n",
+                registeredResource.getEntityId(),
+                registeredResource.getDigest(), registeredResource.getScheme(),
+                registeredResource.getState());
+        }
+        pw.println("</ul>");
+    }
+}

Propchange: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/console/OsgiInstallerWebConsolePlugin.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/console/OsgiInstallerWebConsolePlugin.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision rev url

Propchange: sling/trunk/installer/core/src/main/java/org/apache/sling/installer/core/impl/console/OsgiInstallerWebConsolePlugin.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain