| /************************************************************************ |
| * |
| * 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(); |
| } |
| } |