import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
/** Request lists for all nodes. */
@SuppressWarnings("unused")
- private Map<Node, Set<Request>> nodeRequests = Collections.synchronizedMap(new HashMap<Node, Set<Request>>());
+ private Map<Node, Map<String, Request>> nodeRequests = Collections.synchronizedMap(new HashMap<Node, Map<String, Request>>());
//
// EVENT MANAGEMENT
/**
* Notifies all listeners that a request was added.
*
- * @param node
- * The node that added the request
* @param request
* The request that was added
*/
- private void fireRequestAdded(Node node, Request request) {
+ private void fireRequestAdded(Request request) {
for (RequestListener requestListener: requestListeners) {
- requestListener.requestAdded(node, request);
+ requestListener.requestAdded(request);
}
}
/**
* Notifies all listeners that a request progressed.
*
- * @param node
- * The node that runs the request
* @param request
* The request
- * @param totalBlocks
- * The total number of blocks
- * @param requiredBlocks
- * The number of required blocks
- * @param successfulBlocks
- * The number of successful blocks
- * @param failedBlocks
- * The number of failed blocks
- * @param fatallyFailedBlocks
- * The number of fatally failed blocks
- * @param finalizedTotal
- * <code>true</code> if the total number of blocks in final,
- * <code>false</code> otherwise
*/
- private void fireRequestProgressed(Node node, Request request, int totalBlocks, int requiredBlocks, int successfulBlocks, int failedBlocks, int fatallyFailedBlocks, boolean finalizedTotal) {
+ private void fireRequestProgressed(Request request) {
for (RequestListener requestListener: requestListeners) {
- requestListener.requestProgressed(node, request, totalBlocks, requiredBlocks, successfulBlocks, failedBlocks, fatallyFailedBlocks, finalizedTotal);
+ requestListener.requestProgressed(request);
}
}
+ // TODO - fireRequestRemoved
+
//
// ACCESSORS
//
logger.log(Level.WARNING, "no client for node: " + node);
return;
}
+ final Map<String, Request> identifierRequests = new HashMap<String, Request>();
+ nodeRequests.put(node, identifierRequests);
HighLevelCallback<RequestListResult> requestListCallback = highLevelClient.getRequests();
requestListCallback.addHighLevelCallbackListener(new HighLevelCallbackListener<RequestListResult>() {
return;
}
for (RequestResult requestResult: requestListResult) {
- Request request = new Request(requestResult.getIdentifier());
+ Request request = new Request(node, requestResult.getIdentifier());
+ identifierRequests.put(requestResult.getIdentifier(), request);
/* TODO - fill request */
- fireRequestAdded(node, request);
+ fireRequestAdded(request);
}
}
});
//
/**
- * @see net.pterodactylus.fcp.highlevel.HighLevelProgressListener#progressReceived(java.lang.String,
- * net.pterodactylus.fcp.highlevel.HighLevelProgress)
+ * @see net.pterodactylus.fcp.highlevel.HighLevelProgressListener#progressReceived(HighLevelClient,
+ * String, HighLevelProgress)
*/
- public void progressReceived(String identifier, HighLevelProgress highLevelProgress) {
- fireRequestProgressed(null, new Request(identifier), highLevelProgress.getTotalBlocks(), highLevelProgress.getRequiredBlocks(), highLevelProgress.getSuccessfulBlocks(), highLevelProgress.getFailedBlocks(), highLevelProgress.getFatallyFailedBlocks(), highLevelProgress.isTotalFinalized());
+ public void progressReceived(HighLevelClient highLevelClient, String identifier, HighLevelProgress highLevelProgress) {
+ Node node = nodeManager.getNode(highLevelClient);
+ if (node == null) {
+ logger.warning("got high-level client without node: " + highLevelClient);
+ return;
+ }
+ Map<String, Request> identifierRequests = nodeRequests.get(node);
+ if (identifierRequests == null) {
+ logger.warning("got node without request map: " + node);
+ return;
+ }
+ Request request = identifierRequests.get(identifier);
+ if (request == null) {
+ logger.warning("got progress for unknown request: " + identifier);
+ return;
+ }
+ request.setTotalBlocks(highLevelProgress.getTotalBlocks());
+ request.setRequiredBlocks(highLevelProgress.getRequiredBlocks());
+ request.setSuccessfulBlocks(highLevelProgress.getSuccessfulBlocks());
+ request.setFailedBlocks(highLevelProgress.getFailedBlocks());
+ request.setFatallyFailedBlocks(highLevelProgress.getFatallyFailedBlocks());
+ request.setTotalFinalized(highLevelProgress.isTotalFinalized());
+ fireRequestProgressed(request);
}
}