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/02/05 17:31:45 UTC

svn commit: r741168 - in /incubator/sling/trunk/extensions/jcrinstall/service/src: main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/ test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/

Author: bdelacretaz
Date: Thu Feb  5 16:31:44 2009
New Revision: 741168

URL: http://svn.apache.org/viewvc?rev=741168&view=rev
Log:
SLING-738 - make jcrinstall folder names runmode-aware

Added:
    incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilter.java   (with props)
    incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/MockRunMode.java   (with props)
    incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilterTest.java   (with props)
Modified:
    incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java

Modified: incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java?rev=741168&r1=741167&r2=741168&view=diff
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java (original)
+++ incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java Thu Feb  5 16:31:44 2009
@@ -40,6 +40,7 @@
 import org.apache.sling.jcr.jcrinstall.jcr.NodeConverter;
 import org.apache.sling.jcr.jcrinstall.osgi.OsgiController;
 import org.apache.sling.jcr.jcrinstall.osgi.ResourceOverrideRules;
+import org.apache.sling.runmode.RunMode;
 import org.osgi.framework.FrameworkEvent;
 import org.osgi.framework.FrameworkListener;
 import org.osgi.framework.ServiceReference;
@@ -69,7 +70,7 @@
 public class RepositoryObserver implements Runnable, FrameworkListener, JcrInstallService {
 
     private final SortedSet<WatchedFolder> folders = new TreeSet<WatchedFolder>();
-    private RegexpFilter folderNameFilter;
+    private RunModeRegexpFilter folderNameFilter;
     private RegexpFilter filenameFilter;
     private ResourceOverrideRules roRules;
     private ComponentContext componentContext;
@@ -77,6 +78,9 @@
     private boolean observationCycleActive;
     private boolean activated;
     
+    /** @scr.reference */ 
+    private RunMode runMode;
+    
     /** @scr.reference */
     protected OsgiController osgiController;
     
@@ -176,7 +180,7 @@
     	} else {
             log.info("Using folder name regexp '{}' from context property '{}'", folderNameRegexp, FOLDER_NAME_REGEXP_PROPERTY);
     	}
-        folderNameFilter = new RegexpFilter(folderNameRegexp);
+        folderNameFilter = new RunModeRegexpFilter(folderNameRegexp, runMode);
         serviceDataFile = getServiceDataFile(componentContext);
         
         // Listen for any new WatchedFolders created after activation

Added: incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilter.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilter.java?rev=741168&view=auto
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilter.java (added)
+++ incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilter.java Thu Feb  5 16:31:44 2009
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.jcr.jcrinstall.jcr.impl;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.sling.runmode.RunMode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/** A RegexpFilter that is RunMode-aware: accepts names with a 
+ *  prefix that matches the supplied regexp, and suffixes that 
+ *  match the list of run mode strings provided by a RunMode service.
+ */
+class RunModeRegexpFilter extends RegexpFilter {
+    private final RunMode runMode;
+    private final Logger log = LoggerFactory.getLogger(getClass());
+    
+    RunModeRegexpFilter(String regexp, RunMode runMode) {
+        super(regexp);
+        this.runMode = runMode;
+    }
+    
+    @Override
+    boolean accept(final String path) {
+        // If path contains dots, remove suffixes starting with
+        // dots until path matches regexp, and accept if all suffixes
+        // are included in our list of runmodes
+        final char DOT = '.';
+        boolean result = false;
+        
+        if(path.indexOf(DOT) > 0) {
+            int pos = 0;
+            String prefix = path;
+            final List<String> modes = new LinkedList<String>();
+            while( (pos = prefix.lastIndexOf(DOT)) >= 0) {
+                modes.add(prefix.substring(pos + 1));
+                prefix = prefix.substring(0, pos);
+                if(super.accept(prefix)) {
+                    result = true;
+                    break;
+                }
+            }
+            
+            // If path prefix matches, check that all our runmodes match
+            if(result) {
+                for(String m : modes) {
+                    final String [] toTest = { m };
+                    if(!runMode.isActive(toTest)) {
+                        result = false;
+                        break;
+                    }
+                }
+            }
+            
+            if(log.isDebugEnabled()) {
+                log.debug("accept(" + path + ")=" + result + " (prefix=" + prefix + ", modes=" + modes + ")");
+            }
+            
+        } else {
+            result = super.accept(path);
+        }
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return super.toString() + ", RunMode=" + runMode;
+    }
+
+}

