package org.codefaces.ui.internal.codeLanguages;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
public class CodeLanguages {
private Collection<CodeLanguage> langs;
public CodeLanguages() {
langs = retrieveLangsFromExtensionPoints();
}
public CodeLanguage parseFileName(String fileName) {
for (CodeLanguage lang : langs) {
if (lang.matchesFileName(fileName)) {
return lang;
}
}
return CodeLanguage.PLAIN_TEXT;
}
public Collection<CodeLanguage> getCodeLanguages() {
return Collections.unmodifiableCollection(langs);
}
protected Collection<CodeLanguage> retrieveLangsFromExtensionPoints() {
Set<CodeLanguage> langs = new HashSet<CodeLanguage>();
IConfigurationElement[] extensionPoints = Platform
.getExtensionRegistry().getConfigurationElementsFor(
"org.codefaces.ui", "codeLanguages");
for (IConfigurationElement extensionPoint : extensionPoints) {
String id = extensionPoint.getAttribute("id");
String name = extensionPoint.getAttribute("name");
String filePatterns = extensionPoint.getAttribute("filePatterns");
String resource = extensionPoint.getAttribute("resource");
CodeLanguage lang = new CodeLanguage(id, name, resource,
splitFilePatterns(filePatterns));
langs.add(lang);
}
return langs;
}
protected String[] splitFilePatterns(String filePatterns) {
List<String> patterns = new ArrayList<String>();
for (String pattern : filePatterns.split(",")) {
patterns.add(pattern.trim());
}
return patterns.toArray(new String[patterns.size()]);
}
}