Author: fmeschbe Date: Sat Jan 3 12:29:59 2009 New Revision: 731082 URL: http://svn.apache.org/viewvc?rev=731082&view=rev Log: SLING-804 Implement NopOperation and register it
Added: incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/NopOperation.java (with props) Modified: incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/SlingPostConstants.java incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java Modified: incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/SlingPostConstants.java URL: http://svn.apache.org/viewvc/incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/SlingPostConstants.java?rev=731082&r1=731081&r2=731082&view=diff ============================================================================== --- incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/SlingPostConstants.java (original) +++ incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/SlingPostConstants.java Sat Jan 3 12:29:59 2009 @@ -99,6 +99,17 @@ public static final String OPERATION_MOVE = "move"; /** + * Name of the predefined null operation (value is "nop"). + * <p> + * The null operation is a pseudo operation, which has no effects + * whatsoever except setting the response status. The null operation may + * be accompanied with the {...@link #RP_NOP_STATUS} parameter to indicate + * the actual response status to set and the {...@link #RP_STATUS} parameter + * to indicate how to send the actual response status. + */ + public static final String OPERATION_NOP = "nop"; + + /** * Name of the request parameter used to indicate the resource to apply the * operation to (value is ":applyTo"). * <p> @@ -246,6 +257,29 @@ public static final String STATUS_VALUE_BROWSER = "browser"; /** + * Optional request parameter to indicate the actual response status to + * send back as a result of calling the #OPERATION_NOP (value is ":nopstatus"). + * <p> + * This parameter is expected to be single-valued and by an integer being a + * valid HTTP status code. If this parameter is missing or the parameter + * value cannot be converted to a HTTP status code (integer in the range + * [100..999]), the default status code 200/OK is returned. + * + * @see #OPERATION_NOP + * @see #RP_STATUS + */ + public static final String RP_NOP_STATUS = RP_PREFIX + "nopstatus"; + + /** + * The default response status sent back by a {...@link #OPERATION_NOP} if the + * {...@link #RP_NOP_STATUS} parameter is not provided or the parameter value + * cannot be converted into a valid response status code (value is 200). + * + * @see #RP_NOP_STATUS + */ + public static final int NOPSTATUS_VALUE_DEFAULT = 200; + + /** * Optional request parameter: if provided, added at the end of the computed * (or supplied) redirect URL */ Modified: incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java URL: http://svn.apache.org/viewvc/incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java?rev=731082&r1=731081&r2=731082&view=diff ============================================================================== --- incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java (original) +++ incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java Sat Jan 3 12:29:59 2009 @@ -42,6 +42,7 @@ import org.apache.sling.servlets.post.impl.operations.DeleteOperation; import org.apache.sling.servlets.post.impl.operations.ModifyOperation; import org.apache.sling.servlets.post.impl.operations.MoveOperation; +import org.apache.sling.servlets.post.impl.operations.NopOperation; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; import org.osgi.service.component.ComponentContext; @@ -50,18 +51,22 @@ /** * POST servlet that implements the sling client library "protocol" - * + * * @scr.component immediate="true" label="%servlet.post.name" * description="%servlet.post.description" * @scr.service interface="javax.servlet.Servlet" * @scr.property name="service.description" value="Sling Post Servlet" * @scr.property name="service.vendor" value="The Apache Software Foundation" - * + * * Use this as the default servlet for POST requests for Sling * @scr.property name="sling.servlet.resourceTypes" * value="sling/servlet/default" private="true" * @scr.property name="sling.servlet.methods" value="POST" private="true" - * @scr.reference name="postProcessor" interface="org.apache.sling.servlets.post.SlingPostProcessor" cardinality="0..n" policy="dynamic" + * + * Get all SlingPostProcessors + * @scr.reference name="postProcessor" + * interface="org.apache.sling.servlets.post.SlingPostProcessor" + * cardinality="0..n" policy="dynamic" */ public class SlingPostServlet extends SlingAllMethodsServlet { @@ -127,6 +132,7 @@ new MoveOperation()); postOperations.put(SlingPostConstants.OPERATION_DELETE, new DeleteOperation()); + postOperations.put(SlingPostConstants.OPERATION_NOP, new NopOperation()); } @Override Added: incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/NopOperation.java URL: http://svn.apache.org/viewvc/incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/NopOperation.java?rev=731082&view=auto ============================================================================== --- incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/NopOperation.java (added) +++ incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/NopOperation.java Sat Jan 3 12:29:59 2009 @@ -0,0 +1,54 @@ +/* + * 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.servlets.post.impl.operations; + +import org.apache.sling.api.SlingHttpServletRequest; +import org.apache.sling.api.servlets.HtmlResponse; +import org.apache.sling.servlets.post.SlingPostConstants; +import org.apache.sling.servlets.post.SlingPostOperation; +import org.apache.sling.servlets.post.SlingPostProcessor; + +/** + * The <code>NopOperation</code> class implements no operation at all. It just + * sets the response status accroding to the <i>:nopstatus</i> parameter if + * availables. Otherwise the status is set as 200/OK. + */ +public class NopOperation implements SlingPostOperation { + + public void run(SlingHttpServletRequest request, HtmlResponse response, + SlingPostProcessor[] processors) { + + // get the :nopstatus parameter for a specific code + int status = SlingPostConstants.NOPSTATUS_VALUE_DEFAULT; + String nopStatusString = request.getParameter(SlingPostConstants.RP_NOP_STATUS); + if (nopStatusString != null) { + try { + int nopStatusPar = Integer.parseInt(nopStatusString); + if (nopStatusPar >= 100 && nopStatusPar <= 999) { + status = nopStatusPar; + } + } catch (NumberFormatException nfe) { + // illegal number, use default + } + } + + response.setStatus(status, "Null Operation Status: " + status); + } + +} Propchange: incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/NopOperation.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/sling/trunk/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/NopOperation.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev Url