blob: 78badf8e51394d117c4f05b00710617a60263a9f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2004 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;
}
}