Propchange: incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilter.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/MockRunMode.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/MockRunMode.java?rev=741168&view=auto
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/MockRunMode.java (added)
+++ incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/MockRunMode.java Thu Feb  5 16:31:44 2009
@@ -0,0 +1,33 @@
+package org.apache.sling.jcr.jcrinstall.jcr.impl;
+
+import org.apache.sling.runmode.RunMode;
+
+class MockRunMode implements RunMode {
+
+    private final String[] modes;
+    
+    MockRunMode(String [] modes) {
+        this.modes = modes;
+    }
+    
+    public String[] getCurrentRunModes() {
+        return modes;
+    }
+
+    public boolean isActive(String[] runModes) {
+        boolean result = false;
+        
+        main:
+        for(String a : runModes) {
+            for(String b : modes) {
+                if(b.equals(a)) {
+                    result = true;
+                    break main;
+                }
+            }
+        }
+        
+        return result;
+    }
+
+}

Propchange: incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/MockRunMode.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/MockRunMode.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilterTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilterTest.java?rev=741168&view=auto
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilterTest.java (added)
+++ incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilterTest.java Thu Feb  5 16:31:44 2009
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.jcr.jcrinstall.jcr.impl;
+
+import junit.framework.TestCase;
+
+public class RunModeRegexpFilterTest extends TestCase {
+    
+    public static final String DEFAULT_REGEXP =  ".*/install$";
+    
+    public void testNoRunMode() {
+        final RunModeRegexpFilter f = new RunModeRegexpFilter(DEFAULT_REGEXP, new MockRunMode(new String[0]));
+        assertTrue(f.accept("/foo/install"));
+        assertFalse(f.accept("/foo/install.bar"));
+    }
+    
+    public void testSingleMode() {
+        final String [] m = { "dev" };
+        final RunModeRegexpFilter f = new RunModeRegexpFilter(DEFAULT_REGEXP, new MockRunMode(m));
+        assertTrue("Test 1", f.accept("/foo/install"));
+        assertFalse("Test 2", f.accept("/foo/install.bar"));
+        assertTrue("Test 3", f.accept("/foo/install.dev"));
+        assertFalse("Test 4", f.accept("/foo/install/dev"));
+        assertTrue("Test 5", f.accept("/foo/install.dev.dev"));
+        assertFalse("Test 6", f.accept("/foo/install.dev.bar"));
+        assertFalse("Test 7", f.accept("/foo/install.bar.dev"));
+    }
+    
+    public void testThreeModes() {
+        final String [] m = { "dev", "web", "staging" };
+        final RunModeRegexpFilter f = new RunModeRegexpFilter(DEFAULT_REGEXP, new MockRunMode(m));
+        assertTrue("Test 1",f.accept("/foo/install"));
+        assertFalse("Test 2",f.accept("/foo/install.bar"));
+        assertTrue("Test 3",f.accept("/foo/install.dev"));
+        assertTrue("Test 4",f.accept("/foo/install.web"));
+        assertTrue("Test 5",f.accept("/foo/install.staging"));
+        assertFalse("Test 6",f.accept("/foo/install/dev"));
+        assertTrue("Test 7",f.accept("/foo/install.dev.web.staging"));
+        assertTrue("Test 8",f.accept("/foo/install.web.dev.staging"));
+        assertTrue("Test 9",f.accept("/foo/install.staging.web.dev"));
+        assertTrue("Test 10",f.accept("/foo/install.staging.dev.web"));
+        assertTrue("Test 11",f.accept("/foo/install.dev.dev.web.staging.web"));
+        assertFalse("Test 12",f.accept("/foo/install.dev.bar"));
+        assertFalse("Test 13",f.accept("/foo/install.bar.dev"));
+    }
+}

Propchange: incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/sling/trunk/extensions/jcrinstall/service/src/test/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RunModeRegexpFilterTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL