// Path: src/dosna/dhtAbstraction/DataManager.java
// public interface DataManager
// {
// 
//     /**
//      * Put data onto the network.
//      * This will put the data onto the network based on the routing protocol.
//      * It may or may not store data locally.
//      *
//      * @param content The content to be stored on the network
//      *
//      * @return How many nodes was this content stored on
//      *
//      * @throws java.io.IOException
//      */
//     public int put(final DOSNAContent content) throws IOException;
// 
//     /**
//      * Get entries for the required data from the network
//      *
//      * @param gp
//      *
//      * @return A single data entry
//      *
//      * @throws java.io.IOException
//      * @throws kademlia.exceptions.ContentNotFoundException
//      */
//     public KademliaStorageEntry get(final GetParameter gp) throws IOException, NoSuchElementException, ContentNotFoundException;
// 
//     /**
//      * Get entries for the required data from the network
//      *
//      * @param key
//      * @param type
//      *
//      * @return A single data entry
//      *
//      * @throws java.io.IOException
//      * @throws kademlia.exceptions.ContentNotFoundException
//      */
//     public KademliaStorageEntry get(final KademliaId key, final String type) throws IOException, NoSuchElementException, ContentNotFoundException;
// 
//     /**
//      * Get entries for the required data from the network
//      *
//      * @param key
//      * @param type
//      * @param ownerId
//      *
//      * @return A single data entry
//      *
//      * @throws java.io.IOException
//      * @throws kademlia.exceptions.ContentNotFoundException
//      */
//     public KademliaStorageEntry get(final KademliaId key, final String type, final String ownerId) throws IOException, NoSuchElementException, ContentNotFoundException;
// 
//     /**
//      * Run an update call to update the data stored locally on this computer.
//      * This may involve deleting some data and adding some other data.
//      */
//     public void updateStorage();
// 
//     /**
//      * Save the state of the DataManager and shutdown
//      *
//      * @param saveState Whether to save the state of the application or not
//      *
//      * @throws java.io.IOException
//      */
//     public void shutdown(final boolean saveState) throws IOException;
// 
//     /**
//      * @return The JKademliaNode used by this DataManager
//      */
//     public JKademliaNode getKademliaNode();
// }
// 
// Path: src/dosna/notification/NotificationBox.java
// public class NotificationBox extends DOSNAContent
// {
// 
//     public final static String TYPE = "NotificationBox";
// 
//     private List<Notification> notifications;
//     private String ownerId;
// 
//     private KademliaId key;
// 
//     
//     {
//         notifications = new ArrayList<>();
//     }
// 
//     public NotificationBox()
//     {
// 
//     }
// 
//     /**
//      * Setup the Notification Box
//      *
//      * @param owner The owner of this notification box
//      */
//     public NotificationBox(final Actor owner)
//     {
//         this(owner.getId());
//     }
// 
//     /**
//      * Setup the Notification Box
//      *
//      * @param ownerId The ID of the owner of this notification box
//      */
//     public NotificationBox(final String ownerId)
//     {
//         this.ownerId = ownerId;
//         this.generateNodeId();
//     }
// 
//     private void generateNodeId()
//     {
//         byte[] keyData = null;
//         try
//         {
//             keyData = HashCalculator.sha1Hash(this.ownerId + "NotificationBox");
//         }
//         catch (NoSuchAlgorithmException ex)
//         {
//             /*@todo try some other hash here */
//             System.err.println("SHA-1 Hash algorithm isn't existent.");
//         }
//         this.key = new KademliaId(keyData);
//     }
// 
//     /**
//      * Adds a new notification to the notification box
//      *
//      * @param n the notification to add
//      */
//     public void addNotification(Notification n)
//     {
//         this.notifications.add(n);
//         this.setUpdated();
//     }
// 
//     /**
//      * @return All notifications in this notifications box
//      */
//     public List<Notification> getNotifications()
//     {
//         return this.notifications;
//     }
// 
//     /**
//      * Deletes all notifications from the notification box.
//      */
//     public void emptyBox()
//     {
//         this.notifications = new ArrayList<>();
//         this.setUpdated();
//     }
// 
//     /**
//      * Check whether this box has any notifications.
//      *
//      * @return
//      */
//     public boolean hasNotifications()
//     {
//         return !this.notifications.isEmpty();
//     }
// 
//     @Override
//     public KademliaId getKey()
//     {
//         return this.key;
//     }
// 
//     @Override
//     public String getType()
//     {
//         return TYPE;
//     }
// 
//     @Override
//     public String getOwnerId()
//     {
//         return this.ownerId;
//     }
// 
//     @Override
//     public String toString()
//     {
//         StringBuilder sb = new StringBuilder("NotificationBox: ");
// 
//         sb.append("[Owner: ");
//         sb.append(ownerId);
//         sb.append("");
// 
//         for (Notification n : this.notifications)
//         {
//             sb.append(n);
//             sb.append(" ; ");
//         }
// 
//         sb.append("]");
// 
//         return sb.toString();
//     }
// 
// }


import dosna.dhtAbstraction.DataManager;
import dosna.notification.NotificationBox;
import java.io.IOException;
import kademlia.dht.GetParameter;
import kademlia.dht.KademliaStorageEntry;
import kademlia.exceptions.ContentNotFoundException;
package dosna.osn.actor;


/**
 * A class that handles actors on the DOSN.
 *
 * @author Joshua Kissoon
 * @since 20140501
 */
public class ActorManager
{

    private final DataManager dataManager;

