// Start all queries in the background.
GetObjectRunnable[] runnables = new GetObjectRunnable[signedHeadURLs.length];
for (int i = 0; i < runnables.length; i++) {
URL url = new URL(signedHeadURLs[i]);
S3Object object = ServiceUtils.buildObjectFromUrl(url.getHost(), url.getPath());
pendingObjectKeysList.add(object);
runnables[i] = new GetObjectRunnable(signedHeadURLs[i], true);
}
int adminMaxThreadCount = Jets3tProperties.getInstance(Constants.JETS3T_PROPERTIES_FILENAME)
.getIntProperty("s3service.admin-max-thread-count", 4);
// Wait for threads to finish, or be cancelled.
(new ThreadGroupManager(runnables, adminMaxThreadCount, new ThreadWatcher(runnables.length)) {
public void fireStartEvent(ThreadWatcher threadWatcher) {
fireServiceEvent(GetObjectHeadsEvent.newStartedEvent(threadWatcher, uniqueOperationId));
}
public void fireProgressEvent(ThreadWatcher threadWatcher, List completedResults) {
S3Object[] completedObjects = (S3Object[]) completedResults
.toArray(new S3Object[completedResults.size()]);
for (int i = 0; i < completedObjects.length; i++) {
pendingObjectKeysList.remove(completedObjects[i].getKey());
}
fireServiceEvent(GetObjectHeadsEvent.newInProgressEvent(threadWatcher, completedObjects, uniqueOperationId));
}
public void fireCancelEvent() {
List cancelledObjectsList = new ArrayList();
Iterator iter = pendingObjectKeysList.iterator();
while (iter.hasNext()) {
String key = (String) iter.next();
cancelledObjectsList.add(new S3Object(key));
}
S3Object[] cancelledObjects = (S3Object[]) cancelledObjectsList
.toArray(new S3Object[cancelledObjectsList.size()]);
fireServiceEvent(GetObjectHeadsEvent.newCancelledEvent(cancelledObjects, uniqueOperationId));
}