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 2013/05/17 14:49:54 UTC

svn commit: r1483777 - in /sling/trunk/launchpad: integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/resourceprovider/ test-services/ test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/

Author: bdelacretaz
Date: Fri May 17 12:49:53 2013
New Revision: 1483777

URL: http://svn.apache.org/r1483777
Log:
test/example PlanetsResourceProvider added

Added:
    sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/resourceprovider/
    sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/resourceprovider/PlanetsResourceProviderTest.java
    sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/
    sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetResource.java
    sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java
Modified:
    sling/trunk/launchpad/test-services/pom.xml

Added: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/resourceprovider/PlanetsResourceProviderTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/resourceprovider/PlanetsResourceProviderTest.java?rev=1483777&view=auto
==============================================================================
--- sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/resourceprovider/PlanetsResourceProviderTest.java (added)
+++ sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/resourceprovider/PlanetsResourceProviderTest.java Fri May 17 12:49:53 2013
@@ -0,0 +1,73 @@
+/*
+ * 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.launchpad.webapp.integrationtest.resourceprovider;
+
+import org.apache.sling.commons.testing.integration.HttpTestBase;
+
+/**
+ * Test the PlanetsResourceProvider that the test-services bundles provides */ 
+public class PlanetsResourceProviderTest extends HttpTestBase {
+
+    private void assertStrings(String url, String [] what) throws Exception {
+        final String content = getContent(url, CONTENT_TYPE_JSON);
+        for(String expected : what) {
+            if(expected.startsWith("!")) {
+                assertFalse("NOT expecting '" + expected + "' in " + url, content.contains(expected.substring(1)));
+            } else {
+                assertTrue("Expecting '" + expected + "' in " + url, content.contains(expected));
+            }
+        }
+    }
+    
+    public void testRootResource() throws Exception {
+        assertStrings(
+            HTTP_BASE_URL + "/planets.tidy.-1.json", 
+            new String [] {
+                    "earth",
+                    "moon",
+                    "Moon",
+                    "Resources can have different sets of properties",
+                    "\"name\": \"Uranus\""
+            });
+    }
+    
+    public void testEarthResource() throws Exception {
+        assertStrings(
+                HTTP_BASE_URL + "/planets.tidy.-1.json", 
+                new String [] {
+                        "earth",
+                        "moon",
+                        "Moon",
+                        "Resources can have different sets of properties",
+                        "\"name\": \"Uranus\"",
+                        "384"
+                });
+    }
+    
+    public void testMoonResource() throws Exception {
+        assertStrings(
+                HTTP_BASE_URL + "/planets/earth/moon.tidy.json", 
+                new String [] {
+                        "!earth",
+                        "!moon",
+                        "Moon",
+                        "!Resources can have different sets of properties",
+                        "!\"name\": \"Uranus\"",
+                        "384"
+                });
+    }
+}

Modified: sling/trunk/launchpad/test-services/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/test-services/pom.xml?rev=1483777&r1=1483776&r2=1483777&view=diff
==============================================================================
--- sling/trunk/launchpad/test-services/pom.xml (original)
+++ sling/trunk/launchpad/test-services/pom.xml Fri May 17 12:49:53 2013
@@ -77,6 +77,20 @@
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.sling</groupId>
+                <artifactId>maven-sling-plugin</artifactId>
+                <version>2.1.0</version>
+                <executions>
+                    <execution>
+                        <id>generate-adapter-metadata</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-adapter-metadata</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
     <dependencies>
@@ -127,6 +141,11 @@
             <version>2.0.6</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>adapter-annotations</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
         </dependency>

