X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fcore%2FRequestManager.java;h=d2b1bdea99d59ad8556c2cbf70a42e0f7ccd72e0;hb=f212e5bc9dcc2007b080b6ba873b570de43c6b39;hp=4efd9d96013c65505e508928e21f52cbf6e664c5;hpb=196231f83b4fd9c8c5710b722ff27595f8644734;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/core/RequestManager.java b/src/net/pterodactylus/jsite/core/RequestManager.java index 4efd9d9..d2b1bde 100644 --- a/src/net/pterodactylus/jsite/core/RequestManager.java +++ b/src/net/pterodactylus/jsite/core/RequestManager.java @@ -28,13 +28,17 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import net.pterodactylus.fcp.highlevel.GetRequestResult; import net.pterodactylus.fcp.highlevel.HighLevelCallback; import net.pterodactylus.fcp.highlevel.HighLevelCallbackListener; import net.pterodactylus.fcp.highlevel.HighLevelClient; import net.pterodactylus.fcp.highlevel.HighLevelProgress; import net.pterodactylus.fcp.highlevel.HighLevelProgressListener; +import net.pterodactylus.fcp.highlevel.PutDirRequestResult; +import net.pterodactylus.fcp.highlevel.PutRequestResult; import net.pterodactylus.fcp.highlevel.RequestListResult; import net.pterodactylus.fcp.highlevel.RequestResult; +import net.pterodactylus.jsite.core.Request.Type; import net.pterodactylus.util.logging.Logging; /** @@ -158,7 +162,7 @@ public class RequestManager implements NodeListener, HighLevelProgressListener { logger.log(Level.WARNING, "no client for node: " + node); return; } - final Map identifierRequests = new HashMap(); + final Map identifierRequests = Collections.synchronizedMap(new HashMap()); nodeRequests.put(node, identifierRequests); HighLevelCallback requestListCallback = highLevelClient.getRequests(); requestListCallback.addHighLevelCallbackListener(new HighLevelCallbackListener() { @@ -173,10 +177,26 @@ public class RequestManager implements NodeListener, HighLevelProgressListener { return; } for (RequestResult requestResult: requestListResult) { - Request request = new Request(node, requestResult.getIdentifier()); - identifierRequests.put(requestResult.getIdentifier(), request); - /* TODO - fill request */ - fireRequestAdded(request); + String identifier = requestResult.getIdentifier(); + logger.log(Level.FINER, "got identifier: " + identifier); + Request request = identifierRequests.get(identifier); + if (request == null) { + request = new Request(node, identifier); + } + if (request.getType() == null) { + if (requestResult instanceof GetRequestResult) { + request.setType(Type.get); + } else if (requestResult instanceof PutRequestResult) { + request.setType(Type.put); + } else if (requestResult instanceof PutDirRequestResult) { + request.setType(Type.putDir); + } + } + if (identifierRequests.containsKey(identifier)) { + continue; + } + identifierRequests.put(requestResult.getIdentifier(), request); + fireRequestAdded(request); } } }); @@ -266,13 +286,16 @@ public class RequestManager implements NodeListener, HighLevelProgressListener { Map identifierRequests = nodeRequests.get(node); if (identifierRequests == null) { logger.warning("got node without request map: " + node); - return; + identifierRequests = Collections.synchronizedMap(new HashMap()); + nodeRequests.put(node, identifierRequests); } Request request = identifierRequests.get(identifier); - if (request == null) { - logger.warning("got progress for unknown request: " + identifier); - return; - } + if (request == null) { + logger.warning("got progress for unknown request: " + identifier); + request = new Request(node, identifier); + identifierRequests.put(identifier, request); + fireRequestAdded(request); + } request.setTotalBlocks(highLevelProgress.getTotalBlocks()); request.setRequiredBlocks(highLevelProgress.getRequiredBlocks()); request.setSuccessfulBlocks(highLevelProgress.getSuccessfulBlocks());