/******************************************************************************* * Copyright (c) 2008 Ralf Ebert * 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: * Ralf Ebert - initial API and implementation *******************************************************************************/ package com.swtxml.extensions; 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.Platform; import com.swtxml.definition.INamespaceDefinition; import com.swtxml.definition.INamespaceResolver; import com.swtxml.util.parser.ParseException; /** * @author Ralf Ebert <info@ralfebert.de> */ public class ExtensionsNamespaceResolver implements INamespaceResolver { private static final String NAMESPACE_EXTENSION_POINT_ID = "com.swtxml.namespaces"; public INamespaceDefinition resolveNamespace(String uri) { IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint( NAMESPACE_EXTENSION_POINT_ID); for (IExtension extension : extensionPoint.getExtensions()) { for (IConfigurationElement configurationElement : extension.getConfigurationElements()) { if (!"namespaceResolver".equals(configurationElement.getName())) { throw new ParseException("Invalid " + NAMESPACE_EXTENSION_POINT_ID + " element: " + configurationElement); } INamespaceResolver resolver = getNamespaceResolver(configurationElement); INamespaceDefinition namespace = resolver.resolveNamespace(uri); if (namespace != null) { return namespace; } } } return null; } private INamespaceResolver getNamespaceResolver(IConfigurationElement configurationElement) { try { return (INamespaceResolver) configurationElement.createExecutableExtension("class"); } catch (CoreException e) { throw new ParseException(e.getMessage(), e); } } }