/**
* Copyright (C) 2010 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.processor.serializer.store;
import org.orbeon.oxf.common.OXFException;
import org.orbeon.oxf.pipeline.api.PipelineContext;
import org.orbeon.oxf.externalcontext.ExternalContext;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
/**
* Result store for binary data (e.g. PDF document)
*/
public class ResultStoreOutputStream extends ByteArrayOutputStream implements ResultStore {
OutputStream out;
public ResultStoreOutputStream(OutputStream out) {
this.out = out;
}
public synchronized void write(int b) {
try {
out.write(b);
super.write(b);
} catch (IOException e) {
throw new OXFException(e);
}
}
public synchronized void write(byte b[], int off, int len) {
try {
out.write(b, off, len);
super.write(b, off, len);
} catch (IOException e) {
throw new OXFException(e);
}
}
public void close() throws IOException {
if (out != null)
out.close();
out = null;
}
public void replay(PipelineContext context) {
ExternalContext externalContext = (ExternalContext) context.getAttribute(PipelineContext.EXTERNAL_CONTEXT);
replay(externalContext.getResponse().getOutputStream());
}
public void replay(Writer writer) {
throw new UnsupportedOperationException();
}
public void replay(OutputStream os) {
try {
writeTo(os);
} catch (IOException e) {
throw new OXFException(e);
}
}
public int length(PipelineContext context) {
return size();
}
}