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 2008/08/22 10:28:20 UTC

svn commit: r688017 - in /incubator/sling/whiteboard/jcrinstall: pom.xml src/main/java/org/apache/sling/jcr/jcrinstall/JcrInstall.java

Author: cziegeler
Date: Fri Aug 22 01:28:20 2008
New Revision: 688017

URL: http://svn.apache.org/viewvc?rev=688017&view=rev
Log:
Add initial support for deployment packages.

Modified:
    incubator/sling/whiteboard/jcrinstall/pom.xml
    incubator/sling/whiteboard/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/JcrInstall.java

Modified: incubator/sling/whiteboard/jcrinstall/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sling/whiteboard/jcrinstall/pom.xml?rev=688017&r1=688016&r2=688017&view=diff
==============================================================================
--- incubator/sling/whiteboard/jcrinstall/pom.xml (original)
+++ incubator/sling/whiteboard/jcrinstall/pom.xml Fri Aug 22 01:28:20 2008
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>1-incubator-SNAPSHOT</version>
+        <version>4-incubator-SNAPSHOT</version>
         <relativePath>../head/parent/pom.xml</relativePath>
     </parent>
 

Modified: incubator/sling/whiteboard/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/JcrInstall.java
URL: http://svn.apache.org/viewvc/incubator/sling/whiteboard/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/JcrInstall.java?rev=688017&r1=688016&r2=688017&view=diff
==============================================================================
--- incubator/sling/whiteboard/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/JcrInstall.java (original)
+++ incubator/sling/whiteboard/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/JcrInstall.java Fri Aug 22 01:28:20 2008
@@ -51,6 +51,9 @@
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.component.ComponentContext;
+import org.osgi.service.deploymentadmin.DeploymentAdmin;
+import org.osgi.service.deploymentadmin.DeploymentException;
+import org.osgi.service.deploymentadmin.DeploymentPackage;
 import org.osgi.service.log.LogService;
 import org.osgi.service.packageadmin.PackageAdmin;
 
@@ -106,6 +109,9 @@
 
     private Session session;
 
+    /** @scr.reference cardinality="0..1" policy="dynamic" */
+    private DeploymentAdmin deploymentAdmin;
+
     protected void activate(ComponentContext context)
             throws RepositoryException {
         // System.out.println("FILEINSTALL | aQute (c) 2007 v1.3");
@@ -510,6 +516,76 @@
         getPackageAdmin().refreshPackages(null);
     }
 
+    // ---------- Bundle management --------------------------------------------
+
+    private void doDeploymentPackages(Set<String> added,
+                                      Set<String> updated,
+                                      Set<String> removed) {
+        final DeploymentAdmin dpAdmin = this.deploymentAdmin;
+        if ( dpAdmin == null ) {
+            // TODO What should we do now?
+            return;
+        }
+        boolean refresh = false;
+
+        // update or uninstall deployment packages
+        final DeploymentPackage[] packages = dpAdmin.listDeploymentPackages();
+        for (DeploymentPackage pck : packages) {
+            // TODO Update and remove
+        }
+
+        for (Iterator<String> ai = added.iterator(); ai.hasNext();) {
+            String fileNode = ai.next();
+            if (fileNode.endsWith(".dp")) {
+                refresh |= installDeploymentPackage(dpAdmin, fileNode);
+                ai.remove();
+            }
+        }
+
+        if (refresh) {
+            refresh();
+        }
+    }
+
+    private boolean installDeploymentPackage(DeploymentAdmin dpAdmin, String fileNode) {
+
+        InputStream ins = null;
+        try {
+            ins = getInputStream(fileNode);
+            String location = JCR_INSTALL_PREFIX + fileNode;
+
+            dpAdmin.installDeploymentPackage(ins);
+
+            return true;
+
+        } catch (PathNotFoundException pnfe) {
+            // node or property not found
+            log(LOG_ERROR, "Missing file node or content at " + fileNode, pnfe);
+
+        } catch (ValueFormatException vfe) {
+            // cannot return property as a stream
+            log(LOG_ERROR, "Cannot access stream on file node " + fileNode, vfe);
+
+        } catch (RepositoryException re) {
+            // general Repository issue
+            log(LOG_ERROR, "Generic problem accessing file node " + fileNode, re);
+
+        } catch (DeploymentException be) {
+            // cannot install bundle
+            log(LOG_ERROR, "Failed to install bundle from " + fileNode, be);
+
+        } finally {
+            if (ins != null) {
+                try {
+                    ins.close();
+                } catch (IOException ioe) {
+                }
+            }
+        }
+
+        return false;
+    }
+
     // ---------- General Helper -----------------------------------------------
 
     void log(int level, String message, Throwable t) {