/* 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.Serializable;
import freenet.keys.FreenetURI;
import freenet.support.api.RandomAccessBucket;
/**
* Class to contain everything needed for an insert.
*
* WARNING: Changing non-transient members on classes that are Serializable can result in
* losing uploads.
*/
public class InsertBlock implements Serializable {
private static final long serialVersionUID = 1L;
private RandomAccessBucket data;
private boolean isFreed;
public FreenetURI desiredURI;
public ClientMetadata clientMetadata;
public InsertBlock(RandomAccessBucket data, ClientMetadata metadata, FreenetURI desiredURI) {
if(data == null) throw new NullPointerException();
this.data = data;
this.isFreed = false;
if(metadata == null)
clientMetadata = new ClientMetadata();
else
clientMetadata = metadata;
this.desiredURI = desiredURI;
}
public RandomAccessBucket getData() {
return (isFreed ? null : data);
}
public void free(){
synchronized (this) {
if(isFreed) return;
isFreed = true;
if(data == null) return;
}
data.free();
}
/** Null out the data so it doesn't get removed in removeFrom().
* Call this when the data becomes somebody else's problem. */
public void nullData() {
data = null;
}
/** Null out the URI so it doesn't get removed in removeFrom().
* Call this when the URI becomes somebody else's problem. */
public void nullURI() {
this.desiredURI = null;
}
public void nullMetadata() {
this.clientMetadata = null;
}
}