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 2012/07/25 17:57:06 UTC
svn commit: r1365645 - in /sling/trunk:
bundles/api/src/main/java/org/apache/sling/api/resource/
bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/
bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/imp...
Author: cziegeler
Date: Wed Jul 25 15:57:05 2012
New Revision: 1365645
URL: http://svn.apache.org/viewvc?rev=1365645&view=rev
Log:
SLING-2530 : Implement CRUD based on resources
Added:
sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/crud/
sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/crud/CrudTest.java (with props)
sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/crud/
sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/crud/crud-test.jsp (with props)
Modified:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolver.java
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntry.java
Modified: sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolver.java?rev=1365645&r1=1365644&r2=1365645&view=diff
==============================================================================
--- sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolver.java (original)
+++ sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolver.java Wed Jul 25 15:57:05 2012
@@ -506,7 +506,7 @@ public interface ResourceResolver extend
* Delete the resource
* @param resource The resource to delete
*
- * @throws PersistenceException, NullPointerException
+ * @throws PersistenceException, NullPointerException, UnsupportedOperationException
*/
void delete(Resource resource)
throws PersistenceException;
@@ -518,7 +518,7 @@ public interface ResourceResolver extend
* @param properties Optional properties for the resource
* @return The new resource
*
- * @throws PersistenceException, NullPointerException
+ * @throws PersistenceException, NullPointerException, UnsupportedOperationException
*/
Resource addChild(Resource parent, String name, ValueMap properties)
throws PersistenceException;
Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java?rev=1365645&r1=1365644&r2=1365645&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java Wed Jul 25 15:57:05 2012
@@ -1007,6 +1007,9 @@ public class ResourceResolverImpl extend
final ModifyingResourceProvider mrp = this.factory.getRootProviderEntry().getModifyingProvider(this.context,
this,
path);
+ if ( mrp == null ) {
+ throw new UnsupportedOperationException("delete at '" + path + "'");
+ }
mrp.delete(this, path);
}
@@ -1019,10 +1022,18 @@ public class ResourceResolverImpl extend
if ( name == null ) {
throw new NullPointerException("name");
}
- final String path = parent.getPath() + '/' + name;
+ final String path;
+ if ( parent.getPath().equals("/") ) {
+ path = parent.getPath() + name;
+ } else {
+ path = parent.getPath() + "/" + name;
+ }
final ModifyingResourceProvider mrp = this.factory.getRootProviderEntry().getModifyingProvider(this.context,
this,
path);
+ if ( mrp == null ) {
+ throw new UnsupportedOperationException("addChild '" + name + "' at " + parent.getPath());
+ }
return mrp.create(this, path, properties);
}
Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntry.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntry.java?rev=1365645&r1=1365644&r2=1365645&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntry.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderEntry.java Wed Jul 25 15:57:05 2012
@@ -347,11 +347,18 @@ public class ResourceProviderEntry imple
return (ModifyingResourceProvider) provider;
}
if ( rp.ownsRoots() ) {
- throw new UnsupportedOperationException();
+ return null;
}
}
}
- throw new UnsupportedOperationException();
+ // try this one
+ for(final ProviderHandler rp : this.providers) {
+ final ResourceProvider provider = rp.getResourceProvider(ctx);
+ if ( provider instanceof ModifyingResourceProvider) {
+ return (ModifyingResourceProvider) provider;
+ }
+ }
+ return null;
}
private static final char SPLIT_SEP = '/';
Added: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/crud/CrudTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/crud/CrudTest.java?rev=1365645&view=auto
==============================================================================
--- sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/crud/CrudTest.java (added)
+++ sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/crud/CrudTest.java Wed Jul 25 15:57:05 2012
@@ -0,0 +1,75 @@
+/*
+ * 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.crud;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.httpclient.NameValuePair;
+import org.apache.sling.commons.testing.integration.NameValuePairList;
+import org.apache.sling.launchpad.webapp.integrationtest.RenderingTestBase;
+import org.apache.sling.servlets.post.SlingPostConstants;
+
+public class CrudTest extends RenderingTestBase {
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ final String slingResourceType = getClass().getName();
+
+ this.scriptPath = "/apps/" + slingResourceType;
+ this.testClient.mkdirs(WEBDAV_BASE_URL, scriptPath);
+
+ // create the test node, under a path that's specific to this class to allow collisions
+ final String url = HTTP_BASE_URL + "/" + getClass().getSimpleName() + "/" + System.currentTimeMillis() + SlingPostConstants.DEFAULT_CREATE_SUFFIX;
+
+ final NameValuePairList list = new NameValuePairList();
+ list.add("sling:resourceType", slingResourceType);
+
+ this.displayUrl = testClient.createNode(url, list, null, true);
+
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ testClient.delete(this.displayUrl);
+ super.tearDown();
+ }
+
+ public void testCreate() throws Exception {
+ final String testScriptPath = this.uploadTestScript("crud/crud-test.jsp", "html.jsp");
+
+ final String name = getClass().getSimpleName() + System.currentTimeMillis();
+ final List<NameValuePair> params = new ArrayList<NameValuePair>();
+ params.add(new NameValuePair("name", name));
+ params.add(new NameValuePair("a", "100"));
+ params.add(new NameValuePair("b", "200"));
+ try {
+ final String content = getContent(displayUrl + ".html", CONTENT_TYPE_PLAIN, params);
+ assertTrue("Content should included created marker: " + content, content.contains("created"));
+
+ final String json = getContent(HTTP_BASE_URL + "/" + name + ".json", CONTENT_TYPE_JSON);
+ assertJavascript("100", json, "out.print(data.a)");
+ assertJavascript("200", json, "out.print(data.b)");
+
+ } finally {
+ testClient.delete(testScriptPath);
+ }
+
+ }
+}
Propchange: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/crud/CrudTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/crud/CrudTest.java
------------------------------------------------------------------------------
svn:keywords = author date id revision rev url
Propchange: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/crud/CrudTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/crud/crud-test.jsp
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/crud/crud-test.jsp?rev=1365645&view=auto
==============================================================================
--- sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/crud/crud-test.jsp (added)
+++ sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/crud/crud-test.jsp Wed Jul 25 15:57:05 2012
@@ -0,0 +1,48 @@
+<%--
+/*
+ * 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.
+ */
+--%>
+<%@page
+ session="false"
+ contentType="text/plain"
+ import="org.apache.sling.api.resource.Resource,
+ org.apache.sling.api.resource.ResourceResolver,
+ org.apache.sling.api.resource.ValueMap,
+ org.apache.sling.api.wrappers.ValueMapDecorator"
+%><%@taglib prefix="sling" uri="http://sling.apache.org/taglibs/sling/1.0"%><%
+%><sling:defineObjects/><%
+
+ final ResourceResolver resolver = slingRequest.getResourceResolver();
+ final String name = request.getParameter("name");
+
+ try {
+ final ValueMap vm = new ValueMapDecorator(new java.util.HashMap<String, Object>());
+ vm.put("a", request.getParameter("a"));
+ vm.put("b", request.getParameter("b"));
+
+ final Resource rsrc = resolver.addChild(resolver.getResource("/"), name, vm);
+
+ resolver.commit();
+ %>Resource created at <%= rsrc.getPath() %><%
+ } catch (final Exception e) {
+ final java.io.StringWriter sw = new java.io.StringWriter();
+ e.printStackTrace(new java.io.PrintWriter(sw));
+ %>Unable to create resource '<%= name %>' : <%= sw %>.<%
+ }
+%>
\ No newline at end of file
Propchange: sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/crud/crud-test.jsp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/crud/crud-test.jsp
------------------------------------------------------------------------------
svn:keywords = Id
Propchange: sling/trunk/launchpad/integration-tests/src/main/resources/integration-test/crud/crud-test.jsp
------------------------------------------------------------------------------
svn:mime-type = text/plain