blob: 7c1d6d5fd21d258b00068c46d326bdc1e475ca60 [file] [log] [blame]
/*
* Licensed Material - Property of IBM
* (C) Copyright IBM Corp. 2001, 2005 - All Rights Reserved.
* US Government Users Restricted Rights - Use, duplication or disclosure
* restricted by GSA ADP Schedule Contract with IBM Corp.
*/
package org.eclipse.jst.j2ee.model;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.IProjectFacet;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
public class ModelProviderManager {
public static class ModelProviderKey {
protected IProjectFacetVersion version;
protected int priority;
public ModelProviderKey() {
super();
}
}
private static final int DEFAULT_PRIORITY = 100;
private static HashMap<ModelProviderKey, IModelProviderFactory> providers;
public static IModelProvider getModelProvider(IProject project, IProjectFacetVersion vers) {
IModelProviderFactory factory = getProvider(vers);
return factory.create(project);
}
public static void registerProvider(IModelProviderFactory provider, IProjectFacetVersion v, String priority) {
int newPriority = (priority != null) ? Integer.getInteger(priority).intValue() : DEFAULT_PRIORITY;
int currentPriority = getProviderPriority(v);
if (newPriority <= currentPriority) {
ModelProviderKey key = createProviderKey(v, newPriority);
providers.put(key, provider);
}
}
private static IModelProviderFactory getProvider(IProjectFacetVersion v) {
Set<ModelProviderKey> keys = getProviders().keySet();
for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
ModelProviderKey key = (ModelProviderKey) iterator.next();
if (key.version.equals(v))
return providers.get(key);
}
return null;
}
private static int getProviderPriority(IProjectFacetVersion v) {
Set<ModelProviderKey> keys = providers.keySet();
for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
ModelProviderKey key = (ModelProviderKey) iterator.next();
if (key.version.equals(v))
return key.priority;
}
return DEFAULT_PRIORITY;
}
private static J2EEModelProviderRegistry registry;
private static void initProviders() {
providers = new HashMap();
registry = J2EEModelProviderRegistry.getInstance();
}
private static ModelProviderKey createProviderKey(IProjectFacetVersion fv, int priority) {
ModelProviderKey key = new ModelProviderKey();
key.priority = priority;
key.version = fv;
return key;
}
public static IModelProvider getModelProvider(IProject proj) {
IProjectFacetVersion facetVersion = getDefaultFacet(proj);
return getModelProvider(proj, facetVersion);
}
private static IProjectFacetVersion getDefaultFacet(IProject proj) {
String type = J2EEProjectUtilities.getJ2EEProjectType(proj);
IProjectFacet facet = ProjectFacetsManager.getProjectFacet(type);
IFacetedProject fp = null;
try {
fp = ProjectFacetsManager.create(proj);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (fp != null && facet != null) {
return fp.getInstalledVersion(facet);
}
return null;
}
private static HashMap<ModelProviderKey, IModelProviderFactory> getProviders() {
if (registry == null)
initProviders();
return providers;
}
}