You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2009/08/06 13:44:44 UTC

svn commit: r801611 - in /sling/trunk/contrib/extensions/jcrinstall/service/src/main: java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java resources/OSGI-INF/metatype/metatype.properties

Author: bdelacretaz
Date: Thu Aug  6 11:44:43 2009
New Revision: 801611

URL: http://svn.apache.org/viewvc?rev=801611&view=rev
Log:
SLING-1072 - configurable max depth for scanning install folders

Modified:
    sling/trunk/contrib/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java
    sling/trunk/contrib/extensions/jcrinstall/service/src/main/resources/OSGI-INF/metatype/metatype.properties

Modified: sling/trunk/contrib/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java?rev=801611&r1=801610&r2=801611&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java (original)
+++ sling/trunk/contrib/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java Thu Aug  6 11:44:43 2009
@@ -20,6 +20,7 @@
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Dictionary;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -96,8 +97,16 @@
 
     /** Default regexp for watched folders */
     public static final String DEFAULT_FOLDER_NAME_REGEXP = ".*/install$";
+    
+    /** Configurable max. path depth for watched folders
+     *  @scr.property valueRef="DEFAULT_FOLDER_MAX_DEPTH" type="Integer"
+     */
+    public static final String PROP_INSTALL_FOLDER_MAX_DEPTH = "installFolder.maxDepth";
+
+    public static final int DEFAULT_FOLDER_MAX_DEPTH = 4;
+    private int maxWatchedFolderDepth;
 
-    /** ComponentContext property that overrides the folder name regepx */
+    /** ComponentContext property that overrides the folder name regexp */
     public static final String FOLDER_NAME_REGEXP_PROPERTY = "sling.jcrinstall.folder.name.regexp";
 
     public static final String DATA_FILE = "service.properties";
@@ -114,6 +123,14 @@
     protected void activate(ComponentContext context) throws Exception {
         componentContext = context;
 
+        final Dictionary<?, ?> properties = context.getProperties();
+        final Integer maxDepth = (Integer)properties.get(PROP_INSTALL_FOLDER_MAX_DEPTH);
+        if(maxDepth == null) {
+            maxWatchedFolderDepth = DEFAULT_FOLDER_MAX_DEPTH;
+        } else {
+            maxWatchedFolderDepth = maxDepth.intValue();
+        }
+        
         // Call startup() if we already have a repository, else that will be called
         // by the bind method
         if(repository != null) {
@@ -129,6 +146,7 @@
     /** Called at activation time, or when repository becomes available again
      *  after going away. */
     protected void startup() throws Exception {
+        final long start = System.currentTimeMillis();
         log.debug("startup()");
 
     	// TODO make this more configurable (in sync with ResourceOverrideRulesImpl)
@@ -177,6 +195,8 @@
         final Thread t = new Thread(this, getClass().getSimpleName() + "_" + System.currentTimeMillis());
         t.setDaemon(true);
         t.start();
+        
+        log.info("startup() took {} msec", System.currentTimeMillis() - start);
     }
 
     protected File getServiceDataFile(ComponentContext context) {
@@ -269,12 +289,19 @@
      */
     void findWatchedFolders(Node n, Set<WatchedFolder> setToUpdate) throws RepositoryException
     {
-        if (folderNameFilter.accept(n.getPath())) {
-            setToUpdate.add(new WatchedFolder(repository, n.getPath(), osgiController, filenameFilter, scanDelayMsec, roRules));
-        }
-        final NodeIterator it = n.getNodes();
-        while (it.hasNext()) {
-            findWatchedFolders(it.nextNode(), setToUpdate);
+        final String path = n.getPath();
+        if (folderNameFilter.accept(path)) {
+            setToUpdate.add(new WatchedFolder(repository, path, osgiController, filenameFilter, scanDelayMsec, roRules));
+        }
+        final int depth = path.split("/").length;
+        if(depth > maxWatchedFolderDepth) {
+            log.debug("Not recursing into {} due to maxWatchedFolderDepth={}", path, maxWatchedFolderDepth);
+            return;
+        } else {
+            final NodeIterator it = n.getNodes();
+            while (it.hasNext()) {
+                findWatchedFolders(it.nextNode(), setToUpdate);
+            }
         }
     }
 

Modified: sling/trunk/contrib/extensions/jcrinstall/service/src/main/resources/OSGI-INF/metatype/metatype.properties
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/service/src/main/resources/OSGI-INF/metatype/metatype.properties?rev=801611&r1=801610&r2=801611&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/jcrinstall/service/src/main/resources/OSGI-INF/metatype/metatype.properties (original)
+++ sling/trunk/contrib/extensions/jcrinstall/service/src/main/resources/OSGI-INF/metatype/metatype.properties Thu Aug  6 11:44:43 2009
@@ -25,4 +25,8 @@
 
 jcrinstall.name = Apache Sling JCR Install
 jcrinstall.description = Installs OSGi bundles and configurations found \
- in the JCR Repository. 
\ No newline at end of file
+ in the JCR Repository. 
+ 
+installFolder.maxDepth.name = Max hierarchy depth of install folders
+installFolder.maxDepth.description = Folders that are nested deeper than \
+  this value under the repository root are ignored
\ No newline at end of file