/* * ModeShape (http://www.modeshape.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.modeshape.web.jcr.webdav; import java.io.IOException; import java.io.InputStream; import java.util.Date; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.servlet.ServletContext; /** * Interface that supports mapping incoming WebDAV requests to create, modify, and access JCR content to node hierarchies and * properties on these nodes. * * @see DefaultContentMapper */ public interface ContentMapper { /** * Initialize the content mapper based on the provided context * * @param context the servlet context for this servlet */ void initialize( ServletContext context ); /** * @param node the node to check; may not be null * @return true if {@code node} should be treated as a WebDAV folder * @throws RepositoryException if the node cannot be accessed */ boolean isFolder( Node node ) throws RepositoryException; /** * @param node the node to check; may not be null * @return true if {@code node} should be treated as a WebDAV file * @throws RepositoryException if the node cannot be accessed */ boolean isFile( Node node ) throws RepositoryException; /** * @param node the node to check; may not be null * @return the contents for the node; null if the node maps to a WebDAV folder * @throws RepositoryException if the node cannot be accessed * @throws IOException if the content of the node cannot be accessed */ InputStream getResourceContent( Node node ) throws RepositoryException, IOException; /** * @param node the node to check; may not be null * @return the length of the file content for the node; -1 if the node maps to a WebDAV folder * @throws RepositoryException if the node cannot be accessed * @throws IOException if the content of the node cannot be accessed */ long getResourceLength( Node node ) throws RepositoryException, IOException; /** * @param node the node to check; may not be null * @return the date at which the file was last modified; null if node is a folder * @throws RepositoryException if the node cannot be accessed * @throws IOException if the content of the node cannot be accessed */ Date getLastModified( Node node ) throws RepositoryException, IOException; /** * @param parentNode the parent node of the new folder; may not be null * @param folderName the name of the folder that is to be created; may not be null * @throws RepositoryException if the node cannot be created */ void createFolder( Node parentNode, String folderName ) throws RepositoryException; /** * @param parentNode the parent node of the new file; may not be null * @param fileName the name of the file that is to be created; may not be null * @throws RepositoryException if the node cannot be created */ void createFile( Node parentNode, String fileName ) throws RepositoryException; /** * Creates or modifies the content of a WebDAV file. Implementations may choose whether to store this content directly on the * file node or in some other location (e.g., the jcr:content child of the nt:file node that corresponds to the WebDAV file). * * @param parentNode node corresponding to the parent folder of the file; may not be null * @param resourceName the name of the file to which this content belongs; may not be null * @param newContent the content to store; may not be null * @param contentType the MIME type of the content; may not be null * @param characterEncoding the character encoding of the content; may not be null * @return the length of the newly-created content * @throws RepositoryException if the node cannot be created or updated * @throws IOException if the content of the node cannot be modified or created */ long setContent( Node parentNode, String resourceName, InputStream newContent, String contentType, String characterEncoding ) throws RepositoryException, IOException; }