|
Lines 24-29
Link Here
|
| 24 |
import org.eclipse.equinox.p2.core.ProvisionException; |
24 |
import org.eclipse.equinox.p2.core.ProvisionException; |
| 25 |
import org.eclipse.equinox.p2.metadata.IArtifactKey; |
25 |
import org.eclipse.equinox.p2.metadata.IArtifactKey; |
| 26 |
import org.eclipse.equinox.spi.p2.artifact.repository.AbstractArtifactRepository; |
26 |
import org.eclipse.equinox.spi.p2.artifact.repository.AbstractArtifactRepository; |
|
|
27 |
import org.eclipse.osgi.util.NLS; |
| 27 |
|
28 |
|
| 28 |
public class SimpleArtifactRepository extends AbstractArtifactRepository implements IArtifactRepository, IFileArtifactRepository { |
29 |
public class SimpleArtifactRepository extends AbstractArtifactRepository implements IArtifactRepository, IFileArtifactRepository { |
| 29 |
|
30 |
|
|
Lines 379-385
Link Here
|
| 379 |
return super.getAdapter(adapter); |
380 |
return super.getAdapter(adapter); |
| 380 |
} |
381 |
} |
| 381 |
|
382 |
|
| 382 |
private IStatus getArtifact(ArtifactRequest request, IProgressMonitor monitor) { |
383 |
IStatus getArtifact(ArtifactRequest request, IProgressMonitor monitor) { |
| 383 |
request.setSourceRepository(this); |
384 |
request.setSourceRepository(this); |
| 384 |
request.perform(monitor); |
385 |
request.perform(monitor); |
| 385 |
return request.getResult(); |
386 |
return request.getResult(); |
|
Lines 429-448
Link Here
|
| 429 |
} |
430 |
} |
| 430 |
|
431 |
|
| 431 |
public IStatus getArtifacts(IArtifactRequest[] requests, IProgressMonitor monitor) { |
432 |
public IStatus getArtifacts(IArtifactRequest[] requests, IProgressMonitor monitor) { |
| 432 |
SubMonitor subMonitor = SubMonitor.convert(monitor, requests.length); |
433 |
final MultiStatus overallStatus = new MultiStatus(Activator.ID, IStatus.OK, null, null); |
| 433 |
try { |
434 |
LinkedList requestsPending = new LinkedList(Arrays.asList(requests)); |
| 434 |
MultiStatus overallStatus = new MultiStatus(Activator.ID, IStatus.OK, null, null); |
435 |
|
| 435 |
for (int i = 0; i < requests.length; i++) { |
436 |
// TODO : Determine number of threads to use from a property |
| 436 |
if (monitor.isCanceled()) |
437 |
int numberOfJobs = Math.min(requests.length, 4); // magic number |
| 437 |
return Status.CANCEL_STATUS; |
438 |
if (numberOfJobs <= 1) { |
| 438 |
IStatus result = getArtifact((ArtifactRequest) requests[i], subMonitor.newChild(1)); |
439 |
SubMonitor subMonitor = SubMonitor.convert(monitor, requests.length); |
| 439 |
if (!result.isOK()) |
440 |
try { |
| 440 |
overallStatus.add(result); |
441 |
for (int i = 0; i < requests.length; i++) { |
|
|
442 |
if (monitor.isCanceled()) |
| 443 |
return Status.CANCEL_STATUS; |
| 444 |
IStatus result = getArtifact((ArtifactRequest) requests[i], subMonitor.newChild(1)); |
| 445 |
if (!result.isOK()) |
| 446 |
overallStatus.add(result); |
| 447 |
} |
| 448 |
} finally { |
| 449 |
subMonitor.done(); |
| 450 |
} |
| 451 |
} else { |
| 452 |
// initialize the various jobs needed to process the get artifact requests |
| 453 |
monitor.beginTask("Download " + requests.length + " artifacts", requests.length); |
| 454 |
try { |
| 455 |
SimpleArtifactRepositoryDownloadJob jobs[] = new SimpleArtifactRepositoryDownloadJob[numberOfJobs]; |
| 456 |
for (int i = 0; i < numberOfJobs; i++) { |
| 457 |
jobs[i] = new SimpleArtifactRepositoryDownloadJob("downloadjob-" + i); |
| 458 |
jobs[i].initialize(this, requestsPending, monitor, overallStatus); |
| 459 |
} |
| 460 |
// schedule the various jobs |
| 461 |
for (int i = 0; i < numberOfJobs; i++) { |
| 462 |
jobs[i].schedule(); |
| 463 |
} |
| 464 |
// wait for all the jobs to complete |
| 465 |
for (int i = 0; i < numberOfJobs; i++) { |
| 466 |
try { |
| 467 |
jobs[i].join(); |
| 468 |
} catch (InterruptedException e) { |
| 469 |
synchronized (overallStatus) { |
| 470 |
overallStatus.add(new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.download_thread_interrupted, jobs[i].getName()))); |
| 471 |
} |
| 472 |
} |
| 473 |
} |
| 474 |
} finally { |
| 475 |
monitor.done(); |
| 441 |
} |
476 |
} |
| 442 |
return (monitor.isCanceled() ? Status.CANCEL_STATUS : overallStatus); |
|
|
| 443 |
} finally { |
| 444 |
subMonitor.done(); |
| 445 |
} |
477 |
} |
|
|
478 |
return (monitor.isCanceled() ? Status.CANCEL_STATUS : overallStatus); |
| 446 |
} |
479 |
} |
| 447 |
|
480 |
|
| 448 |
public synchronized IArtifactDescriptor getCompleteArtifactDescriptor(IArtifactKey key) { |
481 |
public synchronized IArtifactDescriptor getCompleteArtifactDescriptor(IArtifactKey key) { |