// Path: src/dosna/content/DOSNAContent.java
// public abstract class DOSNAContent implements KadContent, ActorRelatedContent, Serializable
// {
// 
//     public static final String TYPE = "DOSNAContent";
// 
//     public final long createTs;
//     public long updateTs;
// 
//     /* Set of actors related to this content */
//     Map<String, String> relatedActors;
// 
//     
//     {
//         this.createTs = this.updateTs = System.currentTimeMillis() / 1000L;
//         relatedActors = new HashMap<>();
//     }
// 
//     public DOSNAContent()
//     {
// 
//     }
// 
//     @Override
//     public long getCreatedTimestamp()
//     {
//         return this.createTs;
//     }
// 
//     @Override
//     public long getLastUpdatedTimestamp()
//     {
//         return this.updateTs;
//     }
// 
//     @Override
//     public byte[] toSerializedForm()
//     {
//         Gson gson = new Gson();
// //        try (
// //                ByteArrayOutputStream bout = new ByteArrayOutputStream();
// //                ObjectOutputStream out = new ObjectOutputStream(bout))
// //        {
// //            out.writeObject(this);
// //            out.close();
// //            return bout.toByteArray();
// //        }
// //        catch (IOException ex)
// //        {
// //            ex.printStackTrace();
// //        }
// 
//         return gson.toJson(this).getBytes();
//     }
// 
//     @Override
//     public DOSNAContent fromSerializedForm(byte[] data)
//     {
// //        try (ByteArrayInputStream bin = new ByteArrayInputStream(data);
// //                ObjectInputStream oin = new ObjectInputStream(bin))
// //        {
// //            DOSNAContent val = (DOSNAContent) oin.readObject();
// //            oin.close();
// //            System.out.println("Deserialized: " + val);
// //            return val;
// //        }
// //        catch (IOException | ClassNotFoundException ex)
// //        {
// //            ex.printStackTrace();
// //        }
//         Gson gson = new Gson();
//         DOSNAContent val = gson.fromJson(new String(data), this.getClass());
//         return val;
//     }
// 
//     /**
//      * When some updates have been made to a content,
//      * this method can be called to update the lastUpdated timestamp.
//      */
//     public void setUpdated()
//     {
//         this.updateTs = System.currentTimeMillis() / 1000L;
//     }
// 
//     /**
//      * When adding an actor we store the actor's ID and the actor's relationship to this content
//      */
//     @Override
//     public void addActor(String userId, String relationship)
//     {
//         this.relatedActors.put(userId, relationship);
//     }
// 
//     @Override
//     public void addActor(Actor a, String relationship)
//     {
//         addActor(a.getId(), relationship);
//     }
// 
//     @Override
//     public List<String> getRelatedActors()
//     {
//         return new ArrayList<>(this.relatedActors.keySet());
//     }
// 
//     @Override
//     public String toString()
//     {
//         StringBuilder sb = new StringBuilder(this.getType());
// 
//         sb.append(": ");
// 
//         sb.append("[Actors: ");
// 
//         for (String a : this.relatedActors.keySet())
//         {
//             sb.append(a);
//             sb.append("; ");
//         }
// 
//         sb.append("]");
// 
//         return sb.toString();
//     }
// }


import dosna.content.DOSNAContent;
import java.io.Serializable;
import kademlia.node.KademliaId;

package dosna.core;


/**
 * Class used by the content manager to store metadata of a content.
 * It will be used to keep track of content in Sorted order by timestamp.
 *
 * This class should be kept as small as possible and should never contain the actual content.
 *
 *
 * @author Joshua Kissoon
 * @since 20140406
 */
public final class ContentMetadata implements Comparable<ContentMetadata>, Serializable
{

    private KademliaId key;
    private long updateTs;
    private String ownerId;
    private String type;

    /**
     * Blank constructor used mainly by serializers.
     */
    public ContentMetadata()
    {

    }

    /**
     * Create a new ContentMetadata object for the given content
     *
     * @param content
     */

// Path: src/dosna/content/DOSNAContent.java
// public abstract class DOSNAContent implements KadContent, ActorRelatedContent, Serializable
// {
// 
//     public static final String TYPE = "DOSNAContent";
// 
//     public final long createTs;
//     public long updateTs;
// 
//     /* Set of actors related to this content */
//     Map<String, String> relatedActors;
// 
//     
//     {
//         this.createTs = this.updateTs = System.currentTimeMillis() / 1000L;
//         relatedActors = new HashMap<>();
//     }
// 
//     public DOSNAContent()
//     {
// 
//     }
// 
//     @Override
//     public long getCreatedTimestamp()
//     {
//         return this.createTs;
//     }
// 
//     @Override
//     public long getLastUpdatedTimestamp()
//     {
//         return this.updateTs;
//     }
// 
//     @Override
//     public byte[] toSerializedForm()
//     {
//         Gson gson = new Gson();
// //        try (
// //                ByteArrayOutputStream bout = new ByteArrayOutputStream();
// //                ObjectOutputStream out = new ObjectOutputStream(bout))
// //        {
// //            out.writeObject(this);
// //            out.close();
// //            return bout.toByteArray();
// //        }
// //        catch (IOException ex)
// //        {
// //            ex.printStackTrace();
// //        }
// 
//         return gson.toJson(this).getBytes();
//     }
// 
//     @Override
//     public DOSNAContent fromSerializedForm(byte[] data)
//     {
// //        try (ByteArrayInputStream bin = new ByteArrayInputStream(data);
// //                ObjectInputStream oin = new ObjectInputStream(bin))
// //        {
// //            DOSNAContent val = (DOSNAContent) oin.readObject();
// //            oin.close();
// //            System.out.println("Deserialized: " + val);
// //            return val;
// //        }
// //        catch (IOException | ClassNotFoundException ex)
// //        {
// //            ex.printStackTrace();
// //        }
//         Gson gson = new Gson();
//         DOSNAContent val = gson.fromJson(new String(data), this.getClass());
//         return val;
//     }
// 
//     /**
//      * When some updates have been made to a content,
//      * this method can be called to update the lastUpdated timestamp.
//      */
//     public void setUpdated()
//     {
//         this.updateTs = System.currentTimeMillis() / 1000L;
//     }
// 
//     /**
//      * When adding an actor we store the actor's ID and the actor's relationship to this content
//      */
//     @Override
//     public void addActor(String userId, String relationship)
//     {
//         this.relatedActors.put(userId, relationship);
//     }
// 
//     @Override
//     public void addActor(Actor a, String relationship)
//     {
//         addActor(a.getId(), relationship);
//     }
// 
//     @Override
//     public List<String> getRelatedActors()
//     {
//         return new ArrayList<>(this.relatedActors.keySet());
//     }
// 
//     @Override
//     public String toString()
//     {
//         StringBuilder sb = new StringBuilder(this.getType());
// 
//         sb.append(": ");
// 
//         sb.append("[Actors: ");
// 
//         for (String a : this.relatedActors.keySet())
//         {
//             sb.append(a);
//             sb.append("; ");
//         }
// 
//         sb.append("]");
// 
//         return sb.toString();
//     }
// }


// Path: src/dosna/core/ContentMetadata.java
import dosna.content.DOSNAContent;
import java.io.Serializable;
import kademlia.node.KademliaId;

package dosna.core;


/**
 * Class used by the content manager to store metadata of a content.
 * It will be used to keep track of content in Sorted order by timestamp.
 *
 * This class should be kept as small as possible and should never contain the actual content.
 *
 *
 * @author Joshua Kissoon
 * @since 20140406
 */
public final class ContentMetadata implements Comparable<ContentMetadata>, Serializable
{

    private KademliaId key;
    private long updateTs;
    private String ownerId;
    private String type;

    /**
     * Blank constructor used mainly by serializers.
     */
    public ContentMetadata()
    {

    }

    /**
     * Create a new ContentMetadata object for the given content
     *
     * @param content
     */

    public ContentMetadata(final DOSNAContent content)
