package org.eclipse.team.internal.core;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.eclipse.team.core.Team;
public class PluginStringMappings {
private final String fExtensionID;
private final String fAttributeName;
private SortedMap<String, Integer> fMappings;
public PluginStringMappings(String extensionID, String stringAttributeName) {
fExtensionID= extensionID;
fAttributeName= stringAttributeName;
}
private SortedMap<String, Integer> loadPluginPatterns() {
final SortedMap<String, Integer> result= new TreeMap<>();
final TeamPlugin plugin = TeamPlugin.getPlugin();
if (plugin == null)
return result;
final IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(TeamPlugin.ID, fExtensionID);
if (extension == null)
return result;
final IExtension[] extensions = extension.getExtensions();
for (IExtension e : extensions) {
IConfigurationElement[] configElements = e.getConfigurationElements();
for (IConfigurationElement configElement : configElements) {
final String ext = configElement.getAttribute(fAttributeName);
final String type = configElement.getAttribute("type");
if (ext == null || type == null)
continue;
if (type.equals("text")) {
result.put(ext, Integer.valueOf(Team.TEXT));
} else if (type.equals("binary")) {
result.put(ext, Integer.valueOf(Team.BINARY));
}
}
}
return result;
}
public Map<String, Integer> referenceMap() {
if (fMappings == null) {
fMappings= loadPluginPatterns();
}
return fMappings;
}
public int getType(String filename) {
final Map<String, Integer> mappings= referenceMap();
return mappings.containsKey(filename) ? mappings.get(filename).intValue() : Team.UNKNOWN;
}
}