| /******************************************************************************* |
| * 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((Class<? extends AbstractImportExportWizard>) 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); |
| } |
| } |