package de.ovgu.cide.features.source;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.Platform;
import de.ovgu.cide.CIDECorePlugin;
import de.ovgu.cide.features.IFeatureModel;
public class StorageProviderManager {
/**
* returns the storage provider for a given project. returns the first
* compatible one without further (user-specific) selection so far
*
* @param project
* @return
*/
public IStorageProvider getStorageProvider(IProject project,
IFeatureModel featureModel) {
for (IStorageProvider provider : getStorageProviders()) {
if (provider.isCompatible(featureModel))
return provider;
}
return null;
}
private static StorageProviderManager instance;
private StorageProviderManager() {
}
public static StorageProviderManager getInstance() {
if (instance == null)
instance = new StorageProviderManager();
return instance;
}
private List<StorageProviderProxy> storageProviders = null;
private void loadStorageProviders() {
if (storageProviders != null)
return;
storageProviders = new ArrayList<StorageProviderProxy>();
IExtension[] extensions = Platform.getExtensionRegistry()
.getExtensionPoint(CIDECorePlugin.ID, "colorStorageProvider")
.getExtensions();
for (IExtension extension : extensions) {
IConfigurationElement[] configurationElements = extension
.getConfigurationElements();
for (IConfigurationElement configurationElement : configurationElements)
if (configurationElement.getName().equals("storageProvider"))
storageProviders.add(new StorageProviderProxy(
configurationElement));
}
storageProviders
.add(new DefaultStorageProvider().new DefaultStorageProviderProxy());
}
/**
* list sorted by priority. highest priority first
*
* @return
*/
public List<StorageProviderProxy> getStorageProviders() {
loadStorageProviders();
return Collections.unmodifiableList(storageProviders);
}
}