You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:36:22 UTC

[sling-org-apache-sling-fsresource] 19/22: SLING-2541 : General mechanism to chain resource providers

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.fsresource-1.1.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-fsresource.git

commit 195c76dc52a12b0f6a7fece1af0d922b563c4de7
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Oct 25 09:17:34 2012 +0000

    SLING-2541 : General mechanism to chain resource providers
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/fsresource@1402037 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |  4 ---
 .../sling/fsprovider/internal/FsResource.java      | 18 ++++++----
 .../fsprovider/internal/FsResourceProvider.java    | 41 +++++++---------------
 3 files changed, 23 insertions(+), 40 deletions(-)

diff --git a/pom.xml b/pom.xml
index e8bc922..f241e8e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,10 +89,6 @@
             <artifactId>servlet-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>javax.jcr</groupId>
-            <artifactId>jcr</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
             <version>2.2.5-SNAPSHOT</version>
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/FsResource.java b/src/main/java/org/apache/sling/fsprovider/internal/FsResource.java
index a0f68f7..bcc8bb1 100644
--- a/src/main/java/org/apache/sling/fsprovider/internal/FsResource.java
+++ b/src/main/java/org/apache/sling/fsprovider/internal/FsResource.java
@@ -110,6 +110,9 @@ public class FsResource extends AbstractResource implements Resource {
             metaData.setContentLength(file.length());
             metaData.setModificationTime(file.lastModified());
             metaData.setResolutionPath(resourcePath);
+            if ( this.file.isDirectory() ) {
+                metaData.put(ResourceMetadata.INTERNAL_CONTINUE_RESOLVING, Boolean.TRUE);
+            }
         }
         return metaData;
     }
@@ -138,7 +141,7 @@ public class FsResource extends AbstractResource implements Resource {
         if (resourceType == null) {
             resourceType = file.isFile()
                     ? RESOURCE_TYPE_FILE
-                    : RESOURCE_TYPE_FOLDER;
+                            : RESOURCE_TYPE_FOLDER;
         }
 
         return resourceType;
@@ -149,6 +152,7 @@ public class FsResource extends AbstractResource implements Resource {
      * <code>File</code>, <code>InputStream</code> and <code>URL</code>
      * plus those supported by the adapter manager.
      */
+    @Override
     @SuppressWarnings("unchecked")
     public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
         if (type == File.class) {
@@ -163,8 +167,8 @@ public class FsResource extends AbstractResource implements Resource {
                     return (AdapterType) new FileInputStream(file);
                 } catch (IOException ioe) {
                     getLog().info(
-                        "adaptTo: Cannot open a stream on the file " + file,
-                        ioe);
+                            "adaptTo: Cannot open a stream on the file " + file,
+                            ioe);
                 }
 
             } else {
@@ -179,12 +183,12 @@ public class FsResource extends AbstractResource implements Resource {
                 return (AdapterType) file.toURI().toURL();
             } catch (MalformedURLException mue) {
                 getLog().info(
-                    "adaptTo: Cannot convert the file path " + file
+                        "adaptTo: Cannot convert the file path " + file
                         + " to an URL", mue);
             }
 
         } else if (type == ValueMap.class) {
-            
+
             // this resource simulates nt:file/nt:folder behavior by returning it as resource type
             // we should simulate the corresponding JCR properties in a value map as well
             if (file.exists() && file.canRead()) {
@@ -196,9 +200,9 @@ public class FsResource extends AbstractResource implements Resource {
                 props.put("jcr:created", lastModifed);
                 return (AdapterType) new ValueMapDecorator(props);
             }
-            
+
         }
-        
+
         return super.adaptTo(type);
     }
 
diff --git a/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java b/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java
index f261e50..780ebaa 100644
--- a/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java
+++ b/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java
@@ -24,8 +24,6 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.NoSuchElementException;
 
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.felix.scr.annotations.Component;
@@ -54,18 +52,18 @@ import org.osgi.service.event.EventAdmin;
  * resource ({@link #PROP_PROVIDER_FILE}).
  */
 @Component(
-    name="org.apache.sling.fsprovider.internal.FsResourceProvider",
-    label="%resource.resolver.name",
-    description="%resource.resolver.description",
-    configurationFactory=true,
-    policy=ConfigurationPolicy.REQUIRE,
-    metatype=true
-)
+        name="org.apache.sling.fsprovider.internal.FsResourceProvider",
+        label="%resource.resolver.name",
+        description="%resource.resolver.description",
+        configurationFactory=true,
+        policy=ConfigurationPolicy.REQUIRE,
+        metatype=true
+        )
 @Service(ResourceProvider.class)
 @Properties({
     @Property(name="service.description", value="Sling Filesystem Resource Provider"),
     @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name=ResourceProvider.ROOTS)    
+    @Property(name=ResourceProvider.ROOTS)
 })
 public class FsResourceProvider implements ResourceProvider {
 
@@ -148,8 +146,8 @@ public class FsResourceProvider implements ResourceProvider {
                     String relPath = providerRoot.substring(parentPath.length());
                     if (relPath.indexOf('/') < 0) {
                         Resource res = getResource(
-                            parent.getResourceResolver(), providerRoot,
-                            providerFile);
+                                parent.getResourceResolver(), providerRoot,
+                                providerFile);
                         if (res != null) {
                             return Collections.singletonList(res).iterator();
                         }
@@ -220,7 +218,7 @@ public class FsResourceProvider implements ResourceProvider {
         String providerFileName = (String) props.get(PROP_PROVIDER_FILE);
         if (providerFileName == null || providerFileName.length() == 0) {
             throw new IllegalArgumentException(PROP_PROVIDER_FILE
-                + " property must be set");
+                    + " property must be set");
         }
 
         this.providerRoot = providerRoot;
@@ -282,7 +280,7 @@ public class FsResourceProvider implements ResourceProvider {
         // if the provider file does not exist, create an empty new folder
         if (!providerFile.exists() && !providerFile.mkdirs()) {
             throw new IllegalArgumentException(
-                "Cannot create provider file root " + providerFile);
+                    "Cannot create provider file root " + providerFile);
         }
 
         return providerFile;
@@ -314,21 +312,6 @@ public class FsResourceProvider implements ResourceProvider {
 
         if (file != null) {
 
-            // if the file is a directory, and a repository item exists for
-            // the path, do not return the directory here
-            if (file.isDirectory()) {
-                Session session = resourceResolver.adaptTo(Session.class);
-                if (session != null) {
-                    try {
-                        if (session.itemExists(resourcePath)) {
-                            return null;
-                        }
-                    } catch (RepositoryException re) {
-                        // don't care
-                    }
-                }
-            }
-
             // if the file exists, but is not a directory or no repository entry
             // exists, return it as a resource
             if (file.exists()) {

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.