    /**
     * Initialize the actor creator class
     *
     * @param dataManager The Network Data Manager
     */
// Path: src/dosna/dhtAbstraction/DataManager.java
// public interface DataManager
// {
// 
//     /**
//      * Put data onto the network.
//      * This will put the data onto the network based on the routing protocol.
//      * It may or may not store data locally.
//      *
//      * @param content The content to be stored on the network
//      *
//      * @return How many nodes was this content stored on
//      *
//      * @throws java.io.IOException
//      */
//     public int put(final DOSNAContent content) throws IOException;
// 
//     /**
//      * Get entries for the required data from the network
//      *
//      * @param gp
//      *
//      * @return A single data entry
//      *
//      * @throws java.io.IOException
//      * @throws kademlia.exceptions.ContentNotFoundException
//      */
//     public KademliaStorageEntry get(final GetParameter gp) throws IOException, NoSuchElementException, ContentNotFoundException;
// 
//     /**
//      * Get entries for the required data from the network
//      *
//      * @param key
//      * @param type
//      *
//      * @return A single data entry
//      *
//      * @throws java.io.IOException
//      * @throws kademlia.exceptions.ContentNotFoundException
//      */
//     public KademliaStorageEntry get(final KademliaId key, final String type) throws IOException, NoSuchElementException, ContentNotFoundException;
// 
//     /**
//      * Get entries for the required data from the network
//      *
//      * @param key
//      * @param type
//      * @param ownerId
//      *
//      * @return A single data entry
//      *
//      * @throws java.io.IOException
//      * @throws kademlia.exceptions.ContentNotFoundException
//      */
//     public KademliaStorageEntry get(final KademliaId key, final String type, final String ownerId) throws IOException, NoSuchElementException, ContentNotFoundException;
// 
//     /**
//      * Run an update call to update the data stored locally on this computer.
//      * This may involve deleting some data and adding some other data.
//      */
//     public void updateStorage();
// 
//     /**
//      * Save the state of the DataManager and shutdown
//      *
//      * @param saveState Whether to save the state of the application or not
//      *
//      * @throws java.io.IOException
//      */
//     public void shutdown(final boolean saveState) throws IOException;
// 
//     /**
//      * @return The JKademliaNode used by this DataManager
//      */
//     public JKademliaNode getKademliaNode();
// }
// 
// Path: src/dosna/notification/NotificationBox.java
// public class NotificationBox extends DOSNAContent
// {
// 
//     public final static String TYPE = "NotificationBox";
// 
//     private List<Notification> notifications;
//     private String ownerId;
// 
//     private KademliaId key;
// 
//     
//     {
//         notifications = new ArrayList<>();
//     }
// 
//     public NotificationBox()
//     {
// 
//     }
// 
//     /**
//      * Setup the Notification Box
//      *
//      * @param owner The owner of this notification box
//      */
//     public NotificationBox(final Actor owner)
//     {
//         this(owner.getId());
//     }
// 
//     /**
//      * Setup the Notification Box
//      *
//      * @param ownerId The ID of the owner of this notification box
//      */
//     public NotificationBox(final String ownerId)
//     {
//         this.ownerId = ownerId;
//         this.generateNodeId();
//     }
// 
//     private void generateNodeId()
//     {
//         byte[] keyData = null;
//         try
//         {
//             keyData = HashCalculator.sha1Hash(this.ownerId + "NotificationBox");
//         }
//         catch (NoSuchAlgorithmException ex)
//         {
//             /*@todo try some other hash here */
//             System.err.println("SHA-1 Hash algorithm isn't existent.");
//         }
//         this.key = new KademliaId(keyData);
//     }
// 
//     /**
//      * Adds a new notification to the notification box
//      *
//      * @param n the notification to add
//      */
//     public void addNotification(Notification n)
//     {
//         this.notifications.add(n);
//         this.setUpdated();
//     }
// 
//     /**
//      * @return All notifications in this notifications box
//      */
//     public List<Notification> getNotifications()
//     {
//         return this.notifications;
//     }
// 
//     /**
//      * Deletes all notifications from the notification box.
//      */
//     public void emptyBox()
//     {
//         this.notifications = new ArrayList<>();
//         this.setUpdated();
//     }
// 
//     /**
//      * Check whether this box has any notifications.
//      *
//      * @return
//      */
//     public boolean hasNotifications()
//     {
//         return !this.notifications.isEmpty();
//     }
// 
//     @Override
//     public KademliaId getKey()
//     {
//         return this.key;
//     }
// 
//     @Override
//     public String getType()
//     {
//         return TYPE;
//     }
// 
//     @Override
//     public String getOwnerId()
//     {
//         return this.ownerId;
//     }
// 
//     @Override
//     public String toString()
//     {
//         StringBuilder sb = new StringBuilder("NotificationBox: ");
// 
//         sb.append("[Owner: ");
//         sb.append(ownerId);
//         sb.append("");
// 
//         for (Notification n : this.notifications)
//         {
//             sb.append(n);
//             sb.append(" ; ");
//         }
// 
//         sb.append("]");
// 
//         return sb.toString();
//     }
// 
// }


// Path: src/dosna/osn/actor/ActorManager.java
import dosna.dhtAbstraction.DataManager;
import dosna.notification.NotificationBox;
import java.io.IOException;
import kademlia.dht.GetParameter;
import kademlia.dht.KademliaStorageEntry;
import kademlia.exceptions.ContentNotFoundException;

package dosna.osn.actor;


/**
 * A class that handles actors on the DOSN.
 *
 * @author Joshua Kissoon
 * @since 20140501
 */
public class ActorManager
{

    private final DataManager dataManager;

    /**
     * Initialize the actor creator class
     *
     * @param dataManager The Network Data Manager
     */
    public ActorManager(DataManager dataManager)