package net.tomp2p.dht;
import net.tomp2p.p2p.Peer;
public class PeerBuilderDHT {
final private Peer peer;
private StorageRPC storageRPC;
private DistributedHashTable dht;
private StorageLayer storageLayer;
private Storage storage;
public PeerBuilderDHT(Peer peer) {
this.peer = peer;
}
public Peer peer() {
return peer;
}
public StorageRPC storeRPC() {
return storageRPC;
}
public PeerBuilderDHT storeRPC(StorageRPC storeRPC) {
this.storageRPC = storeRPC;
return this;
}
public DistributedHashTable distributedHashTable() {
return dht;
}
public PeerBuilderDHT distributedHashTable(DistributedHashTable dht) {
this.dht = dht;
return this;
}
public StorageLayer storageLayer() {
return storageLayer;
}
public PeerBuilderDHT storageLayer(StorageLayer storageLayer) {
this.storageLayer = storageLayer;
return this;
}
public Storage storage() {
return storage;
}
public PeerBuilderDHT storage(Storage storage) {
this.storage = storage;
return this;
}
public PeerDHT start() {
if (storage == null) {
storage = new StorageMemory();
}
if (storageLayer == null) {
storageLayer = new StorageLayer(storage);
storageLayer.start(peer.connectionBean().timer(), storageLayer.storageCheckIntervalMillis());
}
if (peer.peerBean().digestStorage() == null) {
peer.peerBean().digestStorage(storageLayer);
}
if (storageRPC == null) {
storageRPC = new StorageRPC(peer.peerBean(), peer.connectionBean(), storageLayer);
}
if (dht == null) {
dht = new DistributedHashTable(peer.distributedRouting(), storageRPC, peer.directDataRPC());
}
return new PeerDHT(peer, storageLayer, dht, storageRPC);
}
}