package de.ovgu.cide.languages; import java.io.InputStream; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import cide.languages.ILanguageExtension; import cide.languages.ILanguageParser; import de.ovgu.cide.CIDECorePlugin; import de.ovgu.cide.preferences.PreferenceConstants; public class LanguageExtensionProxy implements ILanguageExtension { private final IConfigurationElement configElement; public LanguageExtensionProxy(IConfigurationElement configurationElement) { this.configElement = configurationElement; String attribute = configElement.getAttribute("fileExtensions"); if (attribute == null) fileExtensions = new String[0]; else fileExtensions = attribute.split(","); name = configElement.getAttribute("name"); id = configElement.getAttribute("id"); } private final String[] fileExtensions; private final String name; private final String id; private ILanguageExtension target = null; /** * Nicht sch�n, aber n�tzlich :-) * @return */ public ILanguageExtension getTarget() { return target; } public String[] getFileExtensions() { return fileExtensions; } public ILanguageParser getParser(InputStream inputStream, String filePath) { if (target == null) loadTarget(); return target.getParser(inputStream, filePath); } // public ILanguagePrintVisitor getPrettyPrinter() { // if (target == null) // loadTarget(); // return target.getPrettyPrinter(); // } private void loadTarget() { try { target = (ILanguageExtension) configElement .createExecutableExtension("class"); assert id.equals(target.getId()) : "Id of language extension does not match its declaration"; } catch (CoreException e) { e.printStackTrace(); } } @Override public String toString() { return "Language Extension: " + name + " (" + id + ") : " + printFileExtensions(", "); } public String printFileExtensions(String separator) { if (fileExtensions.length == 0) return "-"; String result = fileExtensions[0]; for (int i = 1; i < fileExtensions.length; i++) { result += separator + fileExtensions[i]; } return result; } // public ILanguageValidator getValidator() { // if (target == null) // loadTarget(); // return target.getValidator(); // } public String getName() { return name; } public String getId() { if (target != null) return target.getId(); return id; } /** * of the loaded language extensions only a certain set is enabled in the * user preferences. this method returns whether the given extension is * enabled. * * @return */ public boolean isEnabled() { return CIDECorePlugin.getDefault().getPreferenceStore().getBoolean( PreferenceConstants.P_LANGPREFIX + getId()); } }