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

Reply via email to