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