| /******************************************************************************* |
| * Copyright (c) 2001, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Jens Lukowski/Innoopract - initial renaming/restructuring |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.sse.ui.internal; |
| |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.IExtensionRegistry; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.core.runtime.content.IContentType; |
| import org.eclipse.core.runtime.content.IContentTypeManager; |
| import org.eclipse.wst.sse.core.internal.format.IStructuredFormatProcessor; |
| import org.eclipse.wst.sse.ui.internal.extension.RegistryReader; |
| import org.osgi.framework.Bundle; |
| |
| public class FormatProcessorsExtensionReader extends RegistryReader { |
| private static FormatProcessorsExtensionReader instance; |
| |
| public synchronized static FormatProcessorsExtensionReader getInstance() { |
| if (instance == null) { |
| instance = new FormatProcessorsExtensionReader(); |
| |
| IExtensionRegistry registry = Platform.getExtensionRegistry(); |
| instance.readRegistry(registry, "org.eclipse.wst.sse.core", "formatProcessors"); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| return instance; |
| } |
| |
| private Map map = new HashMap(); |
| // TODO: private field never read locally |
| String processorClassName; |
| |
| public IStructuredFormatProcessor getFormatProcessor(String contentTypeId) { |
| if (contentTypeId == null) |
| return null; |
| |
| IStructuredFormatProcessor formatProcessor = null; |
| if (map.containsKey(contentTypeId)) { |
| formatProcessor = (IStructuredFormatProcessor) map.get(contentTypeId); |
| } else { |
| IContentTypeManager manager = Platform.getContentTypeManager(); |
| IContentType queryContentType = manager.getContentType(contentTypeId); |
| boolean found = false; |
| for (Iterator iter = map.keySet().iterator(); iter.hasNext();) { |
| String elementContentTypeId = (String) iter.next(); |
| IContentType elementContentType = manager.getContentType(elementContentTypeId); |
| if (queryContentType.isKindOf(elementContentType)) { |
| formatProcessor = (IStructuredFormatProcessor) map.get(elementContentTypeId); |
| map.put(contentTypeId, formatProcessor); |
| found = true; |
| break; |
| } |
| } |
| |
| if (!found) |
| map.put(contentTypeId, null); |
| } |
| |
| return formatProcessor; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.wst.sse.ui.internal.extension.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement) |
| */ |
| protected boolean readElement(IConfigurationElement element) { |
| if (element.getName().equals("processor")) { //$NON-NLS-1$ |
| String contentTypeId = element.getAttribute("contentTypeId"); //$NON-NLS-1$ |
| String processorClassName = element.getAttribute("class"); //$NON-NLS-1$ |
| String pluginID = element.getDeclaringExtension().getNamespace(); |
| Bundle bundle = Platform.getBundle(pluginID); |
| |
| try { |
| IStructuredFormatProcessor processor = (IStructuredFormatProcessor)bundle.loadClass(processorClassName).newInstance(); |
| map.put(contentTypeId, processor); |
| |
| return true; |
| } catch (InstantiationException e) { |
| e.printStackTrace(); |
| } catch (IllegalAccessException e) { |
| e.printStackTrace(); |
| } catch (ClassNotFoundException e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| return false; |
| } |
| } |