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
