You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2015/03/08 16:07:42 UTC

svn commit: r1665013 - in /sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal: BundleHelper.java ContentLoaderService.java Loader.java

Author: olli
Date: Sun Mar  8 15:07:42 2015
New Revision: 1665013

URL: http://svn.apache.org/r1665013
Log:
SLING-4223 make Content Loader extensible to support new import formats

* add interface BundleHelper to make responsibilities visible

Added:
    sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/BundleHelper.java
Modified:
    sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoaderService.java
    sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java

Added: sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/BundleHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/BundleHelper.java?rev=1665013&view=auto
==============================================================================
--- sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/BundleHelper.java (added)
+++ sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/BundleHelper.java Sun Mar  8 15:07:42 2015
@@ -0,0 +1,43 @@
+/*
+ * 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.jcr.contentloader.internal;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.osgi.framework.Bundle;
+
+public interface BundleHelper extends ContentHelper {
+
+    Map<String, Object> getBundleContentInfo(Session session, Bundle bundle, boolean create) throws RepositoryException;
+
+    void unlockBundleContentInfo(Session session, Bundle bundle, boolean contentLoaded, List<String> createdNodes)throws RepositoryException;
+
+    void contentIsUninstalled(Session session, Bundle bundle);
+
+    void createRepositoryPath(Session session, String path) throws RepositoryException;
+
+    Session getSession() throws RepositoryException;
+    
+    Session getSession(String workspace) throws RepositoryException;
+
+}

Modified: sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoaderService.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoaderService.java?rev=1665013&r1=1665012&r2=1665013&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoaderService.java (original)
+++ sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoaderService.java Sun Mar  8 15:07:42 2015
@@ -58,7 +58,7 @@ import org.slf4j.LoggerFactory;
     @Property(name="service.vendor", value="The Apache Software Foundation"),
     @Property(name="service.description", value="Apache Sling Content Loader Implementation")
 })
-public class ContentLoaderService implements SynchronousBundleListener, ContentHelper {
+public class ContentLoaderService implements SynchronousBundleListener, BundleHelper {
 
     public static final String PROPERTY_CONTENT_LOADED = "content-loaded";
     public static final String PROPERTY_CONTENT_LOADED_AT = "content-load-time";
@@ -178,7 +178,7 @@ public class ContentLoaderService implem
         return (mts != null) ? mts.getMimeType(name) : null;
     }
 
-    protected void createRepositoryPath(final Session writerSession, final String repositoryPath)
+    public void createRepositoryPath(final Session writerSession, final String repositoryPath)
     throws RepositoryException {
         if ( !writerSession.itemExists(repositoryPath) ) {
             Node node = writerSession.getRootNode();
@@ -278,12 +278,19 @@ public class ContentLoaderService implem
     /**
      * Returns an administrative session to the default workspace.
      */
-    private Session getSession()
+    public Session getSession()
     throws RepositoryException {
         return getRepository().loginAdministrative(null);
     }
 
     /**
+     * Returns an administrative session for the named workspace.
+     */
+    public Session getSession(final String workspace) throws RepositoryException {
+        return getRepository().loginAdministrative(workspace);
+    }
+
+    /**
      * Return the administrative session and close it.
      */
     private void ungetSession(final Session session) {

Modified: sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java?rev=1665013&r1=1665012&r2=1665013&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java (original)
+++ sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java Sun Mar  8 15:07:42 2015
@@ -56,14 +56,14 @@ public class Loader extends BaseImportLo
 
     private final Logger log = LoggerFactory.getLogger(Loader.class);
 
-    private ContentLoaderService contentLoaderService;
+    private BundleHelper bundleHelper;
 
     // bundles whose registration failed and should be retried
     private List<Bundle> delayedBundles;
 
-    public Loader(ContentLoaderService contentLoaderService) {
+    public Loader(BundleHelper bundleHelper) {
         super();
-        this.contentLoaderService = contentLoaderService;
+        this.bundleHelper = bundleHelper;
         this.delayedBundles = new LinkedList<Bundle>();
     }
 
@@ -72,7 +72,7 @@ public class Loader extends BaseImportLo
             delayedBundles.clear();
             delayedBundles = null;
         }
-        contentLoaderService = null;
+        bundleHelper = null;
         super.dispose();
     }
 
