blob: 2b65cbf62e78a00f8d8783154d7f82a16ecc345a [file] [log] [blame]
/*
* 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;
/**
* The <code>SlingPostConstants</code> interface provides constants for well
* known parameters of the core SlingPostServlet. Extensions of the servlet
* through implementations of the {@link SlingPostOperation} interface may
* extend this constants.
*/
public interface SlingPostConstants {
/**
* Prefix for parameter names which control this POST (RP_ stands for
* "request param") (value is ":"). This prefix must be used on all request
* parameters which have significance to POST request processing. Such
* parameters will not be used to denote properties to be written to the
* repository.
*/
public static final String RP_PREFIX = ":";
/**
* The name of the parameter containing the operation to execute (value is
* ":operation"). If this parameter is missing or empty, the request is
* assumed to be a request to create new content or to modify existing
* content.
*/
public static final String RP_OPERATION = RP_PREFIX + "operation";
/**
* The suffix to the resource path used to indicate to automatically
* generate the name of the new item to create during a content creation
* request (value is "/").
*/
public static final String DEFAULT_CREATE_SUFFIX = "/";
/**
* An alternative suffix to the resource path used to indicate to
* automatically generate the name of the new item to create during a
* content creation request (value is "/*").
*/
public static final String STAR_CREATE_SUFFIX = "/*";
/**
* Name of the predefined modify operation (value is "modify").
* <p>
* The modify operation uses the remaining request parameters to indicate
* nodes and properties to create.
* <p>
* The modify operation is actually chosen by the Sling POST Servlet if the
* request has no {@link #RP_OPERATION} request parameter.
*
* @since 2.0.6 (Bundle version 2.0.6)
*/
public static final String OPERATION_MODIFY = "modify";
/**
* Name of the predefined delete operation (value is "delete").
* <p>
* The delete operation requires no further request parameters and just
* deletes the content addressed by the request.
* <p>
* If the {@link #RP_APPLY_TO} parameter is set the resources listed in that
* parameter are deleted instead of the request resource.
*/
public static final String OPERATION_DELETE = "delete";
/**
* Name of the predefined copy operation (value is "copy").
* <p>
* The copy operation requires the {@link #RP_DEST} request parameter
* denoting the path to copy the content to. In addition the
* {@link #RP_ORDER} parameter may be defined to specificy to relative node
* order of the destination node. Finally the {@link #RP_REPLACE} parameter
* may be set to indicate whether an existing item at the destination should
* be replaced or not.
* <p>
* If the {@link #RP_APPLY_TO} parameter is set the resources listed in that
* parameter are copied instead of the request resource.
*/
public static final String OPERATION_COPY = "copy";
/**
* Name of the predefined move operation (value is "move")
* <p>
* The move operation requires the {@link #RP_DEST} request parameter
* denoting the path to move the content to. In addition the
* {@link #RP_ORDER} parameter may be defined to specificy to relative node
* order of the destination node. Finally the {@link #RP_REPLACE} parameter
* may be set to indicate whether an existing item at the destination should
* be replaced or not.
* <p>
* If the {@link #RP_APPLY_TO} parameter is set the resources listed in that
* parameter are moved instead of the request resource.
*/
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 predefined checkin operation (value is "checkin").
* <p>
* The checkin operation requires no further request parameters and just
* checks in the content addressed by the request.
* <p>
* If the {@link #RP_APPLY_TO} parameter is set the resources listed in that
* parameter are checked in instead of the request resource.
*/
public static final String OPERATION_CHECKIN = "checkin";
/**
* Name of the predefined checkout operation (value is "checkout").
* <p>
* The checkout operation requires no further request parameters and just
* checks out the content addressed by the request.
* <p>
* If the {@link #RP_APPLY_TO} parameter is set the resources listed in that
* parameter are checked out instead of the request resource.
*/
public static final String OPERATION_CHECKOUT = "checkout";
/**
* Name of the predefined restore operation (value is "restore").
* <p>
* The restore operation requires the {@link #RP_VERSION} request parameter
* denoting the name or the label of the version to be restored.
* <p>
* If the {@link #RP_APPLY_TO} parameter is set the resources listed in that
* parameter are restored instead of the request resource. The
* {@link #RP_REMOVE_EXISTING} parameter may be set to true to force
* the operation even if there is a collision.
*/
public static final String OPERATION_RESTORE = "restore";
/**
* Name of the predefined import operation (value is "import").
*
* <p>
* The import operation requires either the {@link #RP_CONTENT} and {@link #RP_CONTENT_TYPE}
* request parameters or the {@link #RP_CONTENT_FILE} request parameter.
* Finally the {@link #RP_REPLACE} parameter may be set to indicate whether
* an existing item at the destination should be overwritten or not.
*/
public static final String OPERATION_IMPORT = "import";
/**
* Name of the request parameter used to indicate the resource to apply the
* operation to (value is ":applyTo").
* <p>
* This property is used by certain opertaions - namely
* {@link #OPERATION_COPY}, {@link #OPERATION_DELETE} and
* {@link #OPERATION_MOVE} - to apply the operation to multiple resources
* instead of the request resource.
*/
public static final String RP_APPLY_TO = RP_PREFIX + "applyTo";
/**
* Name of the request parameter used to indicate the destination for the
* copy and move operations (value is ":dest"). This request parameter is
* required by the copy and move operations.
*/
public static final String RP_DEST = RP_PREFIX + "dest";
/**
* Name of the request parameter indicating whether the destination for a
* copy or move operation is to be replaced if existing (value is
* ":replace"). Copy or move is only possible if the destination exists if
* the replace parameter is set to the case-insignificant value true.
*
* This request parameter is also used to indicate whether the destination node
* for an import operation is to be replaced if existing. The parameter value is
* checked to see if it matches the case-insignificant value true.
*/
public static final String RP_REPLACE = RP_PREFIX + "replace";
/**
* Name of the request parameter indicating whether the destination for a
* property change during an import operation is to be replaced if existing.
* The parameter value is checked to see if it matches the case-insignificant
* value true.
*/
public static final String RP_REPLACE_PROPERTIES = RP_PREFIX + "replaceProperties";
/**
* Optional request parameter indicating the order of newly created nodes in
* creation, copy and move operation requests (value is ":order").
* <p>
* The value of this parameter may be {@link #ORDER_FIRST},
* {@link #ORDER_BEFORE}, {@link #ORDER_AFTER}, {@link #ORDER_LAST} or a
* numberic value indicating the absolute position in the child list of the
* parent node.
*/
public static final String RP_ORDER = RP_PREFIX + "order";
/**
* Name of the request parameter indicating whether the nodes existing
* outside the versioning graph should be removed. See
* {@link javax.jcr.version.VersionManager#restore(javax.jcr.version.Version, boolean)
* VersionManager#restore()} for more info.
* <p>
* This request parameter is optional and can be used by the {@link #OPERATION_RESTORE}.
*/
public static final String RP_REMOVE_EXISTING = RP_PREFIX + "removeExisting";
/**
* Name of the request parameter indicating the name or the label of the
* resource version. This request parameter is required by the
* {@link #OPERATION_RESTORE}.
*/
public static final String RP_VERSION = RP_PREFIX + "version";
/**
* Possible value of the {@link #RP_ORDER} parameter indicating that the
* node by moved to the first position amongst its sibblings (value is
* "first").
*/
public static final String ORDER_FIRST = "first";
/**
* Possible value of the {@link #RP_ORDER} parameter indicating that the
* node by moved immediately before the sibbling whose name is contained in
* the {@link #RP_ORDER} parameter (value is "before ").
*/
public static final String ORDER_BEFORE = "before ";
/**
* Possible value of the {@link #RP_ORDER} parameter indicating that the
* node by moved immediately after the sibbling whose name is contained in
* the {@link #RP_ORDER} parameter (value is "after ").
*/
public static final String ORDER_AFTER = "after ";
/**
* Possible value of the {@link #RP_ORDER} parameter indicating that the
* node by moved to the last position amongst its sibblings (value is
* "last").
*/
public static final String ORDER_LAST = "last";
/**
* Optional request paramter specifying a node name for a newly created node
* (value is ":name").
*/
public static final String RP_NODE_NAME = RP_PREFIX + "name";
/**
* Optional request paramter specifying a node name hint for a newly created
* node (value is ":nameHint").
*/
public static final String RP_NODE_NAME_HINT = RP_PREFIX + "nameHint";
/**
* Prefix for properties addressing repository items with an absolute path
* (value is "/").
*
* @see #ITEM_PREFIX_RELATIVE_CURRENT
*/
public static final String ITEM_PREFIX_ABSOLUTE = "/";
/**
* Prefix for properties addressing repository items with a path relative to
* the current request item (value is "./").
* <p>
* When collecting parameters addressing repository items for modification,
* the parameters are first scanned to see whether there is a parameter with
* this relative path prefix. If such a parameter exists, the modification
* operations only assumes parameters whose name is prefixes with this
* prefix or the {@link #ITEM_PREFIX_ABSOLUTE} or the
* {@link #ITEM_PREFIX_RELATIVE_PARENT} to be parameters addressing
* properties to modify. Otherwise, that is if no parameter starts with this
* prefix, all parameters not starting with the
* {@link #RP_PREFIX command prefix} are considered addressing properties to
* modify.
*/
public static final String ITEM_PREFIX_RELATIVE_CURRENT = "./";
/**
* Prefix for properties addressing repository items with a path relative to
* the parent of the request item (value is "../").
*
* @see #ITEM_PREFIX_RELATIVE_CURRENT
*/
public static final String ITEM_PREFIX_RELATIVE_PARENT = "../";
/**
* Optional request parameter: redirect to the specified URL after POST
*/
public static final String RP_REDIRECT_TO = RP_PREFIX + "redirect";
/**
* Optional request parameter: define how the response is sent back to the
* client. Supported values for this property are
* {@link #STATUS_VALUE_BROWSER} and {@link #STATUS_VALUE_STANDARD}. The
* default is to assume {@link #STATUS_VALUE_STANDARD} if the parameter is
* not set or set to any other value.
*/
public static final String RP_STATUS = RP_PREFIX + "status";
/**
* Optional request parameter: defines if to enable the error handling
* also for POST request.
* The parameter value is checked to see if it matches the case-insensitive
* value true.
*
* @since 2.2.0 (Bundle version 2.3.0)
*/
public static final String RP_SEND_ERROR = RP_PREFIX + "sendError";
/**
* The supported value for the {@link #RP_STATUS} request parameter
* requesting to report success or failure of request processing using
* standard HTTP status codes. This value is assumed as the default value
* for the {@link #RP_STATUS} parameter if the parameter is missing or not
* any of the two supported values.
*
* @see #RP_STATUS
* @see #STATUS_VALUE_BROWSER
*/
public static final String STATUS_VALUE_STANDARD = "standard";
/**
* The supported value for the {@link #RP_STATUS} request parameter
* requesting to not report success or failure of request processing using
* standard HTTP status codes but instead alwas set the status to 200/OK and
* only report the real success or failure status in the XHTML response.
*
* @see #RP_STATUS
* @see #STATUS_VALUE_STANDARD
*/
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
*/
public static final String RP_DISPLAY_EXTENSION = RP_PREFIX
+ "displayExtension";
/**
* SLING-130, suffix that maps form field names to different JCR property
* names
*/
public static final String VALUE_FROM_SUFFIX = "@ValueFrom";
/**
* Suffix indicating a type hint for the property (value is "@TypeHint").
*/
public static final String TYPE_HINT_SUFFIX = "@TypeHint";
/**
* Suffix indicating a default value for a property (value is
* "@DefaultValue").
*/
public static final String DEFAULT_VALUE_SUFFIX = "@DefaultValue";
/**
* Suffix indicating that the named property is to be removed before
* applying any new content (value is "@Delete").
*/
public static final String SUFFIX_DELETE = "@Delete";
/**
* Suffix indicating that the named item is to be set from an item whose
* absolute or relative path is given in the parameter's value (value is
* "@MoveFrom").
* <p>
* This suffix is similar to the {@link #VALUE_FROM_SUFFIX} in that the
* value for the item is not taken from the request parameter itself but
* from somewhere else. In this case the value is set by moving another
* repository item (in the same workspace) to the location addressed by the
* parameter.
*/
public static final String SUFFIX_MOVE_FROM = "@MoveFrom";
/**
* Suffix indicating that the named item is to be set from an item whose
* absolute or relative path is given in the parameter's value (value is
* "@CopyFrom").
* <p>
* This suffix is similar to the {@link #VALUE_FROM_SUFFIX} in that the
* value for the item is not taken from the request parameter itself but
* from somewhere else. In this case the value is set by copying another
* repository item (in the same workspace) to the location addressed by the
* parameter.
*/
public static final String SUFFIX_COPY_FROM = "@CopyFrom";
/**
* Suffix indicating that blank value or values for this property will be
* ignored.
*/
public static final String SUFFIX_IGNORE_BLANKS = "@IgnoreBlanks";
/**
* Suffix indicating that the default value should be used when the property
* is not defined. By default the default value is only used when the property
* is defined, but blank (i.e. an empty form field). With this suffix, the
* default value will also be used if the property isn't provided at all. This is
* useful for HTML checkboxes.
*/
public static final String SUFFIX_USE_DEFAULT_WHEN_MISSING = "@UseDefaultWhenMissing";
/**
* Suffix indicating that a multi-value property is to be handled as an
* ordered set and the sent values start with either "+" or "-" to indicate
* wether a value should be added to or removed from the set.
* <p>
* If a property is marked to be patched with this suffix only properties
* whose value start with {@link #PATCH_ADD +} or {@link #PATCH_REMOVE -}
* are considered. Other values are ignored.
*
* @see #PATCH_ADD
* @see #PATCH_REMOVE
*/
public static final String SUFFIX_PATCH = "@Patch";
/**
* Indicates a value to be added to the named multi-value property if the
* property is being #{@link #SUFFIX_PATCH patched}.
* <p>
* If the given value
* already exists amongst the values of the multi-value properties it is
* not added.
*/
public static final char PATCH_ADD = '+';
/**
* Indicates a value to be removed from the named multi-value property if
* the property is being #{@link #SUFFIX_PATCH patched}.
* <p>
* If the given value exists multiple times amongst the values of the
* multi-value properties all occurrences are removed.
*/
public static final char PATCH_REMOVE = '-';
/**
* Name of the request parameter containing the content to be imported
* by the 'import' operation.
*/
public static final String RP_CONTENT = RP_PREFIX + "content";
/**
* Name of the request parameter containing the content type of the content
* to be imported by the 'import' operation.
*/
public static final String RP_CONTENT_TYPE = RP_PREFIX + "contentType";
/**
* Name of the request parameter containing the file to be imported
* by the 'import' operation.
*/
public static final String RP_CONTENT_FILE = RP_PREFIX + "contentFile";
/**
* Name of the request parameter indicating whether versionable nodes should
* be checked in during an {@link SlingPostConstants#OPERATION_IMPORT} operation.
*/
public static final String RP_CHECKIN = RP_PREFIX + "checkin";
/**
* Name of the request parameter indicating whether versionable nodes should
* be checked in during an {@link SlingPostConstants#OPERATION_IMPORT} operation.
*
* @since 2.1.2
*/
public static final String RP_AUTO_CHECKOUT = RP_PREFIX + "autoCheckout";
/**
* Name of the request attribute (not parameter) indicating that a post operation
* should not invoke the commit method on the resource resolver upon completion.
*
* @since 2.1.2
*/
public static final String ATTR_SKIP_SESSION_HANDLING = "skip-session-handling";
/**
* Name of the request parameter indicating offset of the chunk in request.
* @since 2.3.4
*/
public static final String SUFFIX_OFFSET = "@Offset";
/**
* Name of the request parameter indicating length of complete file.
* @since 2.3.4
*/
public static final String SUFFIX_LENGTH = "@Length";
/**
* Name of the request parameter indicating request contains last chunk
* and as a result upload should be finished. It is useful in scenarios
* like file streaming where file size is not known in advance.
* @since 2.3.4
*/
public static final String SUFFIX_COMPLETED = "@Completed";
/**
* Name of the request parameter indicating request operation is applicable
* to chunks.
* @since 2.3.4
*/
public static final String RP_APPLY_TO_CHUNKS = RP_PREFIX + "applyToChunks";
/**
* Constant for the sling:chunks mixin. Used to identify that node
* contains chunks.
* @since 2.3.4
*/
public static final String NT_SLING_CHUNK_MIXIN = "sling:chunks";
/**
* Constant for the sling:fileLength property. The property stores file
* length.
* @since 2.3.4
*/
public static final String NT_SLING_FILE_LENGTH = "sling:fileLength";
/**
* Constant for the sling:length property. The property stores
* cumulative length of all uploaded chunks.
* @since 2.3.4
*/
public static final String NT_SLING_CHUNKS_LENGTH = "sling:length";
/**
* Constant for the sling:chunk node type. The node type is used
* to store chunk.
* @since 2.3.4
*/
public static final String NT_SLING_CHUNK_NODETYPE = "sling:chunk";
/**
* Constant for the sling:offset property. The property stores start
* offset of chunk.
* @since 2.3.4
*/
public static final String NT_SLING_CHUNK_OFFSET = "sling:offset";
/**
* Constant for prefix for sling:chunk node name.
* @since 2.3.4
*/
public static final String CHUNK_NODE_NAME = "chunk";
}