001: /*
002: * Copyright 2004-2007 the original author or authors.
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: */
017:
018: package org.jpublish.repository;
019:
020: import java.io.InputStream;
021: import java.io.OutputStream;
022: import java.util.Iterator;
023:
024: import org.jpublish.SiteContext;
025: import org.jpublish.Repository;
026:
027: /** The AbstractRepository base class can be used as a superclass for
028: repository implementations. It provides convenience methods which
029: are standard for all repositories.
030:
031: @author Anthony Eden
032: */
033:
034: public abstract class AbstractRepository implements Repository {
035:
036: protected String name;
037: protected String root;
038: protected SiteContext siteContext;
039:
040: /** Get the name of the repository. This name is used to expose the
041: Repository in the view renderer.
042:
043: @return The Repository name
044: */
045:
046: public String getName() {
047: return name;
048: }
049:
050: /** Get the root for locating content. This method may return null if the
051: repository implementation does not require or understand the root field.
052:
053: @return The root
054: */
055:
056: public String getRoot() {
057: return root;
058: }
059:
060: /** Set the root for locating content.
061:
062: @param root The new root
063: */
064:
065: public void setRoot(String root) {
066: this .root = root;
067: }
068:
069: /** Set the repository's reference to the current SiteContext.
070:
071: @param siteContext The SiteContext
072: */
073:
074: public void setSiteContext(SiteContext siteContext) {
075: this .siteContext = siteContext;
076: }
077:
078: /** Get the given content as an InputStream. The InputStream will
079: return the raw content data. This default implementation throws
080: an UnsupportedOperationException if the method is invoked.
081:
082: @param path The path to the content
083: @return The InputStream
084: @throws Exception
085: */
086:
087: public InputStream getInputStream(String path) throws Exception {
088: throw new UnsupportedOperationException(
089: "Reading from content stream not supported");
090: }
091:
092: /** Get an OutputStream for writing content to the given path.
093: This default implementation throws an UnsupportedOperationException
094: if the method is invoked.
095:
096: @param path The path to the content
097: @return The OutputStream
098: @throws Exception
099: */
100:
101: public OutputStream getOutputStream(String path) throws Exception {
102: throw new UnsupportedOperationException(
103: "Writing to content stream not supported");
104: }
105:
106: /** Get an Iterator of paths which are known to the repository.
107: The default behavior of this implementation is to throw an
108: <code>UnsupportedOperationException</code>.
109:
110: @return An iterator of paths
111: @throws Exception
112: */
113:
114: public Iterator getPaths() throws Exception {
115: throw new UnsupportedOperationException();
116: }
117:
118: /** Get an Iterator of paths which are known to the repository, starting
119: from the specified base path. The default behavior of this
120: implementation is to throw an
121: <code>UnsupportedOperationException</code>.
122:
123: @param base The base path
124: @return An iterator of paths
125: @throws Exception
126: */
127:
128: public Iterator getPaths(String base) throws Exception {
129: throw new UnsupportedOperationException();
130: }
131:
132: /** Get the input encoding for the given path or the default if the path
133: is not found. This method returns the value of
134: CharacterEncodingManager.getPageEncoding(path).
135:
136: @param The path
137: @return The input encoding
138: */
139:
140: protected String getInputEncoding(String path) {
141: return siteContext.getCharacterEncodingManager().getMap(path)
142: .getPageEncoding();
143: }
144:
145: }
|