@@ -120,10 +120,10 @@ public class Loader extends BaseImportLo
         }
 
         try {
-            contentLoaderService.createRepositoryPath(metadataSession, ContentLoaderService.BUNDLE_CONTENT_NODE);
+            bundleHelper.createRepositoryPath(metadataSession, ContentLoaderService.BUNDLE_CONTENT_NODE);
 
             // check if the content has already been loaded
-            final Map<String, Object> bundleContentInfo = contentLoaderService.getBundleContentInfo(metadataSession, bundle, true);
+            final Map<String, Object> bundleContentInfo = bundleHelper.getBundleContentInfo(metadataSession, bundle, true);
 
             // if we don't get an info, someone else is currently loading
             if (bundleContentInfo == null) {
@@ -155,7 +155,7 @@ public class Loader extends BaseImportLo
                 success = true;
                 return true;
             } finally {
-                contentLoaderService.unlockBundleContentInfo(metadataSession, bundle, success, createdNodes);
+                bundleHelper.unlockBundleContentInfo(metadataSession, bundle, success, createdNodes);
             }
 
         } catch (RepositoryException re) {
@@ -179,9 +179,9 @@ public class Loader extends BaseImportLo
             delayedBundles.remove(bundle);
         } else {
             try {
-                contentLoaderService.createRepositoryPath(session, ContentLoaderService.BUNDLE_CONTENT_NODE);
+                bundleHelper.createRepositoryPath(session, ContentLoaderService.BUNDLE_CONTENT_NODE);
 
-                final Map<String, Object> bundleContentInfo = contentLoaderService.getBundleContentInfo(session, bundle, false);
+                final Map<String, Object> bundleContentInfo = bundleHelper.getBundleContentInfo(session, bundle, false);
 
                 // if we don't get an info, someone else is currently loading or unloading
                 // or the bundle is already uninstalled
@@ -191,9 +191,9 @@ public class Loader extends BaseImportLo
 
                 try {
                     uninstallContent(session, bundle, (String[]) bundleContentInfo.get(ContentLoaderService.PROPERTY_UNINSTALL_PATHS));
-                    contentLoaderService.contentIsUninstalled(session, bundle);
+                    bundleHelper.contentIsUninstalled(session, bundle);
                 } finally {
-                    contentLoaderService.unlockBundleContentInfo(session, bundle, false, null);
+                    bundleHelper.unlockBundleContentInfo(session, bundle, false, null);
                 }
             } catch (RepositoryException re) {
                 log.error("Cannot remove initial content for bundle " + bundle.getSymbolicName() + " : " + re.getMessage(), re);
@@ -214,7 +214,7 @@ public class Loader extends BaseImportLo
         final Map<String, Session> createdSessions = new HashMap<String, Session>();
 
         log.debug("Installing initial content from bundle {}", bundle.getSymbolicName());
-        final DefaultContentCreator contentCreator = new DefaultContentCreator(this.contentLoaderService);
+        final DefaultContentCreator contentCreator = new DefaultContentCreator(this.bundleHelper);
         try {
             while (pathIter.hasNext()) {
                 final PathEntry pathEntry = pathIter.next();
@@ -740,12 +740,12 @@ public class Loader extends BaseImportLo
 
     private Session createSession(String workspace) throws RepositoryException {
         try {
-            return contentLoaderService.getRepository().loginAdministrative(workspace);
+            return bundleHelper.getSession(workspace);
         } catch (NoSuchWorkspaceException e) {
-            Session temp = contentLoaderService.getRepository().loginAdministrative(null);
+            Session temp = bundleHelper.getSession();
             temp.getWorkspace().createWorkspace(workspace);
             temp.logout();
-            return contentLoaderService.getRepository().loginAdministrative(workspace);
+            return bundleHelper.getSession(workspace);
         }
     }