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
