Implement getGetRequests by using a filter.
[jFCPlib.git] / src / net / pterodactylus / fcp / highlevel / FcpClient.java
index 4af4426..a958f07 100644 (file)
@@ -60,6 +60,8 @@ import net.pterodactylus.fcp.RemovePeer;
 import net.pterodactylus.fcp.SSKKeypair;
 import net.pterodactylus.fcp.SimpleProgress;
 import net.pterodactylus.fcp.WatchGlobal;
+import net.pterodactylus.util.filter.Filter;
+import net.pterodactylus.util.filter.Filters;
 import net.pterodactylus.util.thread.ObjectWrapper;
 
 /**
@@ -254,6 +256,78 @@ public class FcpClient {
        }
 
        /**
+        * Returns all darknet peers.
+        *
+        * @param withMetadata
+        *            <code>true</code> to include peer metadata
+        * @param withVolatile
+        *            <code>true</code> to include volatile peer data
+        * @return A set containing the node’s darknet peers
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public Collection<Peer> getDarknetPeers(boolean withMetadata, boolean withVolatile) throws IOException, FcpException {
+               Collection<Peer> allPeers = getPeers(withMetadata, withVolatile);
+               Collection<Peer> darknetPeers = new HashSet<Peer>();
+               for (Peer peer : allPeers) {
+                       if (!peer.isOpennet() && !peer.isSeed()) {
+                               darknetPeers.add(peer);
+                       }
+               }
+               return darknetPeers;
+       }
+
+       /**
+        * Returns all opennet peers.
+        *
+        * @param withMetadata
+        *            <code>true</code> to include peer metadata
+        * @param withVolatile
+        *            <code>true</code> to include volatile peer data
+        * @return A set containing the node’s opennet peers
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public Collection<Peer> getOpennetPeers(boolean withMetadata, boolean withVolatile) throws IOException, FcpException {
+               Collection<Peer> allPeers = getPeers(withMetadata, withVolatile);
+               Collection<Peer> opennetPeers = new HashSet<Peer>();
+               for (Peer peer : allPeers) {
+                       if (peer.isOpennet() && !peer.isSeed()) {
+                               opennetPeers.add(peer);
+                       }
+               }
+               return opennetPeers;
+       }
+
+       /**
+        * Returns all seed peers.
+        *
+        * @param withMetadata
+        *            <code>true</code> to include peer metadata
+        * @param withVolatile
+        *            <code>true</code> to include volatile peer data
+        * @return A set containing the node’s seed peers
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public Collection<Peer> getSeedPeers(boolean withMetadata, boolean withVolatile) throws IOException, FcpException {
+               Collection<Peer> allPeers = getPeers(withMetadata, withVolatile);
+               Collection<Peer> seedPeers = new HashSet<Peer>();
+               for (Peer peer : allPeers) {
+                       if (peer.isSeed()) {
+                               seedPeers.add(peer);
+                       }
+               }
+               return seedPeers;
+       }
+
+       /**
         * Adds the given peer to the node.
         *
         * @param peer
@@ -565,9 +639,30 @@ public class FcpClient {
         *             if an FCP error occurs
         */
        public Collection<Request> getGetRequests(final boolean global) throws IOException, FcpException {
-               return getRequests(global);
+               return Filters.filteredCollection(getRequests(global), new Filter<Request>() {
+
+                       /**
+                        * {@inheritDoc}
+                        */
+                       public boolean filterObject(Request request) {
+                               return request instanceof GetRequest;
+                       }
+               });
        }
 
+       /**
+        * Returns all currently visible persistent requests.
+        *
+        * @param global
+        *            <code>true</code> to return requests from the global queue,
+        *            <code>false</code> to only show requests from the client-local
+        *            queue
+        * @return All requests
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
        public Collection<Request> getRequests(final boolean global) throws IOException, FcpException {
                final Map<String, Request> requests = Collections.synchronizedMap(new HashMap<String, Request>());
                new ExtendedFcpAdapter() {