001: /*
002: * Copyright 2004 Outerthought bvba and Schaubroeck nv
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.outerj.daisy.books.store;
017:
018: import org.outerx.daisy.x10Bookstoremeta.ResourcePropertiesDocument;
019:
020: import java.io.InputStream;
021: import java.io.OutputStream;
022: import java.io.IOException;
023: import java.net.URI;
024:
025: public interface BookInstance {
026: String getName();
027:
028: /**
029: * Returns a stream for the given resource. The stream will already be buffered if needed.
030: *
031: * <p>Throws a {@link BookResourceNotFoundException} if the path does not exist.
032: *
033: * <p><b style="color: red">It is the callers' responsibility to close this stream!</b>
034: */
035: InputStream getResource(String path);
036:
037: /**
038: * Returns null if not available.
039: */
040: ResourcePropertiesDocument getResourceProperties(String path);
041:
042: /**
043: * Stores a resource under the given path.
044: *
045: * <p>The implementation of this method is required to close the input stream, even
046: * if an exception occurs.
047: */
048: void storeResource(String path, InputStream is);
049:
050: void storeResourceProperties(String path,
051: ResourcePropertiesDocument resourcePropertiesDocument);
052:
053: /**
054: * Get an output stream to store a resource in the book instance.
055: *
056: * <p> This will return a buffered stream if necessary, no need to wrap it into a BufferedOutputStream
057: * yourself.
058: *
059: * <p><b style="color: red">It is the callers' responsibility to close this stream!</b>
060: */
061: OutputStream getResourceOutputStream(String path)
062: throws IOException;
063:
064: boolean rename(String path, String newName);
065:
066: boolean exists(String path);
067:
068: long getLastModified(String path);
069:
070: long getContentLength(String path);
071:
072: void lock();
073:
074: void unlock();
075:
076: BookAcl getAcl();
077:
078: void setAcl(BookAcl bookAcl);
079:
080: /**
081: * Returns true if the user can perform management operations on this book instance.
082: */
083: boolean canManage();
084:
085: PublicationsInfo getPublicationsInfo();
086:
087: void addPublication(PublicationInfo publicationInfo);
088:
089: void setPublications(PublicationsInfo publicationsInfo);
090:
091: /**
092: * Returns a Java URI that can be used to retrieve the resource. Bypasses the BookInstance abstraction.
093: */
094: URI getResourceURI(String path);
095:
096: /**
097: * Note: while this returns a mutable object, it is a clone of the original
098: * and any changed performed on it will not have effect.
099: */
100: BookInstanceMetaData getMetaData();
101:
102: void setMetaData(BookInstanceMetaData metaData);
103:
104: String[] getDescendantPaths(String path);
105: }
|