Author: cziegeler
Date: Wed Mar 2 15:11:50 2011
New Revision: 1076242
URL: http://svn.apache.org/viewvc?rev=1076242&view=rev
Log:
SLING-2010 : Support deep folder structure for installation
Modified:
sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/WatchedFolder.java
Modified:
sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/WatchedFolder.java
URL:
http://svn.apache.org/viewvc/sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/WatchedFolder.java?rev=1076242&r1=1076241&r2=1076242&view=diff
==============================================================================
---
sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/WatchedFolder.java
(original)
+++
sling/trunk/installer/providers/jcr/src/main/java/org/apache/sling/installer/provider/jcr/impl/WatchedFolder.java
Wed Mar 2 15:11:50 2011
@@ -141,44 +141,54 @@ class WatchedFolder implements EventList
// Return an InstallableResource for all child nodes for which we have
a NodeConverter
final ScanResult result = new ScanResult();
final Set<String> resourcesSeen = new HashSet<String>();
- if(folder != null) {
- final NodeIterator it = folder.getNodes();
- while(it.hasNext()) {
- final Node n = it.nextNode();
- for(JcrInstaller.NodeConverter nc : converters) {
- final InstallableResource r = nc.convertNode(n,
priority);
- if(r != null) {
- resourcesSeen.add(r.getId());
- final String oldDigest = digests.get(r.getId());
- if(r.getDigest().equals(oldDigest)) {
- log.debug("Digest didn't change, ignoring " +
r);
- } else {
- result.toAdd.add(r);
- }
- break;
- }
- }
- }
+ if (folder != null) {
+ scanNode(folder, result, resourcesSeen);
}
// Resources that existed but are not in resourcesSeen need to be
// unregistered from OsgiInstaller
- for(String url : existingResourceUrls) {
+ for(final String url : existingResourceUrls) {
if(!resourcesSeen.contains(url)) {
result.toRemove.add(url);
}
}
- for(String u : result.toRemove) {
+ for(final String u : result.toRemove) {
existingResourceUrls.remove(u);
digests.remove(u);
}
// Update saved digests of the resources that we're returning
- for(InstallableResource r : result.toAdd) {
+ for(final InstallableResource r : result.toAdd) {
existingResourceUrls.add(r.getId());
digests.put(r.getId(), r.getDigest());
}
return result;
}
+
+ private void scanNode(final Node folder, final ScanResult result, final
Set<String> resourcesSeen)
+ throws RepositoryException {
+ final NodeIterator it = folder.getNodes();
+ while(it.hasNext()) {
+ final Node n = it.nextNode();
+ boolean processed = false;
+ for (JcrInstaller.NodeConverter nc : converters) {
+ final InstallableResource r = nc.convertNode(n, priority);
+ if(r != null) {
+ processed = true;
+ resourcesSeen.add(r.getId());
+ final String oldDigest = digests.get(r.getId());
+ if(r.getDigest().equals(oldDigest)) {
+ log.debug("Digest didn't change, ignoring " + r);
+ } else {
+ result.toAdd.add(r);
+ }
+ break;
+ }
+ }
+ if ( !processed ) {
+ this.scanNode(n, result, resourcesSeen);
+ }
+ }
+ }
}