View | Details | Raw Unified | Return to bug 295378
Collapse All | Expand All

(-)src/org/eclipse/equinox/internal/provisional/p2/artifact/repository/IArtifactRepository.java (-2 / +1 lines)
Lines 15-21 Link Here
15
import org.eclipse.core.runtime.IStatus;
15
import org.eclipse.core.runtime.IStatus;
16
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
16
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
17
import org.eclipse.equinox.internal.provisional.p2.metadata.IArtifactKey;
17
import org.eclipse.equinox.internal.provisional.p2.metadata.IArtifactKey;
18
import org.eclipse.equinox.internal.provisional.p2.metadata.query.IQueryable;
19
import org.eclipse.equinox.internal.provisional.p2.repository.IRepository;
18
import org.eclipse.equinox.internal.provisional.p2.repository.IRepository;
20
import org.eclipse.equinox.internal.provisional.spi.p2.artifact.repository.AbstractArtifactRepository;
19
import org.eclipse.equinox.internal.provisional.spi.p2.artifact.repository.AbstractArtifactRepository;
21
20
Lines 28-34 Link Here
28
 * </p>
27
 * </p>
29
 * @noimplement This interface is not intended to be implemented by clients.
28
 * @noimplement This interface is not intended to be implemented by clients.
30
 */
29
 */
31
public interface IArtifactRepository extends IRepository, IQueryable {
30
public interface IArtifactRepository extends IRepository {
32
31
33
	/** 
32
	/** 
34
	 * The return code to use when a client could/should retry a failed getArtifact() operation.
33
	 * The return code to use when a client could/should retry a failed getArtifact() operation.
(-)src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryComponent.java (-1 / +3 lines)
Lines 10-15 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.equinox.internal.p2.metadata.repository;
11
package org.eclipse.equinox.internal.p2.metadata.repository;
12
12
13
import org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager;
14
13
import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
15
import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
14
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepositoryManager;
16
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepositoryManager;
15
import org.eclipse.equinox.p2.core.IAgentLocation;
17
import org.eclipse.equinox.p2.core.IAgentLocation;
Lines 22-28 Link Here
22
public class MetadataRepositoryComponent implements IAgentServiceFactory {
24
public class MetadataRepositoryComponent implements IAgentServiceFactory {
23
25
24
	public Object createService(IProvisioningAgent agent) {
26
	public Object createService(IProvisioningAgent agent) {
25
		MetadataRepositoryManager manager = new MetadataRepositoryManager();
27
		AbstractRepositoryManager manager = new MetadataRepositoryManager();
26
		final IProvisioningEventBus eventBus = (IProvisioningEventBus) agent.getService(IProvisioningEventBus.SERVICE_NAME);
28
		final IProvisioningEventBus eventBus = (IProvisioningEventBus) agent.getService(IProvisioningEventBus.SERVICE_NAME);
27
		manager.setEventBus(eventBus);
29
		manager.setEventBus(eventBus);
28
		manager.setAgentLocation((IAgentLocation) agent.getService(IAgentLocation.SERVICE_NAME));
30
		manager.setAgentLocation((IAgentLocation) agent.getService(IAgentLocation.SERVICE_NAME));
(-)src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryManager.java (-49 / +1 lines)
Lines 12-27 Link Here
12
package org.eclipse.equinox.internal.p2.metadata.repository;
12
package org.eclipse.equinox.internal.p2.metadata.repository;
13
13
14
import java.net.URI;
14
import java.net.URI;
15
import java.util.*;
15
import java.util.Map;
16
import org.eclipse.core.runtime.*;
16
import org.eclipse.core.runtime.*;
17
import org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager;
17
import org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager;
18
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
18
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
19
import org.eclipse.equinox.internal.provisional.p2.metadata.query.*;
20
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository;
19
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository;
21
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepositoryManager;
20
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepositoryManager;
22
import org.eclipse.equinox.internal.provisional.p2.repository.IRepository;
21
import org.eclipse.equinox.internal.provisional.p2.repository.IRepository;
23
import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.MetadataRepositoryFactory;
22
import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.MetadataRepositoryFactory;
24
import org.eclipse.equinox.p2.metadata.query.IQuery;
25
import org.eclipse.osgi.util.NLS;
23
import org.eclipse.osgi.util.NLS;
26
24
27
/**
25
/**
Lines 82-90 Link Here
82
		return IRepository.TYPE_METADATA;
80
		return IRepository.TYPE_METADATA;
83
	}
81
	}
84
82
85
	/**
86
	 * @deprecated see {@link #loadRepository(URI, int, IProgressMonitor)}
87
	 */
88
	public IMetadataRepository loadRepository(URI location, IProgressMonitor monitor) throws ProvisionException {
83
	public IMetadataRepository loadRepository(URI location, IProgressMonitor monitor) throws ProvisionException {
89
		return loadRepository(location, 0, monitor);
84
		return loadRepository(location, 0, monitor);
90
	}
85
	}
Lines 93-141 Link Here
93
		return (IMetadataRepository) loadRepository(location, monitor, null, flags);
88
		return (IMetadataRepository) loadRepository(location, monitor, null, flags);
94
	}
89
	}
