blob: d1d71d88a452381f30cc690ad35ed5bae17cbac5 [file] [log] [blame]
/************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
*
* Use is subject to license terms.
*
* 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. You can also
* obtain a copy of the License at http://odftoolkit.org/docs/license.txt
*
* 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.
*
************************************************************************/
/* This file is derived from ODFDOM 0.8.6, and
* has been modified for Apache Taverna.
* (c) 2010-2014 University of Manchester
* (c) 2015 The Apache Software Foundation
*/
package org.apache.taverna.scufl2.ucfpackage.impl.odfdom.pkg;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.xml.transform.stream.StreamSource;
import org.apache.taverna.scufl2.ucfpackage.impl.odfdom.pkg.manifest.OdfFileEntry;
/**
* OdfPackageStream is a representation of a stream that is part of an ODF file.
* If a stream is written to through the output stream, this will be reflected
* when the output stream is closed
*/
class OdfPackageStream extends StreamSource {
private OdfPackage pkg;
private String name;
private InputStream inputStream;
private OutputStream outputStream = null;
private boolean bClosed;
public OdfPackageStream(OdfPackage pkg, String name) throws Exception {
super(pkg.getInputStream(name), pkg.getBaseURI() + "/" + name);
this.pkg = pkg;
this.name = name;
}
public boolean isOutput() {
// denote that the output stream has been requested
return outputStream != null;
}
public OutputStream getOutputStream() throws Exception {
if (bClosed)
throw new IOException("stream already closed");
outputStream = pkg.insertOutputStream(name);
return outputStream;
}
public OdfFileEntry geFileEntry() {
return pkg.getFileEntry(name);
}
public String getName() {
return name;
}
public OdfPackage getPackage() {
return pkg;
}
void close() throws IOException {
bClosed = true;
inputStream.close();
outputStream.close();
}
}