You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2016/02/10 10:51:00 UTC

svn commit: r1729566 - in /sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger: impl/ impl/picker/ spi/

Author: cziegeler
Date: Wed Feb 10 09:51:00 2016
New Revision: 1729566

URL: http://svn.apache.org/viewvc?rev=1729566&view=rev
Log:
SLING-5502 : Additions to MergedResourcePicker break existing implementations

Added:
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker2.java   (with props)
Modified:
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergedResource.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/MergingResourcePicker.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergedResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergedResource.java?rev=1729566&r1=1729565&r2=1729566&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergedResource.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergedResource.java Wed Feb 10 09:51:00 2016
@@ -33,14 +33,14 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.api.wrappers.DeepReadValueMapDecorator;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
-import org.apache.sling.resourcemerger.spi.MergedResourcePicker;
+import org.apache.sling.resourcemerger.spi.MergedResourcePicker2;
 
 /**
  * {@inheritDoc}
  */
 public class CRUDMergedResource extends MergedResource {
 
-    private final MergedResourcePicker picker;
+    private final MergedResourcePicker2 picker;
 
     private final String relativePath;
 
@@ -57,7 +57,7 @@ public class CRUDMergedResource extends
                    final String relativePath,
                    final List<Resource> mappedResources,
                    final List<ValueMap> valueMaps,
-                   final MergedResourcePicker picker) {
+                   final MergedResourcePicker2 picker) {
         super(resolver, mergeRootPath, relativePath, mappedResources, valueMaps);
         this.picker = picker;
         this.relativePath = relativePath;
@@ -70,7 +70,7 @@ public class CRUDMergedResource extends
     @SuppressWarnings("unchecked")
     public <AdapterType> AdapterType adaptTo(final Class<AdapterType> type) {
         if (type == ModifiableValueMap.class) {
-            final Iterator<Resource> iter = this.picker.pickResources(this.getResourceResolver(), this.relativePath).iterator();
+            final Iterator<Resource> iter = this.picker.pickResources(this.getResourceResolver(), this.relativePath, null).iterator();
             Resource highestRsrc = null;
             while ( iter.hasNext() ) {
                 highestRsrc = iter.next();
@@ -109,40 +109,49 @@ public class CRUDMergedResource extends
             this.targetMap = targetMap;
         }
 
+        @Override
         public <T> T get(final String name, final Class<T> type) {
             return properties.get(name, type);
         }
 
+        @Override
         public <T> T get(final String name, final T defaultValue) {
             return properties.get(name, defaultValue);
         }
 
+        @Override
         public int size() {
             return properties.size();
         }
 
+        @Override
         public boolean isEmpty() {
             return properties.isEmpty();
         }
 
+        @Override
         public boolean containsKey(final Object key) {
             return properties.containsKey(key);
         }
 
+        @Override
         public boolean containsValue(final Object value) {
             return properties.containsValue(value);
         }
 
+        @Override
         public Object get(final Object key) {
             return properties.get(key);
         }
 
+        @Override
         public Object put(final String key, final Object value) {
             final Object result = this.properties.get(key);
             this.targetMap.put(key, value);
             return result;
         }
 
+        @Override
         public Object remove(final Object key) {
             final Object result = this.properties.get(key);
             if ( this.targetMap.remove(key) == null ) {
@@ -160,6 +169,7 @@ public class CRUDMergedResource extends
             return result;
         }
 
+        @Override
         public void putAll(final Map<? extends String, ? extends Object> m) {
             if ( m != null ) {
                 for(final Map.Entry<? extends String, ? extends Object> entry : m.entrySet()) {
@@ -168,18 +178,22 @@ public class CRUDMergedResource extends
             }
         }
 
+        @Override
         public void clear() {
             // not supported
         }
 
+        @Override
         public Set<String> keySet() {
             return this.properties.keySet();
         }
 
+        @Override
         public Collection<Object> values() {
             return this.properties.values();
         }
 
+        @Override
         public Set<Entry<String, Object>> entrySet() {
             return this.properties.entrySet();
         }

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java?rev=1729566&r1=1729565&r2=1729566&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java Wed Feb 10 09:51:00 2016
@@ -29,7 +29,7 @@ import org.apache.sling.api.resource.Per
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceUtil;
-import org.apache.sling.resourcemerger.spi.MergedResourcePicker;
+import org.apache.sling.resourcemerger.spi.MergedResourcePicker2;
 import org.apache.sling.spi.resource.provider.ResolveContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
 
@@ -40,7 +40,7 @@ public class CRUDMergingResourceProvider
     extends MergingResourceProvider {
 
     public CRUDMergingResourceProvider(final String mergeRootPath,
-            final MergedResourcePicker picker,
+            final MergedResourcePicker2 picker,
             final boolean traverseHierarchie) {
         super(mergeRootPath, picker, false, traverseHierarchie);
     }
@@ -64,7 +64,7 @@ public class CRUDMergingResourceProvider
 
         // Loop over resources
         boolean isUnderlying = true;
-        final Iterator<Resource> iter = this.picker.pickResources(resolver, relativePath).iterator();
+        final Iterator<Resource> iter = this.picker.pickResources(resolver, relativePath, null).iterator();
         while ( iter.hasNext() ) {
             final Resource rsrc = iter.next();
             holder.count++;

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java?rev=1729566&r1=1729565&r2=1729566&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java Wed Feb 10 09:51:00 2016
@@ -20,14 +20,18 @@ package org.apache.sling.resourcemerger.
 
 import java.util.Dictionary;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.resourcemerger.spi.MergedResourcePicker;
+import org.apache.sling.resourcemerger.spi.MergedResourcePicker2;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -48,7 +52,8 @@ public class MergedResourcePickerWhitebo
     @Activate
     protected void activate(final BundleContext bundleContext) {
         this.bundleContext = bundleContext;
-        tracker = new ServiceTracker(bundleContext, MergedResourcePicker.class.getName(), this);
+        tracker = new ServiceTracker(bundleContext, "(|(objectClass=" + MergedResourcePicker.class.getName() +
+                ")(objectClass=" + MergedResourcePicker2.class.getName() + "))", this);
         tracker.open();
     }
 
@@ -59,12 +64,26 @@ public class MergedResourcePickerWhitebo
 
     @Override
     public Object addingService(final ServiceReference reference) {
-        final MergedResourcePicker picker = (MergedResourcePicker) bundleContext.getService(reference);
-        if ( picker != null ) {
-            final String mergeRoot = PropertiesUtil.toString(reference.getProperty(MergedResourcePicker.MERGE_ROOT), null);
+        final Object pickerObj = bundleContext.getService(reference);
+        if ( pickerObj != null ) {
+            final String mergeRoot = PropertiesUtil.toString(reference.getProperty(MergedResourcePicker2.MERGE_ROOT), null);
             if (mergeRoot != null) {
-                boolean readOnly = PropertiesUtil.toBoolean(reference.getProperty(MergedResourcePicker.READ_ONLY), true);
-                boolean traverseParent = PropertiesUtil.toBoolean(reference.getProperty(MergedResourcePicker.TRAVERSE_PARENT), false);
+                boolean readOnly = PropertiesUtil.toBoolean(reference.getProperty(MergedResourcePicker2.READ_ONLY), true);
+                boolean traverseParent = PropertiesUtil.toBoolean(reference.getProperty(MergedResourcePicker2.TRAVERSE_PARENT), false);
+
+                final MergedResourcePicker2 picker;
+                if ( pickerObj instanceof MergedResourcePicker2 ) {
+                    picker = (MergedResourcePicker2)pickerObj;
+                } else {
+                    final MergedResourcePicker deprecatedPicker = (MergedResourcePicker)pickerObj;
+                    picker = new MergedResourcePicker2() {
+
+                        @Override
+                        public List<Resource> pickResources(ResourceResolver resolver, String relativePath, Resource relatedResource) {
+                            return deprecatedPicker.pickResources(resolver, relativePath);
+                        }
+                    };
+                }
 
                 MergingResourceProvider provider = readOnly ?
                         new MergingResourceProvider(mergeRoot, picker, true, traverseParent) :
@@ -81,7 +100,7 @@ public class MergedResourcePickerWhitebo
 
                 serviceRegistrations.put(key, reg);
             }
-            return picker;
+            return pickerObj;
         }
         return null;
     }

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java?rev=1729566&r1=1729565&r2=1729566&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java Wed Feb 10 09:51:00 2016
@@ -26,7 +26,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.resource.ValueMap;
-import org.apache.sling.resourcemerger.spi.MergedResourcePicker;
+import org.apache.sling.resourcemerger.spi.MergedResourcePicker2;
 import org.apache.sling.spi.resource.provider.ResolveContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
@@ -35,14 +35,14 @@ public class MergingResourceProvider ext
 
     protected final String mergeRootPath;
 
-    protected final MergedResourcePicker picker;
+    protected final MergedResourcePicker2 picker;
 
     private final boolean readOnly;
 
     protected final boolean traverseHierarchie;
 
     MergingResourceProvider(final String mergeRootPath,
-            final MergedResourcePicker picker,
+            final MergedResourcePicker2 picker,
             final boolean readOnly,
             final boolean traverseHierarchie) {
         this.mergeRootPath = mergeRootPath;

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/MergingResourcePicker.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/MergingResourcePicker.java?rev=1729566&r1=1729565&r2=1729566&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/MergingResourcePicker.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/MergingResourcePicker.java Wed Feb 10 09:51:00 2016
@@ -35,18 +35,18 @@ import org.apache.sling.commons.osgi.Pro
 import org.apache.sling.resourcemerger.api.ResourceMergerService;
 import org.apache.sling.resourcemerger.impl.MergedResource;
 import org.apache.sling.resourcemerger.impl.MergedResourceConstants;
-import org.apache.sling.resourcemerger.spi.MergedResourcePicker;
+import org.apache.sling.resourcemerger.spi.MergedResourcePicker2;
 
 @Component(name="org.apache.sling.resourcemerger.impl.MergedResourceProviderFactory",
            label = "Apache Sling Merged Resource Provider Factory",
            description = "This resource provider delivers merged resources based on the search paths.",
            metatype=true)
-@Service(value={MergedResourcePicker.class, ResourceMergerService.class})
+@Service(value={MergedResourcePicker2.class, ResourceMergerService.class})
 @Properties({
-    @Property(name=MergedResourcePicker.MERGE_ROOT, value=MergingResourcePicker.DEFAULT_ROOT,
+    @Property(name=MergedResourcePicker2.MERGE_ROOT, value=MergingResourcePicker.DEFAULT_ROOT,
             label="Root",
             description="The mount point of merged resources"),
-    @Property(name=MergedResourcePicker.READ_ONLY, boolValue=true,
+    @Property(name=MergedResourcePicker2.READ_ONLY, boolValue=true,
     label="Read Only",
     description="Specifies if the resources are read-only or can be modified.")
 
@@ -55,7 +55,7 @@ import org.apache.sling.resourcemerger.s
  * The <code>MergedResourceProviderFactory</code> creates merged resource
  * providers and implements the <code>ResourceMergerService</code>.
  */
-public class MergingResourcePicker implements MergedResourcePicker, ResourceMergerService {
+public class MergingResourcePicker implements MergedResourcePicker2, ResourceMergerService {
 
     public static final String DEFAULT_ROOT = "/mnt/overlay";
 
@@ -122,14 +122,10 @@ public class MergingResourcePicker imple
         return (resource != null) ? resource : new NonExistingResource(resolver, path);
     }
 
-    @Override
-    public List<Resource> pickResources(ResourceResolver resolver, String relativePath) {
-        return pickResources(resolver, relativePath, null);
-    }
-
     /**
      * {@inheritDoc}
      */
+    @Override
     public String getMergedResourcePath(final String relativePath) {
         if (relativePath == null) {
             throw new IllegalArgumentException("Provided relative path is null");
@@ -145,6 +141,7 @@ public class MergingResourcePicker imple
     /**
      * {@inheritDoc}
      */
+    @Override
     public Resource getMergedResource(final Resource resource) {
         if (resource != null) {
             final ResourceResolver resolver = resource.getResourceResolver();
@@ -162,6 +159,7 @@ public class MergingResourcePicker imple
     /**
      * {@inheritDoc}
      */
+    @Override
     public boolean isMergedResource(final Resource resource) {
         if (resource == null) {
             return false;
@@ -173,6 +171,7 @@ public class MergingResourcePicker imple
     /**
      * {@inheritDoc}
      */
+    @Override
     public String getResourcePath(final String searchPath, final String mergedResourcePath) {
         if( searchPath == null || !searchPath.startsWith("/") || !searchPath.endsWith("/") ) {
             throw new IllegalArgumentException("Provided path is not a valid search path: " + searchPath);

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java?rev=1729566&r1=1729565&r2=1729566&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java Wed Feb 10 09:51:00 2016
@@ -32,7 +32,7 @@ import org.apache.felix.scr.annotations.
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.resourcemerger.impl.StubResource;
-import org.apache.sling.resourcemerger.spi.MergedResourcePicker;
+import org.apache.sling.resourcemerger.spi.MergedResourcePicker2;
 
 @Component(name = "org.apache.sling.resourcemerger.picker.overriding",
         label = "Apache Sling Overriding Resource Picker",
@@ -40,14 +40,14 @@ import org.apache.sling.resourcemerger.s
     metatype = true, policy = ConfigurationPolicy.REQUIRE)
 @Service
 @Properties({
-    @Property(name = MergedResourcePicker.MERGE_ROOT, value = OverridingResourcePicker.DEFAULT_ROOT,
+    @Property(name = MergedResourcePicker2.MERGE_ROOT, value = OverridingResourcePicker.DEFAULT_ROOT,
             label = "Root", description = "Root path at which merged resources will be available."),
-    @Property(name=MergedResourcePicker.READ_ONLY, boolValue=true,
+    @Property(name=MergedResourcePicker2.READ_ONLY, boolValue=true,
     label="Read Only",
     description="Specifies if the resources are read-only or can be modified."),
-    @Property(name=MergedResourcePicker.TRAVERSE_PARENT, boolValue=true, propertyPrivate=true)
+    @Property(name=MergedResourcePicker2.TRAVERSE_PARENT, boolValue=true, propertyPrivate=true)
 })
-public class OverridingResourcePicker implements MergedResourcePicker {
+public class OverridingResourcePicker implements MergedResourcePicker2 {
 
     public static final String DEFAULT_ROOT = "/mnt/override";
 
@@ -98,11 +98,6 @@ public class OverridingResourcePicker im
         return resources;
     }
 
-    @Override
-    public List<Resource> pickResources(ResourceResolver resolver, String relativePath) {
-        return pickResources(resolver, relativePath, null);
-    }
-
     private void findInheritanceRoot(final Resource target, final InheritanceRootInfo info) {
         String superType = target.getResourceSuperType();
         if (superType != null) {

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java?rev=1729566&r1=1729565&r2=1729566&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java Wed Feb 10 09:51:00 2016
@@ -30,7 +30,9 @@ import aQute.bnd.annotation.ConsumerType
  * Service interface which can be implemented to define an algorithm used to pick
  * resources to be merged. For each picker service, a separate {@link ResourceProviderFactory}
  * will be exposed at the MERGE_ROOT of the picker.
+ * @deprecated
  */
+@Deprecated
 @ConsumerType
 public interface MergedResourcePicker {
 
@@ -40,7 +42,7 @@ public interface MergedResourcePicker {
      * The value of this service property must be of type String and must not end
      * in a slash.
      */
-    String MERGE_ROOT = "merge.root";
+    String MERGE_ROOT = MergedResourcePicker2.MERGE_ROOT;
 
     /**
      * Service property name specifying whether the resources are read-only
@@ -48,7 +50,7 @@ public interface MergedResourcePicker {
      * to <code>true</code>. The value of this property must be of type
      * Boolean.
      */
-    String READ_ONLY = "merge.readOnly";
+    String READ_ONLY = MergedResourcePicker2.READ_ONLY;
 
     /**
      * Service property name specifying whether the parent hierarchy is
@@ -56,24 +58,10 @@ public interface MergedResourcePicker {
      * property defaults to <code>false</code>. The value of this
      * property must be of type Boolean.
      */
-    String TRAVERSE_PARENT = "merge.traverseParent";
+    String TRAVERSE_PARENT = MergedResourcePicker2.TRAVERSE_PARENT;
 
     /**
      * @see #pickResources(ResourceResolver, String, Resource)
-     * @deprecated
      */
     List<Resource> pickResources(ResourceResolver resolver, String relativePath);
-
-    /**
-     * Method invoked by the MergingResourceProvider to identify the resources to be merged for a given
-     * relative path. The resources returned may be either resources returned from the ResourceResolver
-     * directory or an instance of NonExistingResource.
-     *
-     * @param resolver the ResourceResolver
-     * @param relativePath the path relative to the merge root
-     * @param relatedResource an optional resource which is related to the given path (parent or child)
-     * @return a List of Resource objects
-     */
-    List<Resource> pickResources(ResourceResolver resolver, String relativePath, Resource relatedResource);
-
 }

Added: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker2.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker2.java?rev=1729566&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker2.java (added)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker2.java Wed Feb 10 09:51:00 2016
@@ -0,0 +1,74 @@
+/*
+ * 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.resourcemerger.spi;
+
+import java.util.List;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceProviderFactory;
+import org.apache.sling.api.resource.ResourceResolver;
+
+import aQute.bnd.annotation.ConsumerType;
+
+/**
+ * Service interface which can be implemented to define an algorithm used to pick
+ * resources to be merged. For each picker service, a separate {@link ResourceProviderFactory}
+ * will be exposed at the MERGE_ROOT of the picker.
+ *
+ * @since 1.2
+ */
+@ConsumerType
+public interface MergedResourcePicker2 {
+
+    /**
+     * Service property name identifying the root path for the merged resources.
+     * By convention, starts, with /mnt, although this is by no means required.
+     * The value of this service property must be of type String and must not end
+     * in a slash.
+     */
+    String MERGE_ROOT = "merge.root";
+
+    /**
+     * Service property name specifying whether the resources are read-only
+     * or support CRUD operations. If not specified this property defaults
+     * to <code>true</code>. The value of this property must be of type
+     * Boolean.
+     */
+    String READ_ONLY = "merge.readOnly";
+
+    /**
+     * Service property name specifying whether the parent hierarchy is
+     * traversed to check for hiding properties. If not specified this
+     * property defaults to <code>false</code>. The value of this
+     * property must be of type Boolean.
+     */
+    String TRAVERSE_PARENT = "merge.traverseParent";
+
+    /**
+     * Method invoked by the MergingResourceProvider to identify the resources to be merged for a given
+     * relative path. The resources returned may be either resources returned from the ResourceResolver
+     * directory or an instance of NonExistingResource.
+     *
+     * @param resolver the ResourceResolver
+     * @param relativePath the path relative to the merge root
+     * @param relatedResource an optional resource which is related to the given path (parent or child)
+     * @return a List of Resource objects
+     */
+    List<Resource> pickResources(ResourceResolver resolver, String relativePath, Resource relatedResource);
+}

Propchange: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker2.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker2.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision rev url

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java?rev=1729566&r1=1729565&r2=1729566&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java Wed Feb 10 09:51:00 2016
@@ -20,7 +20,7 @@
 /**
  * Provides a service to merge multiple physical resources into a single one
  */
-@Version("2.0.0")
+@Version("1.2")
 package org.apache.sling.resourcemerger.spi;
 
 import aQute.bnd.annotation.Version;