95
90
96
	/**
97
	 * Performs a query against all of the installable units of each known 
98
	 * repository, accumulating any objects that satisfy the query in the 
99
	 * provided collector.
100
	 * <p>
101
	 * Note that using this method can be quite expensive, as every known
102
	 * metadata repository will be loaded in order to query each one.  If a
103
	 * client wishes to query only certain repositories, it is better to use
104
	 * {@link #getKnownRepositories(int)} to filter the list of repositories
105
	 * loaded and then query each of the returned repositories.
106
	 * <p>
107
	 * This method is long-running; progress and cancellation are provided
108
	 * by the given progress monitor. 
109
	 * 
110
	 * @param query The query to perform against each installable unit in each known repository
111
	 * @param collector Collects the results of the query
112
	 * @param monitor a progress monitor, or <code>null</code> if progress
113
	 *    reporting is not desired
114
	 * @return The collector argument
115
	 */
116
	public Collector query(IQuery query, Collector collector, IProgressMonitor monitor) {
117
		URI[] locations = getKnownRepositories(REPOSITORIES_ALL);
118
		List queryables = new ArrayList(locations.length); // use a list since we don't know exactly how many will load
119
		SubMonitor sub = SubMonitor.convert(monitor, locations.length * 10);
120
		for (int i = 0; i < locations.length; i++) {
121
			try {
122
				if (sub.isCanceled())
123
					throw new OperationCanceledException();
124
				queryables.add(loadRepository(locations[i], sub.newChild(9)));
125
			} catch (ProvisionException e) {
126
				//ignore this repository for this query
127
			}
128
		}
129
		try {
130
			IQueryable[] queryablesArray = (IQueryable[]) queryables.toArray(new IQueryable[queryables.size()]);
131
			CompoundQueryable compoundQueryable = new CompoundQueryable(queryablesArray);
132
			compoundQueryable.query(query, collector, sub.newChild(locations.length * 1));
133
		} finally {
134
			sub.done();
135
		}
136
		return collector;
137
	}
138
139
	public IMetadataRepository refreshRepository(URI location, IProgressMonitor monitor) throws ProvisionException {
91
	public IMetadataRepository refreshRepository(URI location, IProgressMonitor monitor) throws ProvisionException {
140
		return (IMetadataRepository) basicRefreshRepository(location, monitor);
92
		return (IMetadataRepository) basicRefreshRepository(location, monitor);
141
	}
93
	}
(-)src/org/eclipse/equinox/internal/provisional/p2/metadata/repository/IMetadataRepository.java (-2 / +1 lines)
Lines 13-19 Link Here
13
import java.net.URI;
13
import java.net.URI;
14
import org.eclipse.core.runtime.IProgressMonitor;
14
import org.eclipse.core.runtime.IProgressMonitor;
15
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
15
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
16
import org.eclipse.equinox.internal.provisional.p2.metadata.query.IQueryable;
17
import org.eclipse.equinox.internal.provisional.p2.repository.IRepository;
16
import org.eclipse.equinox.internal.provisional.p2.repository.IRepository;
18
import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.AbstractMetadataRepository;
17
import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.AbstractMetadataRepository;
19
import org.eclipse.equinox.p2.metadata.query.IQuery;
18
import org.eclipse.equinox.p2.metadata.query.IQuery;
Lines 27-33 Link Here
27
 * </p>
26
 * </p>
