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