/* 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;
import java.io.IOException;
import freenet.support.api.Bucket;
import freenet.support.io.BucketTools;
/**
* Class to contain the result of a key fetch.
*/
public class FetchResult {
/** The ClientMetadata, i.e. MIME type. Must not be null. */
final ClientMetadata metadata;
/** The data. */
final Bucket data;
public FetchResult(ClientMetadata dm, Bucket fetched) {
if(dm == null) throw new IllegalArgumentException();
assert(fetched != null);
metadata = dm;
data = fetched;
}
/**
* Create a FetchResult with a new Bucket of data, but everything else
* the same as the old one.
*/
public FetchResult(FetchResult fr, Bucket output) {
this.data = output;
this.metadata = fr.metadata;
}
/** Get the MIME type of the fetched data.
* If unknown, returns application/octet-stream. */
public String getMimeType() {
return metadata.getMIMEType();
}
/** Get the client-level metadata. */
public ClientMetadata getMetadata() {
return metadata;
}
/** @return The size of the data fetched, in bytes. */
public long size() {
return data.size();
}
/** Get the result as a simple byte array, even if we don't have it
* as one. @throws OutOfMemoryError !!
* @throws IOException If it was not possible to read the data.
*/
public byte[] asByteArray() throws IOException {
return BucketTools.toByteArray(data);
}
/**
* Get the result as a Bucket.
*
* You have to call Closer.close(bucket) to free() the obtained Bucket to prevent resource leakage!
*/
public Bucket asBucket() {
return data;
}
}