28
 * @noimplement This interface is not intended to be implemented by clients.
27
 * @noimplement This interface is not intended to be implemented by clients.
29
 */
28
 */
30
public interface IMetadataRepository extends IRepository, IQueryable {
29
public interface IMetadataRepository extends IRepository {
31
30
32
	/** 
31
	/** 
33
	 * Add the given installable units to this repository
32
	 * Add the given installable units to this repository
(-)src/org/eclipse/equinox/internal/provisional/p2/metadata/repository/IMetadataRepositoryManager.java (-2 / +1 lines)
Lines 15-21 Link Here
15
import org.eclipse.core.runtime.IProgressMonitor;
15
import org.eclipse.core.runtime.IProgressMonitor;
16
import org.eclipse.core.runtime.IStatus;
16
import org.eclipse.core.runtime.IStatus;
17
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
17
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
18
import org.eclipse.equinox.internal.provisional.p2.metadata.query.IQueryable;
19
import org.eclipse.equinox.internal.provisional.p2.repository.IRepositoryManager;
18
import org.eclipse.equinox.internal.provisional.p2.repository.IRepositoryManager;
20
19
21
/**
20
/**
Lines 25-31 Link Here
25
 * 
24
 * 
26
 * @noimplement This interface is not intended to be implemented by clients.
25
 * @noimplement This interface is not intended to be implemented by clients.
27
 */
26
 */
28
public interface IMetadataRepositoryManager extends IRepositoryManager, IQueryable {
27
public interface IMetadataRepositoryManager extends IRepositoryManager {
29
	/**
28
	/**
30
	 * The name used for obtaining a reference to the metadata repository manager service
29
	 * The name used for obtaining a reference to the metadata repository manager service
31
	 */
30
	 */
(-)META-INF/MANIFEST.MF (+2 lines)
Lines 21-26 Link Here
21
 org.eclipse.equinox.internal.p2.repository.helpers,
21
 org.eclipse.equinox.internal.p2.repository.helpers,
22
 org.eclipse.equinox.internal.provisional.p2.core,
22
 org.eclipse.equinox.internal.provisional.p2.core,
23
 org.eclipse.equinox.internal.provisional.p2.metadata,
23
 org.eclipse.equinox.internal.provisional.p2.metadata,
24
 org.eclipse.equinox.internal.provisional.p2.metadata.query,
25
 org.eclipse.equinox.p2.metadata.query,
24
 org.eclipse.equinox.security.storage,
26
 org.eclipse.equinox.security.storage,
25
 org.eclipse.osgi.service.debug,
27
 org.eclipse.osgi.service.debug,
26
 org.eclipse.osgi.util;version="1.1.0",
28
 org.eclipse.osgi.util;version="1.1.0",
(-)src/org/eclipse/equinox/internal/p2/repository/helpers/AbstractRepositoryManager.java (+44 lines)
Lines 20-27 Link Here
20
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
20
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
21
import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
21
import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
22
import org.eclipse.equinox.internal.provisional.p2.core.eventbus.ProvisioningListener;
22
import org.eclipse.equinox.internal.provisional.p2.core.eventbus.ProvisioningListener;
23
import org.eclipse.equinox.internal.provisional.p2.metadata.query.*;
23
import org.eclipse.equinox.internal.provisional.p2.repository.*;
24
import org.eclipse.equinox.internal.provisional.p2.repository.*;
24
import org.eclipse.equinox.p2.core.IAgentLocation;
25
import org.eclipse.equinox.p2.core.IAgentLocation;
26
import org.eclipse.equinox.p2.metadata.query.IQuery;
25
import org.eclipse.equinox.security.storage.EncodingUtils;
27
import org.eclipse.equinox.security.storage.EncodingUtils;
26
import org.eclipse.osgi.util.NLS;
28
import org.eclipse.osgi.util.NLS;
27
import org.osgi.service.prefs.BackingStoreException;
29
import org.osgi.service.prefs.BackingStoreException;
Lines 1041-1044 Link Here
1041
		return suffixes;
1043
		return suffixes;
1042
	}
1044
	}
1043
1045
1046
	/**
1047
	 * Performs a query against all of the installable units of each known 
1048
	 * repository, accumulating any objects that satisfy the query in the 
1049
	 * provided collector.
1050
	 * <p>
1051
	 * Note that using this method can be quite expensive, as every known
1052
	 * metadata repository will be loaded in order to query each one.  If a
1053
	 * client wishes to query only certain repositories, it is better to use
1054
	 * {@link #getKnownRepositories(int)} to filter the list of repositories
1055
	 * loaded and then query each of the returned repositories.
1056
	 * <p>
1057
	 * This method is long-running; progress and cancellation are provided
1058
	 * by the given progress monitor. 
1059
	 * 
1060
	 * @param query The query to perform against each installable unit in each known repository
1061
	 * @param collector Collects the results of the query
1062
	 * @param monitor a progress monitor, or <code>null</code> if progress
1063
	 *    reporting is not desired
1064
	 * @return The collector argument
1065
	 */
1066
	public Collector query(IQuery query, Collector collector, IProgressMonitor monitor) {
1067
		URI[] locations = getKnownRepositories(REPOSITORIES_ALL);
1068
		List queryables = new ArrayList(locations.length); // use a list since we don't know exactly how many will load
1069
		SubMonitor sub = SubMonitor.convert(monitor, locations.length * 10);
1070
		for (int i = 0; i < locations.length; i++) {
1071
			try {
1072
				if (sub.isCanceled())
1073
					throw new OperationCanceledException();
1074
				queryables.add(loadRepository(locations[i], sub.newChild(9), null, 0));
1075
			} catch (ProvisionException e) {
1076
				//ignore this repository for this query
1077
			}
1078
		}
1079
		try {
1080
			IQueryable[] queryablesArray = (IQueryable[]) queryables.toArray(new IQueryable[queryables.size()]);
1081
			CompoundQueryable compoundQueryable = new CompoundQueryable(queryablesArray);
1082
			compoundQueryable.query(query, collector, sub.newChild(locations.length * 1));
1083
		} finally {
1084
			sub.done();
1085
		}
1086
		return collector;
1087
	}
1044
}
1088
}
(-)src/org/eclipse/equinox/internal/provisional/p2/repository/IRepository.java (-1 / +2 lines)
Lines 13-18 Link Here
13
import java.net.URI;
13
import java.net.URI;
14
import java.util.Map;
14
import java.util.Map;
15
import org.eclipse.core.runtime.IAdaptable;
15
import org.eclipse.core.runtime.IAdaptable;
16
import org.eclipse.equinox.internal.provisional.p2.metadata.query.IQueryable;
16
17
17
/**
18
/**
18
 * Base interface that defines common properties that may be provided by 
19
 * Base interface that defines common properties that may be provided by 
Lines 20-26 Link Here
20
 * 
21
 * 
21
 * @noimplement This interface is not intended to be implemented by clients.
22
 * @noimplement This interface is not intended to be implemented by clients.
22
 */
