SLING-5482 - adapt the PlanetsResourceProvider to the new ResourceProvider SPI

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1728475 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 879555a..b850c73 100644
--- a/pom.xml
+++ b/pom.xml
@@ -139,7 +139,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.4.2</version>
+            <version>2.10.1-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java b/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java
index 37a52a1..1649332 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java
@@ -22,44 +22,48 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Properties;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceProvider;
-import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.SyntheticResource;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.launchpad.testservices.resourceprovider.PlanetsResourceProvider.DoesNotNeedAContext;
+import org.apache.sling.spi.resource.provider.ResolverContext;
+import org.apache.sling.spi.resource.provider.ResourceContext;
+import org.apache.sling.spi.resource.provider.ResourceProvider;
 
 /** Test/example ResourceProvider that provides info about
  *  the Solar System's planets at /planets. 
  *  Use /planets.tidy.-1.json to GET the whole thing. 
+ *  
+ *  This uses the new (February 2016) spi.ResourceProvider base class.
+ *  If you need an example based on the old ResourceProvider interface,
+ *  see this code at svn revision 1727946.
  */
 @Component
-@Service
-@Properties({
-    @Property(name=ResourceProvider.ROOTS, value=PlanetsResourceProvider.ROOT)
+@Service(value=ResourceProvider.class)
+@Properties({ 
+    @Property(name = ResourceProvider.PROPERTY_NAME, value = "Planets"),
+    @Property(name = ResourceProvider.PROPERTY_ROOT, value=PlanetsResourceProvider.ROOT)
 })
-public class PlanetsResourceProvider implements ResourceProvider {
+public class PlanetsResourceProvider extends ResourceProvider<DoesNotNeedAContext> {
 
     /** Our planet data. PlanetResource is created when resolving, as
      *  it points to a specific ResourceResolver. */
     private static final Map<String, ValueMap> PLANETS = new HashMap<String, ValueMap>();
     
     /** This can be configurable of course */ 
-    public static final String ROOT = "planets";
-    public static final String ABS_ROOT = "/" + ROOT;
+    public static final String ROOT = "/planets";
     
     /* Planet data from http://nineplanets.org/data.html
-     * (not that we care much about accuracy anyway ;-) 
+     * (not that we care much about accuracy for this example ;-) 
      */
     static {
         definePlanet("Mercury", 57910);
         definePlanet("Venus", 108200);
-        definePlanet("Earth", 149600).put("comment", "Resources can have different sets of properties");
+        definePlanet("Earth", 149600).put("comment", "Resources can each have different sets of properties");
         definePlanet("Mars", 227940);
         definePlanet("Jupiter", 4332);
         definePlanet("Saturn", 10759);
@@ -67,30 +71,32 @@
         definePlanet("Neptune", 60190);
 
         // Add the moon to test a two-level hierarchy
-        final String moonPath = ABS_ROOT + "/earth/moon";
+        final String moonPath = ROOT + "/earth/moon";
         PLANETS.put(moonPath, new PlanetResource.PlanetValueMap("Moon", 384));
     }
     
-    /** ResourceProvider interface */
-    public Resource getResource(ResourceResolver resolver, HttpServletRequest req, String path) {
+    /** If this provider required a context this would be more elaborate,
+     *  but for this simple example we don't need one.
+     */
+    public static class DoesNotNeedAContext {
+    };
+    
+    @Override
+    public Resource getResource(ResolverContext<DoesNotNeedAContext> ctx,
+            String path, ResourceContext resourceContext, Resource parent) {
         // Synthetic resource for our root, so that /planets works
-        if((ABS_ROOT).equals(path)) {
-            return new SyntheticResource(resolver, path, PlanetResource.RESOURCE_TYPE);
+        if((ROOT).equals(path)) {
+            return new SyntheticResource(ctx.getResourceResolver(), path, PlanetResource.RESOURCE_TYPE);
         }
         
         // Not root, return a Planet if we have one
         final ValueMap data = PLANETS.get(path);
-        return data == null ? null : new PlanetResource(resolver, path, data);
+        return data == null ? null : new PlanetResource(ctx.getResourceResolver(), path, data);
     }
 
-    /** ResourceProvider interface */
-    public Resource getResource(ResourceResolver resolver, String path) {
-        return getResource(resolver, null, path);
-    }
-
-    /** ResourceProvider interface */
-    public Iterator<Resource> listChildren(Resource parent) {
-        if(parent.getPath().startsWith(ABS_ROOT)) {
+    @Override
+    public Iterator<Resource> listChildren(ResolverContext<DoesNotNeedAContext> ctx, Resource parent) {
+        if(parent.getPath().startsWith(ROOT)) {
             // Not the most efficient thing...good enough for this example
             final List<Resource> kids = new ArrayList<Resource>();
             for(Map.Entry<String, ValueMap> e : PLANETS.entrySet()) {
@@ -111,7 +117,7 @@
     
     private static ValueMap definePlanet(String name, int distance) {
         final ValueMap valueMap = new PlanetResource.PlanetValueMap(name, distance);
-        PLANETS.put(ABS_ROOT + "/" + name.toLowerCase(), valueMap);
+        PLANETS.put(ROOT + "/" + name.toLowerCase(), valueMap);
         return valueMap;
     }
 }
\ No newline at end of file