Added: sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetResource.java?rev=1483777&view=auto
==============================================================================
--- sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetResource.java (added)
+++ sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetResource.java Fri May 17 12:49:53 2013
@@ -0,0 +1,94 @@
+/*
+ * 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.launchpad.testservices.resourceprovider;
+
+import java.util.HashMap;
+
+import org.apache.sling.api.resource.AbstractResource;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceMetadata;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.ValueMapDecorator;
+import org.apache.sling.adapter.annotations.Adaptable;
+import org.apache.sling.adapter.annotations.Adapter;
+
+/** A Sling Resource that represents a planet */
+@Adaptable(adaptableClass=Resource.class, adapters={
+    @Adapter({ValueMap.class})
+})
+public class PlanetResource extends AbstractResource implements Resource {
+
+    private final String path;
+    private final ResourceMetadata metadata;
+    private final ValueMap valueMap;
+    private final ResourceResolver resolver;
+    
+    public static final String RESOURCE_TYPE = "sling/test-services/planet";
+    
+    static class PlanetValueMap extends ValueMapDecorator {
+        PlanetValueMap(String name, int distance) {
+            super(new HashMap<String, Object>());
+            put("name", name);
+            put("distance", distance);
+        }
+    }
+    
+    PlanetResource(ResourceResolver resolver, String path, ValueMap valueMap) {
+        this.path = path;
+                
+        this.valueMap = valueMap;
+        this.resolver = resolver;
+        
+        metadata = new ResourceMetadata();
+        metadata.setResolutionPath(path);
+    }
+    
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + " " + path;
+    }
+    
+    public String getPath() {
+        return path;
+    }
+
+    public ResourceMetadata getResourceMetadata() {
+        return metadata;
+    }
+
+    public ResourceResolver getResourceResolver() {
+        return resolver;
+    }
+
+    public String getResourceSuperType() {
+        return null;
+    }
+
+    public String getResourceType() {
+        return RESOURCE_TYPE;
+    }
+    
+    @Override
+    @SuppressWarnings("unchecked")
+    public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
+        if(type == ValueMap.class) {
+            return (AdapterType)valueMap;
+        }
+        return super.adaptTo(type);
+    }
+}
\ No newline at end of file

Added: sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java?rev=1483777&view=auto
==============================================================================
--- sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java (added)
+++ sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java Fri May 17 12:49:53 2013
@@ -0,0 +1,114 @@
+/*
+ * 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.launchpad.testservices.resourceprovider;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+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;
+
+/** Test/example ResourceProvider that provides info about
+ *  the Solar System's planets at /planets */
+@Component
+@Service
+@Properties({
+    @Property(name=ResourceProvider.ROOTS, value=PlanetsResourceProvider.ROOT)
+})
+public class PlanetsResourceProvider implements ResourceProvider {
+
+    /** 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;
+    
+    /* Planet data from http://nineplanets.org/data.html
+     * (not that we care much about accuracy anyway ;-) 
+     */
+    static {
+        definePlanet("Mercury", 57910);
+        definePlanet("Venus", 108200);
+        definePlanet("Earth", 149600).put("comment", "Resources can have different sets of properties");
+        definePlanet("Mars", 227940);
+        definePlanet("Jupiter", 4332);
+        definePlanet("Saturn", 10759);
+        definePlanet("Uranus", 30685);
+        definePlanet("Neptune", 60190);
+
+        // Add the moon to test a two-level hierarchy
+        final String moonPath = ABS_ROOT + "/earth/moon";
+        PLANETS.put(moonPath, new PlanetResource.PlanetValueMap("Moon", 384));
+    }
+    
+    /** ResourceProvider interface */
+    public Resource getResource(ResourceResolver resolver, HttpServletRequest req, String path) {
+        // Synthetic resource for our root, so that /planets works
+        if((ABS_ROOT).equals(path)) {
+            return new SyntheticResource(resolver, 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);
+    }
+
+    /** 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)) {
+            final List<Resource> kids = new ArrayList<Resource>();
+            for(Map.Entry<String, ValueMap> e : PLANETS.entrySet()) {
+                if(parent.getPath().equals(parentPath(e.getKey()))) {
+                    kids.add(new PlanetResource(parent.getResourceResolver(), e.getKey(), e.getValue()));
+                }
+            }
+            return kids.iterator();
+        } else {
+            return null;
+        }
+    }
+    
+    private static String parentPath(String path) {
+        final int lastSlash = path.lastIndexOf("/");
+        return lastSlash > 0 ? path.substring(0, lastSlash) : "";
+    }
+    
+    private static ValueMap definePlanet(String name, int distance) {
+        final ValueMap valueMap = new PlanetResource.PlanetValueMap(name, distance);
+        PLANETS.put(ABS_ROOT + "/" + name.toLowerCase(), valueMap);
+        return valueMap;
+    }
+}
\ No newline at end of file