Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSusan Franklin2010-03-09 01:41:20 +0000
committerSusan Franklin2010-03-09 01:41:20 +0000
commitb6f54c6de86ecb2811d2d105dfeb3d22fc298b5a (patch)
tree6dbe2cffc1d2184a800815536589486ea83c9c9d /bundles/org.eclipse.equinox.p2.director
parent15cae78a65c657234d79fa501494ae91c86c4544 (diff)
downloadrt.equinox.p2-b6f54c6de86ecb2811d2d105dfeb3d22fc298b5a.tar.gz
rt.equinox.p2-b6f54c6de86ecb2811d2d105dfeb3d22fc298b5a.tar.xz
rt.equinox.p2-b6f54c6de86ecb2811d2d105dfeb3d22fc298b5a.zip
Bug 229183 - [director] [api] ProvisioningContex does not handle repository in a consistent way
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.director')
-rw-r--r--bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PlannerComponent.java8
-rw-r--r--bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java104
2 files changed, 37 insertions, 75 deletions
diff --git a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PlannerComponent.java b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PlannerComponent.java
index 0a3079c4b..515e795fa 100644
--- a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PlannerComponent.java
+++ b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/PlannerComponent.java
@@ -12,9 +12,6 @@ package org.eclipse.equinox.internal.p2.director;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.core.spi.IAgentServiceFactory;
-import org.eclipse.equinox.p2.engine.IEngine;
-import org.eclipse.equinox.p2.engine.IProfileRegistry;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
/**
* A service factory that provides planner implementations
@@ -22,9 +19,6 @@ import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
public class PlannerComponent implements IAgentServiceFactory {
public Object createService(IProvisioningAgent agent) {
- IEngine engine = (IEngine) agent.getService(IEngine.SERVICE_NAME);
- IProfileRegistry profileRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
- IMetadataRepositoryManager repoManager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
- return new SimplePlanner(engine, profileRegistry, repoManager);
+ return new SimplePlanner(agent);
}
}
diff --git a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
index bffea53c7..ccf27db7b 100644
--- a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
+++ b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
@@ -11,11 +11,6 @@
******************************************************************************/
package org.eclipse.equinox.internal.p2.director;
-import org.eclipse.equinox.p2.planner.ProfileInclusionRules;
-
-import org.eclipse.equinox.p2.metadata.MetadataFactory;
-import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
-
import java.lang.reflect.Method;
import java.net.URI;
import java.util.*;
@@ -26,16 +21,12 @@ import org.eclipse.equinox.internal.p2.metadata.query.UpdateQuery;
import org.eclipse.equinox.internal.p2.rollback.FormerState;
import org.eclipse.equinox.internal.provisional.p2.director.*;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
-import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.engine.*;
import org.eclipse.equinox.p2.engine.query.IUProfilePropertyQuery;
import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.planner.IPlanner;
-import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.planner.*;
import org.eclipse.equinox.p2.query.*;
-import org.eclipse.equinox.p2.repository.IRepositoryManager;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
import org.eclipse.osgi.util.NLS;
public class SimplePlanner implements IPlanner {
@@ -47,8 +38,7 @@ public class SimplePlanner implements IPlanner {
private static final String ID_IU_FOR_ACTIONS = "org.eclipse.equinox.p2.engine.actions.root"; //$NON-NLS-1$
private static final String EXPLANATION = "org.eclipse.equinox.p2.director.explain"; //$NON-NLS-1$
private static final String CONSIDER_METAREQUIREMENTS = "org.eclipse.equinox.p2.planner.resolveMetaRequirements"; //$NON-NLS-1$
-
- private final IMetadataRepositoryManager repoManager;
+ private final IProvisioningAgent agent;
private final IProfileRegistry profileRegistry;
private final IEngine engine;
@@ -194,7 +184,7 @@ public class SimplePlanner implements IPlanner {
sub.setTaskName(Messages.Director_Task_Resolving_Dependencies);
try {
IProfileChangeRequest profileChangeRequest = FormerState.generateProfileDeltaChangeRequest(currentProfile, targetProfile);
- ProvisioningContext context = new ProvisioningContext(new URI[0]);
+ ProvisioningContext context = new ProvisioningContext(agent);
if (context.getProperty(INCLUDE_PROFILE_IUS) == null)
context.setProperty(INCLUDE_PROFILE_IUS, Boolean.FALSE.toString());
context.setExtraInstallableUnits(Arrays.asList(targetProfile.available(QueryUtil.createIUAnyQuery(), null).toArray(IInstallableUnit.class)));
@@ -224,7 +214,7 @@ public class SimplePlanner implements IPlanner {
return result;
}
- private IInstallableUnit[] gatherAvailableInstallableUnits(IInstallableUnit[] additionalSource, URI[] repositories, ProvisioningContext context, IProgressMonitor monitor) {
+ private IInstallableUnit[] gatherAvailableInstallableUnits(IInstallableUnit[] additionalSource, ProvisioningContext context, IProgressMonitor monitor) {
Map<String, IInstallableUnit> resultsMap = new HashMap<String, IInstallableUnit>();
if (additionalSource != null) {
for (int i = 0; i < additionalSource.length; i++) {
@@ -232,34 +222,23 @@ public class SimplePlanner implements IPlanner {
resultsMap.put(key, additionalSource[i]);
}
}
- if (context != null) {
+ if (context == null) {
+ context = new ProvisioningContext(agent);
+ } else {
for (IInstallableUnit iu : context.getExtraInstallableUnits()) {
String key = iu.getId() + '_' + iu.getVersion().toString();
resultsMap.put(key, iu);
}
}
-
- if (repositories == null)
- repositories = repoManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
-
- SubMonitor sub = SubMonitor.convert(monitor, repositories.length * 200);
- for (int i = 0; i < repositories.length; i++) {
- try {
- if (sub.isCanceled())
- throw new OperationCanceledException();
-
- IMetadataRepository repository = repoManager.loadRepository(repositories[i], sub.newChild(100));
- IQueryResult<IInstallableUnit> matches = repository.query(QueryUtil.createIUQuery(null, VersionRange.emptyRange), sub.newChild(100));
- for (Iterator<IInstallableUnit> it = matches.iterator(); it.hasNext();) {
- IInstallableUnit iu = it.next();
- String key = iu.getId() + "_" + iu.getVersion().toString(); //$NON-NLS-1$
- IInstallableUnit currentIU = resultsMap.get(key);
- if (currentIU == null || hasHigherFidelity(iu, currentIU))
- resultsMap.put(key, iu);
- }
- } catch (ProvisionException e) {
- //skip unreadable repositories
- }
+ SubMonitor sub = SubMonitor.convert(monitor, 1000);
+ IQueryable<IInstallableUnit> queryable = context.getMetadata(sub.newChild(500));
+ IQueryResult<IInstallableUnit> matches = queryable.query(QueryUtil.createIUQuery(null, VersionRange.emptyRange), sub.newChild(500));
+ for (Iterator<IInstallableUnit> it = matches.iterator(); it.hasNext();) {
+ IInstallableUnit iu = it.next();
+ String key = iu.getId() + "_" + iu.getVersion().toString(); //$NON-NLS-1$
+ IInstallableUnit currentIU = resultsMap.get(key);
+ if (currentIU == null || hasHigherFidelity(iu, currentIU))
+ resultsMap.put(key, iu);
}
sub.done();
Collection<IInstallableUnit> results = resultsMap.values();
@@ -272,13 +251,13 @@ public class SimplePlanner implements IPlanner {
return false;
}
- public SimplePlanner(IEngine engine, IProfileRegistry profileRegistry, IMetadataRepositoryManager repoManager) {
+ public SimplePlanner(IProvisioningAgent agent) {
+ Assert.isNotNull(agent);
+ this.agent = agent;
+ this.engine = (IEngine) agent.getService(IEngine.SERVICE_NAME);
+ this.profileRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
Assert.isNotNull(engine);
Assert.isNotNull(profileRegistry);
- Assert.isNotNull(repoManager);
- this.engine = engine;
- this.profileRegistry = profileRegistry;
- this.repoManager = repoManager;
}
private boolean satisfyMetaRequirements(Map<String, String> props) {
@@ -302,7 +281,6 @@ public class SimplePlanner implements IPlanner {
Object[] updatedPlan = updatePlannerInfo(profileChangeRequest, context);
- URI[] metadataRepositories = (context != null) ? context.getMetadataRepositories() : null;
Dictionary<String, String> newSelectionContext = createSelectionContext(profileChangeRequest.getProfileProperties());
List<IInstallableUnit> extraIUs = new ArrayList<IInstallableUnit>(profileChangeRequest.getAdditions());
@@ -313,7 +291,7 @@ public class SimplePlanner implements IPlanner {
extraIUs.add(itor.next());
}
- IInstallableUnit[] availableIUs = gatherAvailableInstallableUnits(extraIUs.toArray(new IInstallableUnit[extraIUs.size()]), metadataRepositories, context, sub.newChild(ExpandWork / 4));
+ IInstallableUnit[] availableIUs = gatherAvailableInstallableUnits(extraIUs.toArray(new IInstallableUnit[extraIUs.size()]), context, sub.newChild(ExpandWork / 4));
Slicer slicer = new Slicer(new QueryableArray(availableIUs), newSelectionContext, satisfyMetaRequirements(profileChangeRequest.getProfileProperties()));
IQueryable<IInstallableUnit> slice = slicer.slice(new IInstallableUnit[] {(IInstallableUnit) updatedPlan[0]}, sub.newChild(ExpandWork / 4));
@@ -545,7 +523,8 @@ public class SimplePlanner implements IPlanner {
agentRequest.remove(previousMetaRequirementIU);
agentRequest.add(metaRequirementIU);
- ProvisioningContext agentCtx = new ProvisioningContext(new URI[0]);
+ ProvisioningContext agentCtx = new ProvisioningContext(agent);
+ agentCtx.setMetadataRepositories(new URI[0]);
ArrayList<IInstallableUnit> extraIUs = new ArrayList<IInstallableUnit>(unattachedState);
agentCtx.setExtraInstallableUnits(extraIUs);
Object agentSolution = getSolutionFor(agentRequest, agentCtx, monitor.newChild(3));
@@ -604,7 +583,8 @@ public class SimplePlanner implements IPlanner {
}
private ProvisioningContext createNoRepoContext(ProfileChangeRequest request) {
- ProvisioningContext noRepoContext = new ProvisioningContext(new URI[0]);
+ ProvisioningContext noRepoContext = new ProvisioningContext(agent);
+ noRepoContext.setMetadataRepositories(new URI[0]);
noRepoContext.setArtifactRepositories(new URI[0]);
noRepoContext.setProperty(INCLUDE_PROFILE_IUS, Boolean.FALSE.toString());
noRepoContext.setExtraInstallableUnits(new ArrayList<IInstallableUnit>(request.getProfile().query(QueryUtil.createIUAnyQuery(), new NullProgressMonitor()).toUnmodifiableSet()));
@@ -735,27 +715,15 @@ public class SimplePlanner implements IPlanner {
public IQueryResult<IInstallableUnit> updatesFor(IInstallableUnit toUpdate, ProvisioningContext context, IProgressMonitor monitor) {
Map<String, IInstallableUnit> resultsMap = new HashMap<String, IInstallableUnit>();
- URI[] repositories = context.getMetadataRepositories();
- if (repositories == null)
- repositories = repoManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
-
- SubMonitor sub = SubMonitor.convert(monitor, repositories.length * 200);
- for (int i = 0; i < repositories.length; i++) {
- try {
- if (sub.isCanceled())
- throw new OperationCanceledException();
- IMetadataRepository repository = repoManager.loadRepository(repositories[i], sub.newChild(100));
- IQueryResult<IInstallableUnit> matches = repository.query(new UpdateQuery(toUpdate), sub.newChild(100));
- for (Iterator<IInstallableUnit> it = matches.iterator(); it.hasNext();) {
- IInstallableUnit iu = it.next();
- String key = iu.getId() + "_" + iu.getVersion().toString(); //$NON-NLS-1$
- IInstallableUnit currentIU = resultsMap.get(key);
- if (currentIU == null || hasHigherFidelity(iu, currentIU))
- resultsMap.put(key, iu);
- }
- } catch (ProvisionException e) {
- //skip unreadable repositories
- }
+ SubMonitor sub = SubMonitor.convert(monitor, 1000);
+ IQueryable<IInstallableUnit> queryable = context.getMetadata(sub.newChild(500));
+ IQueryResult<IInstallableUnit> matches = queryable.query(new UpdateQuery(toUpdate), sub.newChild(500));
+ for (Iterator<IInstallableUnit> it = matches.iterator(); it.hasNext();) {
+ IInstallableUnit iu = it.next();
+ String key = iu.getId() + "_" + iu.getVersion().toString(); //$NON-NLS-1$
+ IInstallableUnit currentIU = resultsMap.get(key);
+ if (currentIU == null || hasHigherFidelity(iu, currentIU))
+ resultsMap.put(key, iu);
}
sub.done();
return new CollectionResult<IInstallableUnit>(resultsMap.values());

Back to the top