SLING-3038 - take context service property into account for BindingsValuesProvider services

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1520565 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index f2b1726..c3de71d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,7 +63,7 @@
                             javax.script
                         </Import-Package>
                         <Export-Package>
-                            org.apache.sling.scripting.api;version=2.1.0
+                            org.apache.sling.scripting.api;version=2.2.0
                         </Export-Package>
                     </instructions>
                 </configuration>
diff --git a/src/main/java/org/apache/sling/scripting/api/BindingsValuesProvidersByContext.java b/src/main/java/org/apache/sling/scripting/api/BindingsValuesProvidersByContext.java
new file mode 100644
index 0000000..ece2cc6
--- /dev/null
+++ b/src/main/java/org/apache/sling/scripting/api/BindingsValuesProvidersByContext.java
@@ -0,0 +1,58 @@
+/*
+ * 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.scripting.api;
+
+import java.util.Collection;
+
+import javax.script.ScriptEngineFactory;
+
+import org.apache.sling.scripting.api.BindingsValuesProvider;
+
+/** Provides {@link BindingsValuesProvider} for specific contexts, based on
+ *  their "context" service property.
+ *  */
+public interface BindingsValuesProvidersByContext {
+    
+    /** The name of the multi-value service property that defines the context(s) to which 
+     *  a BindingsValuesProvider applies. 
+     */
+    String CONTEXT = "context";
+    
+    /** The default value of the CONTEXT service property, used for compatibility with
+     *  previous versions of this bundle that didn't require it. 
+     */
+    String DEFAULT_CONTEXT = "request";
+    
+    /** Retrieve the current {@link BindingsValuesProvider} for
+     *  the supplied ScriptEngineFactory and context.
+     *  
+     * @param scriptEngineFactory metadata of the ScriptEngine that's being used
+     * @param context Only BindingsValuesProviders that have this value in their CONTEXT
+     *          service property are considered. For backwards compatibility, BindingsValuesProviders
+     *          which do not have a CONTEXT service property are considered to have CONTEXT=request.  
+     * @return The returned Collection of BindingsValuesProvider is sorted
+     *          so as to give preference to more specific BindingsValuesProvider
+     *          over those that match a compatible.javax.script.name ScriptEngineFactory property,
+     *          for example, in the same way that the SlingScriptAdapterFactory did before
+     *          this service was implemented. 
+     */
+    Collection<BindingsValuesProvider> getBindingsValuesProviders(
+            ScriptEngineFactory scriptEngineFactory,
+            String context);
+}