Switched back to using the StorageEntry class and StorageEntry Metadata class because of some issues with JSon serialization with polymorphism...

This commit is contained in:
Joshua Kissoon 2014-06-03 10:43:53 +05:30
parent 7a4cc2e91c
commit 8501740bc5
9 changed files with 37 additions and 32 deletions

View File

@ -266,7 +266,7 @@ public class JKademliaNode implements KademliaNode
} }
@Override @Override
public int put(KademliaStorageEntry entry) throws IOException public int put(JKademliaStorageEntry entry) throws IOException
{ {
StoreOperation sop = new StoreOperation(this.server, this, entry, this.dht, this.config); StoreOperation sop = new StoreOperation(this.server, this, entry, this.dht, this.config);
sop.execute(); sop.execute();
@ -282,7 +282,7 @@ public class JKademliaNode implements KademliaNode
} }
@Override @Override
public KademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException, ContentNotFoundException public JKademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException, ContentNotFoundException
{ {
if (this.dht.contains(param)) if (this.dht.contains(param))
{ {

View File

@ -3,6 +3,7 @@ package kademlia;
import java.io.IOException; import java.io.IOException;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import kademlia.dht.GetParameter; import kademlia.dht.GetParameter;
import kademlia.dht.JKademliaStorageEntry;
import kademlia.dht.KadContent; import kademlia.dht.KadContent;
import kademlia.dht.KademliaDHT; import kademlia.dht.KademliaDHT;
import kademlia.dht.KademliaStorageEntry; import kademlia.dht.KademliaStorageEntry;
@ -86,7 +87,7 @@ public interface KademliaNode
* @throws java.io.IOException * @throws java.io.IOException
* *
*/ */
public int put(KademliaStorageEntry entry) throws IOException; public int put(JKademliaStorageEntry entry) throws IOException;
/** /**
* Store a content on the local node's DHT * Store a content on the local node's DHT
@ -107,7 +108,7 @@ public interface KademliaNode
* @throws java.io.IOException * @throws java.io.IOException
* @throws kademlia.exceptions.ContentNotFoundException * @throws kademlia.exceptions.ContentNotFoundException
*/ */
public KademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException, ContentNotFoundException; public JKademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException, ContentNotFoundException;
/** /**
* Allow the user of the System to call refresh even out of the normal Kad refresh timing * Allow the user of the System to call refresh even out of the normal Kad refresh timing

View File

@ -26,7 +26,7 @@ public class DHT implements KademliaDHT
{ {
private transient StoredContentManager contentManager; private transient StoredContentManager contentManager;
private transient KadSerializer<KademliaStorageEntry> serializer = null; private transient KadSerializer<JKademliaStorageEntry> serializer = null;
private transient KadConfiguration config; private transient KadConfiguration config;
private final String ownerId; private final String ownerId;
@ -51,7 +51,7 @@ public class DHT implements KademliaDHT
} }
@Override @Override
public KadSerializer<KademliaStorageEntry> getSerializer() public KadSerializer<JKademliaStorageEntry> getSerializer()
{ {
if (null == serializer) if (null == serializer)
{ {
@ -62,7 +62,7 @@ public class DHT implements KademliaDHT
} }
@Override @Override
public boolean store(KademliaStorageEntry content) throws IOException public boolean store(JKademliaStorageEntry content) throws IOException
{ {
/* Lets check if we have this content and it's the updated version */ /* Lets check if we have this content and it's the updated version */
if (this.contentManager.contains(content.getContentMetadata())) if (this.contentManager.contains(content.getContentMetadata()))
@ -130,7 +130,7 @@ public class DHT implements KademliaDHT
} }
@Override @Override
public KademliaStorageEntry retrieve(KademliaId key, int hashCode) throws FileNotFoundException, IOException, ClassNotFoundException public JKademliaStorageEntry retrieve(KademliaId key, int hashCode) throws FileNotFoundException, IOException, ClassNotFoundException
{ {
String folder = this.getContentStorageFolderName(key); String folder = this.getContentStorageFolderName(key);
DataInputStream din = new DataInputStream(new FileInputStream(folder + File.separator + hashCode + ".kct")); DataInputStream din = new DataInputStream(new FileInputStream(folder + File.separator + hashCode + ".kct"));
@ -144,7 +144,7 @@ public class DHT implements KademliaDHT
} }
@Override @Override
public KademliaStorageEntry get(KademliaStorageEntryMetadata entry) throws IOException, NoSuchElementException public JKademliaStorageEntry get(KademliaStorageEntryMetadata entry) throws IOException, NoSuchElementException
{ {
try try
{ {
@ -164,7 +164,7 @@ public class DHT implements KademliaDHT
} }
@Override @Override
public KademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException public JKademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException
{ {
/* Load a KadContent if any exist for the given criteria */ /* Load a KadContent if any exist for the given criteria */
try try

View File

@ -10,14 +10,14 @@ public class JKademliaStorageEntry implements KademliaStorageEntry
{ {
private String content; private String content;
private final KademliaStorageEntryMetadata metadata; private final StorageEntryMetadata metadata;
public JKademliaStorageEntry(final KadContent content) public JKademliaStorageEntry(final KadContent content)
{ {
this(content, new StorageEntryMetadata(content)); this(content, new StorageEntryMetadata(content));
} }
public JKademliaStorageEntry(final KadContent content, final KademliaStorageEntryMetadata metadata) public JKademliaStorageEntry(final KadContent content, final StorageEntryMetadata metadata)
{ {
this.setContent(content.toSerializedForm()); this.setContent(content.toSerializedForm());
this.metadata = metadata; this.metadata = metadata;

View File

@ -35,7 +35,7 @@ public interface KademliaDHT
* *
* @return The new ContentSerializer * @return The new ContentSerializer
*/ */
public KadSerializer<KademliaStorageEntry> getSerializer(); public KadSerializer<JKademliaStorageEntry> getSerializer();
/** /**
* Handle storing content locally * Handle storing content locally
@ -46,7 +46,7 @@ public interface KademliaDHT
* *
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public boolean store(KademliaStorageEntry content) throws IOException; public boolean store(JKademliaStorageEntry content) throws IOException;
public boolean store(KadContent content) throws IOException; public boolean store(KadContent content) throws IOException;
@ -61,7 +61,7 @@ public interface KademliaDHT
* @throws java.io.FileNotFoundException * @throws java.io.FileNotFoundException
* @throws java.lang.ClassNotFoundException * @throws java.lang.ClassNotFoundException
*/ */
public KademliaStorageEntry retrieve(KademliaId key, int hashCode) throws FileNotFoundException, IOException, ClassNotFoundException; public JKademliaStorageEntry retrieve(KademliaId key, int hashCode) throws FileNotFoundException, IOException, ClassNotFoundException;
/** /**
* Check if any content for the given criteria exists in this DHT * Check if any content for the given criteria exists in this DHT
@ -81,7 +81,7 @@ public interface KademliaDHT
* *
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public KademliaStorageEntry get(KademliaStorageEntryMetadata entry) throws IOException, NoSuchElementException; public JKademliaStorageEntry get(KademliaStorageEntryMetadata entry) throws IOException, NoSuchElementException;
/** /**
* Get the StorageEntry for the content if any exist. * Get the StorageEntry for the content if any exist.
@ -92,7 +92,7 @@ public interface KademliaDHT
* *
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public KademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException; public JKademliaStorageEntry get(GetParameter param) throws NoSuchElementException, IOException;
/** /**
* Delete a content from local storage * Delete a content from local storage

View File

@ -3,6 +3,7 @@ package kademlia.message;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import kademlia.dht.JKademliaStorageEntry;
import kademlia.dht.KademliaStorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.node.Node; import kademlia.node.Node;
import kademlia.util.serializer.JsonSerializer; import kademlia.util.serializer.JsonSerializer;
@ -18,7 +19,7 @@ public class ContentMessage implements Message
public static final byte CODE = 0x04; public static final byte CODE = 0x04;
private KademliaStorageEntry content; private JKademliaStorageEntry content;
private Node origin; private Node origin;
/** /**
@ -26,7 +27,7 @@ public class ContentMessage implements Message
* @param content The content to be stored * @param content The content to be stored
* *
*/ */
public ContentMessage(Node origin, KademliaStorageEntry content) public ContentMessage(Node origin, JKademliaStorageEntry content)
{ {
this.content = content; this.content = content;
this.origin = origin; this.origin = origin;
@ -43,7 +44,7 @@ public class ContentMessage implements Message
this.origin.toStream(out); this.origin.toStream(out);
/* Serialize the KadContent, then send it to the stream */ /* Serialize the KadContent, then send it to the stream */
new JsonSerializer<KademliaStorageEntry>().write(content, out); new JsonSerializer<JKademliaStorageEntry>().write(content, out);
} }
@Override @Override
@ -53,7 +54,7 @@ public class ContentMessage implements Message
try try
{ {
this.content = new JsonSerializer<KademliaStorageEntry>().read(in); this.content = new JsonSerializer<JKademliaStorageEntry>().read(in);
} }
catch (ClassNotFoundException e) catch (ClassNotFoundException e)
{ {
@ -66,7 +67,7 @@ public class ContentMessage implements Message
return this.origin; return this.origin;
} }
public KademliaStorageEntry getContent() public JKademliaStorageEntry getContent()
{ {
return this.content; return this.content;
} }

View File

@ -3,6 +3,7 @@ package kademlia.message;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import kademlia.dht.JKademliaStorageEntry;
import kademlia.dht.KademliaStorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.node.Node; import kademlia.node.Node;
import kademlia.util.serializer.JsonSerializer; import kademlia.util.serializer.JsonSerializer;
@ -18,7 +19,7 @@ public class StoreContentMessage implements Message
public static final byte CODE = 0x08; public static final byte CODE = 0x08;
private KademliaStorageEntry content; private JKademliaStorageEntry content;
private Node origin; private Node origin;
/** /**
@ -26,7 +27,7 @@ public class StoreContentMessage implements Message
* @param content The content to be stored * @param content The content to be stored
* *
*/ */
public StoreContentMessage(Node origin, KademliaStorageEntry content) public StoreContentMessage(Node origin, JKademliaStorageEntry content)
{ {
this.content = content; this.content = content;
this.origin = origin; this.origin = origin;
@ -43,7 +44,7 @@ public class StoreContentMessage implements Message
this.origin.toStream(out); this.origin.toStream(out);
/* Serialize the KadContent, then send it to the stream */ /* Serialize the KadContent, then send it to the stream */
new JsonSerializer<KademliaStorageEntry>().write(content, out); new JsonSerializer<JKademliaStorageEntry>().write(content, out);
} }
@Override @Override
@ -52,7 +53,7 @@ public class StoreContentMessage implements Message
this.origin = new Node(in); this.origin = new Node(in);
try try
{ {
this.content = new JsonSerializer<KademliaStorageEntry>().read(in); this.content = new JsonSerializer<JKademliaStorageEntry>().read(in);
} }
catch (ClassNotFoundException e) catch (ClassNotFoundException e)
{ {
@ -65,7 +66,7 @@ public class StoreContentMessage implements Message
return this.origin; return this.origin;
} }
public KademliaStorageEntry getContent() public JKademliaStorageEntry getContent()
{ {
return this.content; return this.content;
} }

View File

@ -14,6 +14,7 @@ import kademlia.JKademliaNode;
import kademlia.dht.GetParameter; import kademlia.dht.GetParameter;
import kademlia.KadConfiguration; import kademlia.KadConfiguration;
import kademlia.KadServer; import kademlia.KadServer;
import kademlia.dht.JKademliaStorageEntry;
import kademlia.dht.KademliaStorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.exceptions.ContentNotFoundException; import kademlia.exceptions.ContentNotFoundException;
import kademlia.exceptions.RoutingException; import kademlia.exceptions.RoutingException;
@ -43,7 +44,7 @@ public class ContentLookupOperation implements Operation, Receiver
private final KadServer server; private final KadServer server;
private final JKademliaNode localNode; private final JKademliaNode localNode;
private KademliaStorageEntry contentFound = null; private JKademliaStorageEntry contentFound = null;
private final KadConfiguration config; private final KadConfiguration config;
private final ContentLookupMessage lookupMessage; private final ContentLookupMessage lookupMessage;
@ -253,7 +254,7 @@ public class ContentLookupOperation implements Operation, Receiver
this.localNode.getRoutingTable().insert(msg.getOrigin()); this.localNode.getRoutingTable().insert(msg.getOrigin());
/* Get the Content and check if it satisfies the required parameters */ /* Get the Content and check if it satisfies the required parameters */
KademliaStorageEntry content = msg.getContent(); JKademliaStorageEntry content = msg.getContent();
this.contentFound = content; this.contentFound = content;
this.isContentFound = true; this.isContentFound = true;
} }
@ -320,7 +321,7 @@ public class ContentLookupOperation implements Operation, Receiver
* *
* @throws kademlia.exceptions.ContentNotFoundException * @throws kademlia.exceptions.ContentNotFoundException
*/ */
public KademliaStorageEntry getContentFound() throws ContentNotFoundException public JKademliaStorageEntry getContentFound() throws ContentNotFoundException
{ {
if (this.isContentFound) if (this.isContentFound)
{ {

View File

@ -5,6 +5,7 @@ import java.util.List;
import kademlia.KadConfiguration; import kademlia.KadConfiguration;
import kademlia.KadServer; import kademlia.KadServer;
import kademlia.KademliaNode; import kademlia.KademliaNode;
import kademlia.dht.JKademliaStorageEntry;
import kademlia.dht.KademliaDHT; import kademlia.dht.KademliaDHT;
import kademlia.dht.KademliaStorageEntry; import kademlia.dht.KademliaStorageEntry;
import kademlia.message.Message; import kademlia.message.Message;
@ -22,7 +23,7 @@ public class StoreOperation implements Operation
private final KadServer server; private final KadServer server;
private final KademliaNode localNode; private final KademliaNode localNode;
private final KademliaStorageEntry storageEntry; private final JKademliaStorageEntry storageEntry;
private final KademliaDHT localDht; private final KademliaDHT localDht;
private final KadConfiguration config; private final KadConfiguration config;
@ -33,7 +34,7 @@ public class StoreOperation implements Operation
* @param localDht The local DHT * @param localDht The local DHT
* @param config * @param config
*/ */
public StoreOperation(KadServer server, KademliaNode localNode, KademliaStorageEntry storageEntry, KademliaDHT localDht, KadConfiguration config) public StoreOperation(KadServer server, KademliaNode localNode, JKademliaStorageEntry storageEntry, KademliaDHT localDht, KadConfiguration config)
{ {
this.server = server; this.server = server;
this.localNode = localNode; this.localNode = localNode;