/**
* Copyright (C) 2009 Orbeon, Inc.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU Lesser General Public License as published by the Free Software Foundation; either version
* 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The full text of the license is available at http://www.gnu.org/copyleft/lesser.html
*/
package org.orbeon.oxf.resources;
import org.orbeon.oxf.xml.XMLParsing;
import org.orbeon.oxf.xml.XMLReceiver;
import org.w3c.dom.Node;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
/**
* This is the main interface a resource manager must implement.
* A resource manager key is a path-like string, locating a resource.
*
* For example: /config/text.xml
* /pages/icon.gif
*
* Resources Manager could store resource in flat files (see FlatFileResourceManagerImpl), in
* relational databases (see DBResourceManagerImpl) or in an application dependent way.
*
*/
public interface ResourceManager {
/**
* Gets a W3C DOM node for the specified key. The key must point to an XML
* document, or a OXFException is raised.
*
* @param key a Resource Manager key
* @return a node element
*/
Node getContentAsDOM(String key);
/**
* Gets a DOM4J document for the specified key. The key must point to an XML
* document, or a OXFException is raised.
*
* @param key a Resource Manager key
* @return a document element
*/
org.orbeon.dom.Document getContentAsDOM4J(String key);
/**
* Gets a DOM4J document for the specified key. The key must point to an XML
* document, or a OXFException is raised.
*
*
* @param key a Resource Manager key
* @param parserConfiguration parser configuration
* @param handleLexical whether the XML parser must output SAX LexicalHandler events, including comments @return a document element
*/
org.orbeon.dom.Document getContentAsDOM4J(String key, XMLParsing.ParserConfiguration parserConfiguration, boolean handleLexical);
/**
* Gets a document form the resource manager and send SAX events to the specified receiver. the key must point to an
* XML document, or a OXFException is raised.
*
* @param key a Resource Manager key
* @param xmlReceiver receiver where SAX events are sent
*/
void getContentAsSAX(String key, XMLReceiver xmlReceiver);
/**
* Gets a document form the resource manager and send SAX events to the specified receiver. the key must point to an
* XML document, or a OXFException is raised.
*
* @param key a Resource Manager key
* @param xmlReceiver receiver where SAX events are sent
* @param parserConfiguration parser configuration
* @param handleLexical whether the XML parser must output SAX LexicalHandler events, including comments
*/
void getContentAsSAX(String key, XMLReceiver xmlReceiver, XMLParsing.ParserConfiguration parserConfiguration, boolean handleLexical);
/**
* Returns a binary input stream for the specified key. The key could point
* to any document type (text or binary).
* @param key a Resource Manager key
* @return a input stream
*/
InputStream getContentAsStream(String key);
/**
* Gets the last modified timestamp for the specified resource
* @param key a Resource Manager key
* @param doNotThrowResourceNotFound
* @return a timestamp
*/
long lastModified(String key, boolean doNotThrowResourceNotFound);
/**
* Returns the length of the file denoted by this abstract pathname.
* @return The length, in bytes, of the file denoted by this abstract pathname, or 0L if the file does not exist
*/
int length(String key);
/**
* Indicates if the resource manager implementation suports write operations
* @param key a Resource Manager key
* @return true if write operations are allowed
*/
boolean canWrite(String key);
/**
* Returns a receiver that can write to the Resource Manager.
*
* @param key a Resource Manager key
* @return receiver
*/
XMLReceiver getWriteContentHandler(String key);
/**
* Allows writing to the resource
* @param key a Resource Manager key
* @return an output stream
*/
OutputStream getOutputStream(String key);
/**
* Allow writing to the resource
* @param key a Resource Manager key
* @return a writer
*/
Writer getWriter(String key);
/**
* Returns the path to the given resource on the file system. If a path on
* the local file system cannot be provided by the resource manager, null is
* returned.
*/
String getRealPath(String key);
/**
* Check if a resource exists given its key.
*
* @param key a Resource Manager key
* @return true iif the resource exists
*/
boolean exists(String key);
}