package au.com.langdale.cimtoole.registries; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import java.util.Vector; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.Platform; public class ModelParserRegistryImpl implements ModelParserRegistry { Map<String, ModelParser> parsers; Map<String, Collection<ModelParser>> parsersForExtension; ModelParserRegistryImpl(){ parsers = new TreeMap<String, ModelParser>(); parsersForExtension = new HashMap<String, Collection<ModelParser>>(); IExtensionRegistry registry = Platform.getExtensionRegistry(); IExtensionPoint extPoint = registry.getExtensionPoint(ModelParserRegistry.PARSER_REGISTRY_ID); IExtension[] pExts = extPoint.getExtensions(); for (IExtension p : pExts){ for (IConfigurationElement el: p.getConfigurationElements()){ try { Object obj = el.createExecutableExtension("class"); String[] extensions = el.getAttribute("fileExt").split("\\,"); String id = el.getAttribute("id"); if (obj instanceof ModelParser){ ModelParser parser = (ModelParser)obj; parsers.put(id, parser); for (String s : extensions){ s = s.trim(); if (!parsersForExtension.containsKey(s)) parsersForExtension.put(s, new Vector<ModelParser>()); parsersForExtension.get(s).add(parser); } } } catch (CoreException e) { e.printStackTrace(); } } } } public ModelParser[] getParsers() { return parsers.values().toArray(new ModelParser[parsers.values().size()]); } public ModelParser[] getParsersForExtension(String extension) { if (parsersForExtension.containsKey(extension)) return parsersForExtension.get(extension).toArray( new ModelParser[parsersForExtension.get(extension).size()]); return new ModelParser[0]; } public String[] getExtensions() { return parsersForExtension.keySet().toArray(new String[parsers.keySet().size()]); } public boolean hasParserForExtension(String extension) { return parsersForExtension.containsKey(extension); } }