handle singleton repository providers more intelligently part of FELIX-1355
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@991616 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/manager/AbstractEclipseRepositoryManager.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/manager/AbstractEclipseRepositoryManager.java
index 6e105b6..bfd04db 100644
--- a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/manager/AbstractEclipseRepositoryManager.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/manager/AbstractEclipseRepositoryManager.java
@@ -28,8 +28,8 @@
import org.apache.felix.sigil.common.config.IRepositoryConfig;
import org.apache.felix.sigil.common.repository.AbstractRepositoryManager;
import org.apache.felix.sigil.common.repository.IBundleRepository;
-import org.apache.felix.sigil.common.repository.IRepositoryProvider;
import org.apache.felix.sigil.eclipse.SigilCore;
+import org.apache.felix.sigil.eclipse.internal.repository.manager.EclipseRepositoryFactory.EclipseRepositoryProviderWrapper;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
@@ -108,11 +108,13 @@
else {
Properties props = config.getRepositoryConfig(name);
if (props != null) {
- String uid = config.getRepositoryDefinition(name).toString() + '#' + name;
- IBundleRepository repo = buildRepository(uid, props);
-
+ String def = config.getRepositoryDefinition(name).toString();
+ IBundleRepository repo = buildRepository(def, name, props);
if ( repo != null ) {
- list.add(repo);
+ // filter singletons but maintain order
+ if ( !list.contains(repo) ) {
+ list.add(repo);
+ }
}
}
}
@@ -123,7 +125,7 @@
* @param repo
* @return
*/
- private IBundleRepository buildRepository(String uid, Properties repo)
+ private IBundleRepository buildRepository(String def, String name, Properties repo)
{
String disabled = repo.getProperty("disabled", "false");
if (Boolean.parseBoolean(disabled.trim())) return null;
@@ -134,7 +136,7 @@
String alias = repo.getProperty(IRepositoryConfig.REPOSITORY_PROVIDER);
if (alias == null)
{
- String msg = "provider not specified for repository: " + uid;
+ String msg = "provider not specified for repository: " + def + "->" + name;
if (optional)
SigilCore.log(msg);
@@ -146,8 +148,9 @@
try
{
- IRepositoryProvider instance = EclipseRepositoryFactory.getProvider(alias);
- IBundleRepository repository = repositoryCache.getRepository(uid, repo, instance);
+ EclipseRepositoryProviderWrapper wrapper = EclipseRepositoryFactory.getProvider(alias);
+ String uid = wrapper.getType().isDynamic() ? def + "#" + name : wrapper.getType().getName();
+ IBundleRepository repository = repositoryCache.getRepository(uid, repo, wrapper);
return repository;
}
catch (Exception e)
diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/manager/EclipseRepositoryFactory.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/manager/EclipseRepositoryFactory.java
index c87af41..65f65c8 100644
--- a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/manager/EclipseRepositoryFactory.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/manager/EclipseRepositoryFactory.java
@@ -61,12 +61,16 @@
{
return new EclipseBundleRepository(delegate, type, id, properties);
}
+
+ public IRepositoryType getType() {
+ return type;
+ }
}
/**
* @param alias
* @return
*/
- public static IRepositoryProvider getProvider(String alias)
+ public static EclipseRepositoryProviderWrapper getProvider(String alias)
throws CoreException
{
IExtensionRegistry registry = Platform.getExtensionRegistry();