/******************************************************************************* | |
* Copyright (c) 2010 BSI Business Systems Integration AG. | |
* 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: | |
* BSI Business Systems Integration AG - initial API and implementation | |
******************************************************************************/ | |
package org.eclipse.scout.nls.sdk.extension; | |
import java.util.ArrayList; | |
import java.util.HashMap; | |
import java.util.List; | |
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; | |
import org.eclipse.scout.commons.StringUtility; | |
import org.eclipse.scout.nls.sdk.internal.NlsCore; | |
import org.osgi.framework.Bundle; | |
/** | |
* <h4>ExportExtensionPojnts</h4> | |
* | |
* @author Andreas Hoegger | |
* @since 1.1.0 (11.11.2010) | |
*/ | |
public class NlsExportImportExtensionPoints { | |
private static final NlsExportImportExtensionPoints instance = new NlsExportImportExtensionPoints(); | |
public static final String EXTENSION_POINT_ID_NLS_EXPORTER = "nlsExporter"; | |
public static final String EXTENSION_POINT_ID_NLS_IMPORTER = "nlsImporter"; | |
private HashMap<String/*extensionPointID*/, WizardExtension[] /*extensions*/> m_extensions; | |
private NlsExportImportExtensionPoints() { | |
m_extensions = new HashMap<String, WizardExtension[]>(); | |
init(); | |
} | |
private void init() { | |
m_extensions.put(EXTENSION_POINT_ID_NLS_EXPORTER, loadExtensionPoints(EXTENSION_POINT_ID_NLS_EXPORTER)); | |
m_extensions.put(EXTENSION_POINT_ID_NLS_IMPORTER, loadExtensionPoints(EXTENSION_POINT_ID_NLS_IMPORTER)); | |
} | |
@SuppressWarnings("unchecked") | |
private WizardExtension[] loadExtensionPoints(String id) { | |
IExtensionRegistry reg = Platform.getExtensionRegistry(); | |
// export | |
List<WizardExtension> wizardExtensions = new ArrayList<WizardExtension>(); | |
IExtensionPoint xp = reg.getExtensionPoint(NlsCore.PLUGIN_ID, id); | |
IExtension[] extensions = xp.getExtensions(); | |
for (IExtension extension : extensions) { | |
IConfigurationElement[] elements = extension.getConfigurationElements(); | |
for (IConfigurationElement element : elements) { | |
try { | |
WizardExtension wizardExt = new WizardExtension(); | |
String attWizard = element.getAttribute("wizard"); | |
if (!StringUtility.isNullOrEmpty(attWizard)) { | |
Bundle contributerBundle = Platform.getBundle(extension.getNamespaceIdentifier()); | |
Class wizard = contributerBundle.loadClass(attWizard); | |
if (AbstractImportExportWizard.class.isAssignableFrom(wizard)) { | |
wizardExt.setWizard(wizard); | |
} | |
else { | |
NlsCore.logError("extension '" + extension.getExtensionPointUniqueIdentifier() + "' has a wizard not instance of '" + AbstractImportExportWizard.class.getName() + "'. Ignoring extension."); | |
continue; | |
} | |
} | |
else { | |
continue; | |
} | |
String attName = element.getAttribute("name"); | |
if (!StringUtility.isNullOrEmpty(attName)) { | |
wizardExt.setName(attName); | |
} | |
else { | |
continue; | |
} | |
wizardExtensions.add(wizardExt); | |
} | |
catch (ClassNotFoundException e) { | |
NlsCore.logError("could not create an executable extension of point '" + extension.getExtensionPointUniqueIdentifier() + "'."); | |
} | |
} | |
} | |
return wizardExtensions.toArray(new WizardExtension[wizardExtensions.size()]); | |
} | |
public static WizardExtension[] getExtensions(String extensionPointId) { | |
return instance.getExtensionsImpl(extensionPointId); | |
} | |
private WizardExtension[] getExtensionsImpl(String extensionPointId) { | |
return m_extensions.get(extensionPointId); | |
} | |
} |