23
 */
23
public interface IRepository extends IAdaptable {
24
public interface IRepository extends IAdaptable, IQueryable {
24
	/** 
25
	/** 
25
	 * The key for a boolean property indicating that the repository
26
	 * The key for a boolean property indicating that the repository
26
	 * is a system repository.  System repositories are implementation details
27
	 * is a system repository.  System repositories are implementation details
(-)src/org/eclipse/equinox/internal/provisional/p2/repository/IRepositoryManager.java (-1 / +2 lines)
Lines 11-16 Link Here
11
package org.eclipse.equinox.internal.provisional.p2.repository;
11
package org.eclipse.equinox.internal.provisional.p2.repository;
12
12
13
import java.net.URI;
13
import java.net.URI;
14
import org.eclipse.equinox.internal.provisional.p2.metadata.query.IQueryable;
14
15
15
/**
16
/**
16
 * The common base class for metadata and artifact repository managers.
17
 * The common base class for metadata and artifact repository managers.
Lines 26-32 Link Here
26
 * 
27
 * 
27
 * @noimplement This interface is not intended to be implemented by clients.
28
 * @noimplement This interface is not intended to be implemented by clients.
28
 */
29
 */
29
public interface IRepositoryManager {
30
public interface IRepositoryManager extends IQueryable {
30
	/**
31
	/**
31
	 * Constant used to indicate that all enabled repositories are of interest.
32
	 * Constant used to indicate that all enabled repositories are of interest.
32
	 */
33
	 */

Return to bug 295378