Add request listener management.
[jSite2.git] / src / net / pterodactylus / jsite / core / RequestManager.java
index cc381cf..df7028f 100644 (file)
@@ -23,13 +23,13 @@ import java.io.IOException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import net.pterodactylus.fcp.highlevel.FcpClient;
 import net.pterodactylus.fcp.highlevel.FcpException;
-import net.pterodactylus.fcp.highlevel.Request;
 import net.pterodactylus.jsite.util.IdGenerator;
 import net.pterodactylus.util.number.Hex;
 
@@ -43,6 +43,9 @@ public class RequestManager implements NodeListener {
        /** The logger. */
        private static final Logger logger = Logger.getLogger(RequestManager.class.getName());
 
+       /** Request event manager. */
+       private final RequestListenerManager requestListenerManager = new RequestListenerManager();
+
        /** The node manager. */
        private final NodeManager nodeManager;
 
@@ -60,6 +63,32 @@ public class RequestManager implements NodeListener {
        }
 
        //
+       // LISTENER MANAGEMENT
+       //
+
+       /**
+        * Adds the given request listener to the list of registered listeners.
+        *
+        * @see RequestListenerManager#addListener(RequestListener)
+        * @param requestListener
+        *            The request listener to add
+        */
+       public void addRequestListener(RequestListener requestListener) {
+               requestListenerManager.addListener(requestListener);
+       }
+
+       /**
+        * Removes the given request listener from the list of registered listeners.
+        *
+        * @see RequestListenerManager#removeListener(RequestListener)
+        * @param requestListener
+        *            The request listener to remove
+        */
+       public void removeRequestListener(RequestListener requestListener) {
+               requestListenerManager.removeListener(requestListener);
+       }
+
+       //
        // ACTIONS
        //
 
@@ -99,6 +128,23 @@ public class RequestManager implements NodeListener {
                return true;
        }
 
+       /**
+        * Wraps the requests of the FCP API into jSite requests.
+        *
+        * @param requests
+        *            The requests to wrap
+        * @return The wrapped requests
+        */
+       private Collection<Request> wrapRequests(Collection<net.pterodactylus.fcp.highlevel.Request> requests) {
+               Collection<Request> wrappedRequests = new HashSet<Request>();
+               for (net.pterodactylus.fcp.highlevel.Request request : requests) {
+                       Request wrappedRequest = new Request(request.getIdentifier());
+                       wrappedRequest.setClientToken(request.getClientToken());
+                       wrappedRequests.add(wrappedRequest);
+               }
+               return wrappedRequests;
+       }
+
        //
        // INTERFACE NodeListener
        //
@@ -120,7 +166,7 @@ public class RequestManager implements NodeListener {
                        return;
                }
                try {
-                       Collection<Request> requests = fcpClient.getRequests(true);
+                       Collection<Request> requests = wrapRequests(fcpClient.getRequests(true));
                        for (Request request : requests) {
                                String clientToken = request.getClientToken();
                                if ((clientToken == null) || (clientToken.trim().length() == 0)) {