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); + } + } + } }