You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2008/07/28 12:50:08 UTC
svn commit: r680317 -
/incubator/sling/trunk/samples/fsresource/src/main/java/org/apache/sling/fsprovider/FsResourceProvider.java
Author: fmeschbe
Date: Mon Jul 28 03:50:07 2008
New Revision: 680317
URL: http://svn.apache.org/viewvc?rev=680317&view=rev
Log:
SLING-583 Cleanup to consistently not return FsResource instances
for directories "hiding" existing repository items.
Modified:
incubator/sling/trunk/samples/fsresource/src/main/java/org/apache/sling/fsprovider/FsResourceProvider.java
Modified: incubator/sling/trunk/samples/fsresource/src/main/java/org/apache/sling/fsprovider/FsResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/samples/fsresource/src/main/java/org/apache/sling/fsprovider/FsResourceProvider.java?rev=680317&r1=680316&r2=680317&view=diff
==============================================================================
--- incubator/sling/trunk/samples/fsresource/src/main/java/org/apache/sling/fsprovider/FsResourceProvider.java (original)
+++ incubator/sling/trunk/samples/fsresource/src/main/java/org/apache/sling/fsprovider/FsResourceProvider.java Mon Jul 28 03:50:07 2008
@@ -94,36 +94,7 @@
* method returns <code>null</code>.
*/
public Resource getResource(ResourceResolver resourceResolver, String path) {
-
- // convert the path to a file
- File file = getFile(path);
- 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(path)) {
- 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()) {
- return new FsResource(resourceResolver, path, file);
- }
-
- }
-
- // not applicable or not an existing file path
- return null;
+ return getResource(resourceResolver, path, getFile(path));
}
/**
@@ -137,19 +108,20 @@
// if the parent path is at or below the provider root, get
// the respective file
parentFile = getFile(parent.getPath());
-
+
// if the parent path is actually the parent of the provider
// root, return a single element iterator just containing the
// provider file, unless the provider file is a directory and
// a repository item with the same path actually exists
if (parentFile == null) {
-
+
String parentPath = parent.getPath().concat("/");
if (providerRoot.startsWith(parentPath)) {
String relPath = providerRoot.substring(parentPath.length());
if (relPath.indexOf('/') < 0) {
Resource res = getResource(
- parent.getResourceResolver(), providerRoot);
+ parent.getResourceResolver(), providerRoot,
+ providerFile);
if (res != null) {
return Collections.singletonList(res).iterator();
}
@@ -171,8 +143,10 @@
return new Iterator<Resource>() {
int index = 0;
+ Resource next = seek();
+
public boolean hasNext() {
- return index < children.length;
+ return next != null;
}
public Resource next() {
@@ -180,16 +154,28 @@
throw new NoSuchElementException();
}
- File file = children[index];
- index++;
-
- return new FsResource(resolver, parentPath + "/"
- + file.getName(), file);
+ Resource result = next;
+ next = seek();
+ return result;
}
public void remove() {
throw new UnsupportedOperationException("remove");
}
+
+ private Resource seek() {
+ while (index < children.length) {
+ File file = children[index++];
+ String path = parentPath + "/" + file.getName();
+ Resource result = getResource(resolver, path, file);
+ if (result != null) {
+ return result;
+ }
+ }
+
+ // nothing found any more
+ return null;
+ }
};
}
}
@@ -275,4 +261,36 @@
return null;
}
+
+ private Resource getResource(ResourceResolver resourceResolver,
+ String resourcePath, File file) {
+
+ 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()) {
+ return new FsResource(resourceResolver, resourcePath, file);
+ }
+
+ }
+
+ // not applicable or not an existing file path
+ return null;
+ }
}