Extend SlingPostServlet to support references to existing repository content
----------------------------------------------------------------------------
Key: SLING-455
URL: https://issues.apache.org/jira/browse/SLING-455
Project: Sling
Issue Type: New Feature
Components: Post Servlets
Reporter: Felix Meschberger
Assignee: Felix Meschberger
Fix For: 2.0.0
After SLING-422 an interesting (for some applications important) side effect of
the old SlingPostServlet has gone: With the old implementation it was possible
to have files uploaded to the repository in one or more requests and and in a
follow up request create another content and move the previously uploaded file
to the newly created content.
To better illustrate: Assume a CMS where you edit some kind of content. The
content is composed of one or more images to be uploaded as image files and a
title and a body text field. Now the CMS wants to present a user friendly
interface and has implemented some cool file upload dialog, which shows upload
progress.
This feature is now used to pre-upload the image files to a temporary location.
Upon sending the rest of the content - the title and body text - the image
files should of course also be moved from the temporary location to the final
destination in the same place as the title and body text.
With the old SlingPostServlet, the image files could be moved by simply
including :moveSrc/:moveDst parameter pairs for each image file. With the new
SlingPostServlet this is not currently possible.
To make such things possible again, the ModifyOperation of the SlingPostServlet
is to be extend such as to recognize special parameters. Similar to the
solution proposed in SLING-130 (@ValueFrom suffix to refer to values of another
form field), I propose the following parameter name suffixes:
@CopyFrom - Copies the items from the repository locations indicated by the
parameter value
@MoveFrom - Moves the items from the repository locations indicated by the
parameter value
Example use: To move an image file uploaded previously to "/tmp/image000.gif"
to the "image" child node, the HTML form to submit the content (along with
title and text fields) could be defined as:
<form method="POST" action="/some/new/content">
<input type="hidden" name="[EMAIL PROTECTED]" value="/tmp/image000.gif"
/>
<input type="text" name="title" value="..." />
<input type="text" name="text" value="..." />
<submit />
</form>
If the item referred to in a @CopyFrom/@MoveFrom parameter is a node of type
nt:file, treatment is special: If the natural type of the destination item is
nt:file, the addressed node is simply copied or moved. Otherwise the the
jcr:content child node is copied or moved. In case of a move the nt:file node
is of course also removed.
Example use (continued): After processing the request defined by the above
form, the original item /tmp/image000.gif is gone and the contents is now
located in /some/new/content/image.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.