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;
/**
* @throws FcpException
* if an FCP error occurs
*/
- public Set<Peer> getPeers(final boolean withMetadata, final boolean withVolatile) throws IOException, FcpException {
+ public Collection<Peer> getPeers(final boolean withMetadata, final boolean withVolatile) throws IOException, FcpException {
final Set<Peer> peers = Collections.synchronizedSet(new HashSet<Peer>());
new ExtendedFcpAdapter() {
}
/**
+ * 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
* 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 put requests.
+ *
+ * @param global
+ * <code>true</code> to return put requests from the global
+ * queue, <code>false</code> to only show requests from the
+ * client-local queue
+ * @return All put requests
+ * @throws IOException
+ * if an I/O error occurs
+ * @throws FcpException
+ * if an FCP error occurs
+ */
+ public Collection<Request> getPutRequests(final boolean global) throws IOException, FcpException {
+ return Filters.filteredCollection(getRequests(global), new Filter<Request>() {
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean filterObject(Request request) {
+ return request instanceof PutRequest;
+ }
+ });
+ }
+
+ /**
+ * 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() {