It works, awesome!

On Mon, Dec 28, 2009 at 10:00 AM, Maurizio Pillitu <
[email protected]> wrote:

> Done! Thanks a lot Jasha!
>
> FYI, the WebdavUploader you posted me does not trigger an UploadException,
> therefore the code compiles now; will test it and give you some feedback
> ASAP.
>
> Thx again!
>
> mau
>
>
> On Mon, Dec 28, 2009 at 9:47 AM, Jasha Joachimsthal <
> [email protected]> wrote:
>
>> The only occurence of UploadException is in the Cocoon version of the
>> project you're working on AFAICS.
>>
>> I did find WebdavUploader.java:
>> package nl.hippo.client.api.upload;
>>
>> import java.io.InputStream;
>>
>> import nl.hippo.client.api.ClientException;
>> import nl.hippo.client.api.upload.WebdavUploadable;
>> import nl.hippo.client.api.upload.UploadContext;
>> import nl.hippo.client.api.content.DocumentPath;
>> import nl.hippo.client.api.service.WebdavService;
>> import nl.hippo.client.api.content.Property;
>>
>> public class WebdavUploader {
>>
>>        private WebdavService service;
>>        private UploadContext context;
>>
>>        public WebdavUploader(UploadContext context) {
>>                service = context.getWebdavService();
>>                this.context = context;
>>        }
>>
>>        /**
>>         * Upload a file to the repository
>>         *
>>         * @param path contains the DocumentPath to the target folder
>>         */
>>        public synchronized boolean upload(WebdavUploadable document) {
>>                int repositoryResponseCode = 0;
>>                DocumentPath targetPath = context.getDocumentTarget();
>>                try {
>>                        context.createPath();
>>
>>                        InputStream stream = document.getInputStream();
>>                        repositoryResponseCode =
>> service.executePut(targetPath, stream);
>>
>>                        if (repositoryResponseCode >= 400) {
>>                                throw new ClientException("Unable to create
>> document");
>>                        }
>>
>>                        // Set the document type so the CMS knows how to
>> handle this document
>>                        Property[] propertiesToRemove = new Property[0];
>>                        Property[] propertiesToSet = {
>> document.getDocumentType() };
>>                        repositoryResponseCode =
>> service.executePropPatch(targetPath,
>> propertiesToRemove, propertiesToSet);
>>                        return true;
>>
>>                } catch (ClientException e) {
>>                        e.printStackTrace();
>>                        return false;
>>                }
>>        }
>> }
>>
>>
>>
>>
>>
>> 2009/12/28 Maurizio Pillitu <[email protected]>:
>> > Nope, because the two classes you posted me are used by a WebdavUploader
>> > class which is missing (and the exception that is generated,
>> > UploadException); could you find any reference to these classes
>> somewhere?
>> > If not, which are the project references to the UploadContext object?
>> >
>> > Thx
>> >  mau
>> >
>> > On Mon, Dec 28, 2009 at 8:57 AM, Jasha Joachimsthal <
>> > [email protected]> wrote:
>> >
>> >> Hi Maoo,
>> >>
>> >> 2009/12/22 Maurizio Pillitu <[email protected]>:
>> >> > Hi Jasha,
>> >> > I'm still missing the WebdavUploader and the UploadException classes
>> >> which
>> >> > are mentioned in the following snippet from the sample
>> >> >
>> >> > try {
>> >> > new WebdavUploader(context).upload(comment);
>> >> > dispatch = request.getRequestDispatcher("succes.jsp");
>> >> > } catch(UploadException e) {
>> >> > dispatch = request.getRequestDispatcher("failure.jsp");
>> >> > }
>> >> >
>> >> > Couldn't find them on SVN; could you point me to the right tag where
>> I
>> >> can
>> >> > find these classes?
>> >>
>> >> I guess they've never been in the public SVN. The snippets I posted
>> >> were taken from a customer project. Do they work for you?
>> >>
>> >> Jasha
>> >>
>> >> >
>> >> > Thanks!
>> >> >
>> >> >  mau
>> >> >
>> >> > On Mon, Dec 14, 2009 at 4:01 PM, Jasha Joachimsthal <
>> >> > [email protected]> wrote:
>> >> >
>> >> >> 2009/12/14 Maurizio Pillitu <[email protected]>
>> >> >>
>> >> >> > Thanks Jasha!
>> >> >> >
>> >> >> > Shall I copy/paste your code in my project and try it out?
>> >> >> >
>> >> >>
>> >> >> Yes please
>> >> >>
>> >> >>
>> >> >> Jasha Joachimsthal
>> >> >>
>> >> >> [email protected] - [email protected]
>> >> >>
>> >> >> www.onehippo.com
>> >> >> Amsterdam - Hippo B.V. Oosteinde 11 1017 WT Amsterdam
>> +31(0)20-5224466
>> >> >> San Francisco - Hippo USA Inc. 185 H Street, suite B, Petaluma CA
>> 94952
>> >> +1
>> >> >> (707) 7734646
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >> >
>> >> >> > On Mon, Dec 14, 2009 at 3:49 PM, Jasha Joachimsthal <
>> >> >> > [email protected]> wrote:
>> >> >> >
>> >> >> > > 2009/12/14 Maurizio Pillitu <[email protected]>
>> >> >> > >
>> >> >> > > > Hi everyone,
>> >> >> > > > I was following the HST1 tutorial on how to upload content
>> >> >> > > >
>> >> >> > > >
>> >> >> > > >
>> >> >> > >
>> >> >> >
>> >> >>
>> >>
>> http://hst.hippocms.org/technical-documentation/building-a-JSP-front-end/examples/user-generated/comments.html
>> >> >> > > >
>> >> >> > > > It seems fairly easy, but I'm missing the mentioned classes:
>> >> >> > > >
>> >> >> > > > import nl.hippo.client.api.upload.WebdavUploadable;
>> >> >> > > >
>> >> >> > > > import nl.hippo.client.api.upload.UploadContext;
>> >> >> > > >
>> >> >> > > >
>> >> >> > > Hmm I guess we've documented this feature before even adding it
>> to
>> >> the
>> >> >> > HST
>> >> >> > > ;-)
>> >> >> > > I found some matching classes in a project:
>> >> >> > >
>> >> >> > > WebdavUploadable:
>> >> >> > > package nl.hippo.client.api.upload;
>> >> >> > >
>> >> >> > > import java.io.InputStream;
>> >> >> > > import nl.hippo.client.api.content.Property;
>> >> >> > >
>> >> >> > > public interface WebdavUploadable {
>> >> >> > >  /**
>> >> >> > >  * getInputStream() specifies how this WebdavUploadable
>> generates an
>> >> >> > >  * InputStream. This is needed by the WebdavUploader to
>> >> >> > >  * put objects in the repository.
>> >> >> > >  *
>> >> >> > >  * @return a new InputStream
>> >> >> > >  */
>> >> >> > >  public InputStream getInputStream();
>> >> >> > >  /**
>> >> >> > >  * A WebdavUploadable document must be able to return it's
>> document
>> >> >> > >  * type. This is needed in the uploading process for the CMS to
>> >> >> > >  * recognize it as a valid document.
>> >> >> > >  *
>> >> >> > >  * @return a document type
>> >> >> > >  */
>> >> >> > > public Property getDocumentType();
>> >> >> > > }
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > > UploadContext
>> >> >> > > package nl.hippo.client.api.upload;
>> >> >> > >
>> >> >> > > import javax.servlet.http.HttpServletResponse;
>> >> >> > >
>> >> >> > > import org.apache.commons.logging.Log;
>> >> >> > > import org.apache.commons.logging.LogFactory;
>> >> >> > >
>> >> >> > > import nl.hippo.client.api.ClientException;
>> >> >> > > import nl.hippo.client.api.content.DocumentPath;
>> >> >> > > import nl.hippo.client.api.service.WebdavService;
>> >> >> > > import nl.hippo.client.webdav.WebdavConfig;
>> >> >> > > import nl.hippo.client.webdav.service.WebdavServiceImpl;
>> >> >> > >
>> >> >> > > public abstract class UploadContext {
>> >> >> > >    private final static Log log =
>> >> >> LogFactory.getLog(UploadContext.class);
>> >> >> > >
>> >> >> > >    private WebdavService service;
>> >> >> > >    private DocumentPath rootFolder;
>> >> >> > >    private DocumentPath documentFolder;
>> >> >> > >    private DocumentPath documentTarget;
>> >> >> > >    private String[] folders;
>> >> >> > >
>> >> >> > >    public UploadContext() {
>> >> >> > >
>> >> >> > >    }
>> >> >> > >
>> >> >> > >    /**
>> >> >> > >     * This constructor creates an UploadContext object with a
>> >> >> > configuration
>> >> >> > >     * specified in the WebdavConfig object
>> >> >> > >     *
>> >> >> > >     * @param config contains the repository configuration
>> >> >> > >     */
>> >> >> > >    public UploadContext(WebdavConfig config, String folder,
>> String
>> >> >> > > documentName) {
>> >> >> > >        service = getWebdavService(config);
>> >> >> > >        rootFolder = service.getBasePath();
>> >> >> > >        documentFolder =
>> >> >> service.getBasePath().createRelativePath(folder);
>> >> >> > >        documentTarget =
>> >> service.getBasePath().createRelativePath(folder
>> >> >> +
>> >> >> > > documentName);
>> >> >> > >        folders = folder.split("/");
>> >> >> > >    }
>> >> >> > >
>> >> >> > >    /**
>> >> >> > >     * This constructor creates an UploadContext object with a
>> >> >> > >     * given webdav service
>> >> >> > >     *
>> >> >> > >     * @param webdav service to use for uploading
>> >> >> > >     */
>> >> >> > >    public UploadContext(WebdavService webdavService, String
>> folder,
>> >> >> > String
>> >> >> > > documentName) {
>> >> >> > >        service = webdavService;
>> >> >> > >        rootFolder = service.getBasePath();
>> >> >> > >        documentFolder =
>> >> >> service.getBasePath().createRelativePath(folder);
>> >> >> > >        documentTarget =
>> >> service.getBasePath().createRelativePath(folder
>> >> >> +
>> >> >> > > documentName);
>> >> >> > >        folders = folder.split("/");
>> >> >> > >    }
>> >> >> > >
>> >> >> > >    public DocumentPath getRootFolder() {
>> >> >> > >        return rootFolder;
>> >> >> > >    }
>> >> >> > >
>> >> >> > >    public DocumentPath getDocumentFolder() {
>> >> >> > >        return documentFolder;
>> >> >> > >    }
>> >> >> > >
>> >> >> > >    public DocumentPath getDocumentTarget() {
>> >> >> > >        return documentTarget;
>> >> >> > >    }
>> >> >> > >
>> >> >> > >    public WebdavService getWebdavService(WebdavConfig config) {
>> >> >> > >        return new WebdavServiceImpl(config);
>> >> >> > >    }
>> >> >> > >
>> >> >> > >    public WebdavService getWebdavService() {
>> >> >> > >        return service;
>> >> >> > >    }
>> >> >> > >
>> >> >> > >    public void createFolder(DocumentPath path) throws
>> >> ClientException {
>> >> >> > >        service.executeMkCol(path);
>> >> >> > >    }
>> >> >> > >
>> >> >> > >    public void createPath() throws ClientException {
>> >> >> > >        String path = "";
>> >> >> > >        int i = 0;
>> >> >> > >        int index = 0;
>> >> >> > >        int repositoryResponseCode = 0;
>> >> >> > >
>> >> >> > >        while (i < folders.length) {
>> >> >> > >
>> >> >> > >            while (index < i) {
>> >> >> > >                // Get the folders that come before this one
>> >> >> > >                path += folders[index] + "/";
>> >> >> > >                index++;
>> >> >> > >            }
>> >> >> > >            // Reset index
>> >> >> > >            index = 0;
>> >> >> > >
>> >> >> > >            path += folders[i];
>> >> >> > >            DocumentPath newPath =
>> >> rootFolder.createRelativePath(path);
>> >> >> > >            int headResponse = 0;
>> >> >> > >            try {
>> >> >> > >                headResponse = service.executeHead(newPath);
>> >> >> > >            } catch(Exception e) {
>> >> >> > >                log.warn("Head: " + e.getLocalizedMessage());
>> >> >> > >            }
>> >> >> > >            if( headResponse == HttpServletResponse.SC_NOT_FOUND
>> ||
>> >> >> > > headResponse == 0 ) {
>> >> >> > >                repositoryResponseCode =
>> >> service.executeMkCol(newPath);
>> >> >> > >            } else {
>> >> >> > >                log.info("Path " + path + " not created.");
>> >> >> > >            }
>> >> >> > >
>> >> >> > >            if (repositoryResponseCode >= 400) {
>> >> >> > >                throw new ClientException("Couldn't create folder
>> >> >> > structure
>> >> >> > > '" + path + "'");
>> >> >> > >            }
>> >> >> > >            // Reset path
>> >> >> > >            path = "";
>> >> >> > >            i++;
>> >> >> > >        }
>> >> >> > >    }
>> >> >> > >
>> >> >> > >    /**
>> >> >> > >     * This method creates a folder structure for a specific
>> >> >> > >     * application. Different implementations of the class may
>> >> >> > >     * use different folder structures.
>> >> >> > >     *
>> >> >> > >     * @param documentName is a documentName that the
>> UploadContext
>> >> >> > >     * has to create a folder structure for.
>> >> >> > >     *
>> >> >> > >     * @return a String representing a folder structure.
>> >> >> > >     */
>> >> >> > >    public abstract String createFolderStructure(String
>> >> documentName);
>> >> >> > > }
>> >> >> > > ********************************************
>> >> >> > > Hippocms-dev: Hippo CMS development public mailinglist
>> >> >> > >
>> >> >> > > Searchable archives can be found at:
>> >> >> > > MarkMail: http://hippocms-dev.markmail.org
>> >> >> > > Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
>> >> >> > >
>> >> >> > >
>> >> >> >
>> >> >> >
>> >> >> > --
>> >> >> >
>> >> >> > Met vriendelijke groet,
>> >> >> > --
>> >> >> > Maurizio Pillitu - 0031 (0)615655668
>> >> >> > Opensource Software Engineer
>> >> >> > Scrum Certified Master - http://www.scrumalliance.org
>> >> >> > Sourcesense - making sense of Open Source:
>> http://www.sourcesense.com
>> >> >> > ********************************************
>> >> >> > Hippocms-dev: Hippo CMS development public mailinglist
>> >> >> >
>> >> >> > Searchable archives can be found at:
>> >> >> > MarkMail: http://hippocms-dev.markmail.org
>> >> >> > Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
>> >> >> >
>> >> >> >
>> >> >> ********************************************
>> >> >> Hippocms-dev: Hippo CMS development public mailinglist
>> >> >>
>> >> >> Searchable archives can be found at:
>> >> >> MarkMail: http://hippocms-dev.markmail.org
>> >> >> Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >> > --
>> >> >
>> >> > Met vriendelijke groet,
>> >> > --
>> >> > Maurizio Pillitu - 0031 (0)615655668
>> >> > Opensource Software Engineer
>> >> > Scrum Certified Master - http://www.scrumalliance.org
>> >> > Sourcesense - making sense of Open Source:
>> http://www.sourcesense.com
>> >> > ********************************************
>> >> > Hippocms-dev: Hippo CMS development public mailinglist
>> >> >
>> >> > Searchable archives can be found at:
>> >> > MarkMail: http://hippocms-dev.markmail.org
>> >> > Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
>> >> >
>> >> >
>> >> ********************************************
>> >> Hippocms-dev: Hippo CMS development public mailinglist
>> >>
>> >> Searchable archives can be found at:
>> >> MarkMail: http://hippocms-dev.markmail.org
>> >> Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
>> >>
>> >>
>> >
>> >
>> > --
>> >
>> > Met vriendelijke groet,
>> > --
>> > Maurizio Pillitu - 0031 (0)615655668
>> > Opensource Software Engineer
>> > Scrum Certified Master - http://www.scrumalliance.org
>> > Sourcesense - making sense of Open Source: http://www.sourcesense.com
>> > ********************************************
>> > Hippocms-dev: Hippo CMS development public mailinglist
>> >
>> > Searchable archives can be found at:
>> > MarkMail: http://hippocms-dev.markmail.org
>> > Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
>> >
>> >
>> ********************************************
>> Hippocms-dev: Hippo CMS development public mailinglist
>>
>> Searchable archives can be found at:
>> MarkMail: http://hippocms-dev.markmail.org
>> Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
>>
>>
>
>
> --
>
> Met vriendelijke groet,
> --
> Maurizio Pillitu - 0031 (0)615655668
> Opensource Software Engineer
> Scrum Certified Master - http://www.scrumalliance.org
> Sourcesense - making sense of Open Source: http://www.sourcesense.com
>



-- 

Met vriendelijke groet,
-- 
Maurizio Pillitu - 0031 (0)615655668
Opensource Software Engineer
Scrum Certified Master - http://www.scrumalliance.org
Sourcesense - making sense of Open Source: http://www.sourcesense.com
********************************************
Hippocms-dev: Hippo CMS development public mailinglist

Searchable archives can be found at:
MarkMail: http://hippocms-dev.markmail.org
Nabble: http://www.nabble.com/Hippo-CMS-f26633.html

Reply via email to