use of org.apache.sling.servlets.post.impl.helper.Chunk in project sling by apache.
the class AbstractCreateOperation method collectContent.
/**
* Collects the properties that form the content to be written back to the
* resource tree.
*/
protected Map<String, RequestProperty> collectContent(final SlingHttpServletRequest request, final PostResponse response) {
final boolean requireItemPrefix = requireItemPathPrefix(request);
// walk the request parameters and collect the properties
final LinkedHashMap<String, RequestProperty> reqProperties = new LinkedHashMap<>();
for (final Map.Entry<String, RequestParameter[]> e : request.getRequestParameterMap().entrySet()) {
final String paramName = e.getKey();
if (ignoreParameter(paramName)) {
continue;
}
// skip parameters that do not start with the save prefix
if (requireItemPrefix && !hasItemPathPrefix(paramName)) {
continue;
}
// ensure the paramName is an absolute property name
final String propPath = toPropertyPath(paramName, response);
// causes the setProperty using the 'long' property type
if (propPath.endsWith(SlingPostConstants.TYPE_HINT_SUFFIX)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.TYPE_HINT_SUFFIX);
final RequestParameter[] rp = e.getValue();
if (rp.length > 0) {
prop.setTypeHintValue(rp[0].getString());
}
continue;
}
// @DefaultValue
if (propPath.endsWith(SlingPostConstants.DEFAULT_VALUE_SUFFIX)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.DEFAULT_VALUE_SUFFIX);
prop.setDefaultValues(e.getValue());
continue;
}
// fulltext form field.
if (propPath.endsWith(SlingPostConstants.VALUE_FROM_SUFFIX)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.VALUE_FROM_SUFFIX);
// @ValueFrom params must have exactly one value, else ignored
if (e.getValue().length == 1) {
final String refName = e.getValue()[0].getString();
final RequestParameter[] refValues = request.getRequestParameters(refName);
if (refValues != null) {
prop.setValues(refValues);
}
}
continue;
}
// causes the JCR Text property to be deleted before update
if (propPath.endsWith(SlingPostConstants.SUFFIX_DELETE)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.SUFFIX_DELETE);
prop.setDelete(true);
continue;
}
// property to Text.
if (propPath.endsWith(SlingPostConstants.SUFFIX_MOVE_FROM)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.SUFFIX_MOVE_FROM);
// @MoveFrom params must have exactly one value, else ignored
if (e.getValue().length == 1) {
final String sourcePath = e.getValue()[0].getString();
prop.setRepositorySource(sourcePath, true);
}
continue;
}
// property to Text.
if (propPath.endsWith(SlingPostConstants.SUFFIX_COPY_FROM)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.SUFFIX_COPY_FROM);
// @MoveFrom params must have exactly one value, else ignored
if (e.getValue().length == 1) {
final String sourcePath = e.getValue()[0].getString();
prop.setRepositorySource(sourcePath, false);
}
continue;
}
// property to Text.
if (propPath.endsWith(SlingPostConstants.SUFFIX_IGNORE_BLANKS)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.SUFFIX_IGNORE_BLANKS);
if (e.getValue().length == 1) {
prop.setIgnoreBlanks(true);
}
continue;
}
if (propPath.endsWith(SlingPostConstants.SUFFIX_USE_DEFAULT_WHEN_MISSING)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.SUFFIX_USE_DEFAULT_WHEN_MISSING);
if (e.getValue().length == 1) {
prop.setUseDefaultWhenMissing(true);
}
continue;
}
// <input name="tags" value="-orange" type="hidden" />
if (propPath.endsWith(SlingPostConstants.SUFFIX_PATCH)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.SUFFIX_PATCH);
prop.setPatch(true);
continue;
}
if (propPath.endsWith(SlingPostConstants.SUFFIX_OFFSET)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.SUFFIX_OFFSET);
if (e.getValue().length == 1) {
Chunk chunk = prop.getChunk();
if (chunk == null) {
chunk = new Chunk();
}
chunk.setOffsetValue(Long.parseLong(e.getValue()[0].toString()));
prop.setChunk(chunk);
}
continue;
}
if (propPath.endsWith(SlingPostConstants.SUFFIX_COMPLETED)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.SUFFIX_COMPLETED);
if (e.getValue().length == 1) {
Chunk chunk = prop.getChunk();
if (chunk == null) {
chunk = new Chunk();
}
chunk.setCompleted(Boolean.parseBoolean((e.getValue()[0].toString())));
prop.setChunk(chunk);
}
continue;
}
if (propPath.endsWith(SlingPostConstants.SUFFIX_LENGTH)) {
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, SlingPostConstants.SUFFIX_LENGTH);
if (e.getValue().length == 1) {
Chunk chunk = prop.getChunk();
if (chunk == null) {
chunk = new Chunk();
}
chunk.setLength(Long.parseLong(e.getValue()[0].toString()));
prop.setChunk(chunk);
}
continue;
}
// plain property, create from values
final RequestProperty prop = getOrCreateRequestProperty(reqProperties, propPath, null);
prop.setValues(e.getValue());
}
return reqProperties;
}
Aggregations