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.

Reply via email to