/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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.
*
* Copyright (c) 2006 - 2013 Pentaho Corporation and Contributors. All rights reserved.
*/
package org.pentaho.reporting.libraries.repository.stream;
import org.pentaho.reporting.libraries.repository.ContentLocation;
import org.pentaho.reporting.libraries.repository.DefaultMimeRegistry;
import org.pentaho.reporting.libraries.repository.MimeRegistry;
import org.pentaho.reporting.libraries.repository.Repository;
import java.io.InputStream;
import java.io.OutputStream;
/**
* A repository that feeds a single source.
*
* @author Thomas Morgner
*/
public class StreamRepository implements Repository {
private MimeRegistry mimeRegistry;
private WrappedOutputStream outputStream;
private WrappedInputStream inputStream;
private StreamContentLocation rootLocation;
private String contentName;
/**
* Creates a new repository that potentially allows both read and write access. If an input stream is given, then a
* content name must be given as well.
*
* @param inputStream the inputstream from which to read from.
* @param outputStream the output stream to which to write to.
* @param contentName the content name by which the content should be accessed.
*/
public StreamRepository( final InputStream inputStream,
final OutputStream outputStream,
final String contentName ) {
if ( contentName == null ) {
throw new NullPointerException();
}
if ( inputStream != null ) {
this.inputStream = new WrappedInputStream( inputStream );
}
if ( outputStream != null ) {
this.outputStream = new WrappedOutputStream( outputStream );
}
this.contentName = contentName;
this.mimeRegistry = new DefaultMimeRegistry();
this.rootLocation = new StreamContentLocation( this );
}
/**
* Creates a new read/write repository with a hardcoded name for the input stream.
*
* @param inputStream the input stream from where to read the data (can be null).
* @param outputStream the output stream where data is written to (can be null).
* @deprecated This constructor should not be used, as it hardcodes the filename for the input stream. Use one of the
* other constructors instead.
*/
public StreamRepository( final InputStream inputStream, final OutputStream outputStream ) {
this( inputStream, outputStream, "content.data" );
}
/**
* Creates a new read-only repository.
*
* @param inputStream the input stream from where to read the data (can be null).
* @param contentName the content name by which the content should be accessed.
*/
public StreamRepository( final InputStream inputStream, final String contentName ) {
this( inputStream, null, contentName );
}
/**
* Creates a new write-only repository.
*
* @param outputStream the output stream to which to write to.
*/
public StreamRepository( final OutputStream outputStream ) {
this( null, outputStream, "content.data" );
}
/**
* Returns the optional content name by which the data in the input-stream should be accessed.
*
* @return the content name or null, if this repository is write-only.
*/
public String getContentName() {
return contentName;
}
/**
* Returns the optional output stream.
*
* @return the stream or null, if this repository is read-only.
*/
public WrappedOutputStream getOutputStream() {
return outputStream;
}
/**
* Returns the optional input stream.
*
* @return the stream or null, if this repository is write-only.
*/
public WrappedInputStream getInputStream() {
return inputStream;
}
/**
* Returns the content root of this repository.
*
* @return the content root.
*/
public ContentLocation getRoot() {
return rootLocation;
}
/**
* Returns the mime registry for this repository.
*
* @return the mime-registry.
*/
public MimeRegistry getMimeRegistry() {
return mimeRegistry;
}
}