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
********************************************
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