/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.client.async; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import freenet.support.LogThresholdCallback; import freenet.support.Logger; import freenet.support.Logger.LogLevel; import freenet.support.api.Bucket; import freenet.support.io.Closer; import freenet.support.io.FileUtil; /**Writes a <code>Bucket</code> to an output stream.*/ public class SingleFileStreamGenerator implements StreamGenerator { final private Bucket bucket; final private boolean persistent; private static volatile boolean logMINOR; static { Logger.registerLogThresholdCallback(new LogThresholdCallback(){ @Override public void shouldUpdate(){ logMINOR = Logger.shouldLog(LogLevel.MINOR, this); } }); } SingleFileStreamGenerator(Bucket bucket, boolean persistent) { this.bucket = bucket; this.persistent = persistent; } @Override public void writeTo(OutputStream os, ClientContext context) throws IOException { try{ if(logMINOR) Logger.minor(this, "Generating Stream", new Exception("debug")); InputStream data = bucket.getInputStream(); try { FileUtil.copy(data, os, -1); } finally { data.close(); } os.close(); bucket.free(); if(logMINOR) Logger.minor(this, "Stream completely generated", new Exception("debug")); } finally { Closer.close(bucket); Closer.close(os); } } @Override public long size() { return bucket.size(); } }