| /****************************************************************************** |
| * Copyright (c) 2005, 2007 BEA Systems, Inc. |
| * 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: |
| * Konstantin Komissarchik |
| ******************************************************************************/ |
| |
| package org.eclipse.jst.j2ee.ui.archive.internal; |
| |
| import static org.eclipse.jst.j2ee.internal.archive.ArchiveExportParticipantsExtensionPoint.PluginUtil.findExtensions; |
| import static org.eclipse.jst.j2ee.internal.archive.ArchiveExportParticipantsExtensionPoint.PluginUtil.findRequiredAttribute; |
| import static org.eclipse.jst.j2ee.internal.archive.ArchiveExportParticipantsExtensionPoint.PluginUtil.getTopLevelElements; |
| import static org.eclipse.jst.j2ee.internal.archive.ArchiveExportParticipantsExtensionPoint.PluginUtil.instantiate; |
| import static org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin.PLUGIN_ID; |
| import static org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin.log; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.jst.j2ee.internal.archive.ArchiveExportParticipantsExtensionPoint.PluginUtil.InvalidExtensionException; |
| import org.eclipse.jst.j2ee.ui.archive.IArchiveExportParticipantPanelFactory; |
| |
| /** |
| * Contains the logic for processing the <code>org.eclipse.jst.j2ee.ui.archiveExportParticipantPanels</code> |
| * extension point. |
| * |
| * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a> |
| */ |
| |
| public final class ArchiveExportParticipantPanelsExtensionPoint |
| { |
| public static final String EXTENSION_POINT_ID = "archiveExportParticipantPanels"; //$NON-NLS-1$ |
| |
| private static final String EL_PANEL_FACTORY = "panel-factory"; //$NON-NLS-1$ |
| private static final String ATTR_ARCHIVE_EXPORT_PARTICIPANT_ID = "archiveExportParticipantId"; //$NON-NLS-1$ |
| private static final String ATTR_CLASS = "class"; //$NON-NLS-1$ |
| |
| private static Map<String,PanelFactoryInfo> extensions = null; |
| |
| public static class PanelFactoryInfo |
| { |
| private String archiveExportParticipantId; |
| private String pluginId = null; |
| private String className = null; |
| |
| public String getArchiveExportExtensionId() |
| { |
| return this.archiveExportParticipantId; |
| } |
| |
| public IArchiveExportParticipantPanelFactory loadPanelFactory() |
| { |
| try |
| { |
| return instantiate( this.pluginId, this.className, |
| IArchiveExportParticipantPanelFactory.class ); |
| } |
| catch( CoreException e ) |
| { |
| log( e.getStatus() ); |
| return null; |
| } |
| } |
| } |
| |
| public static PanelFactoryInfo getExtension( final String archiveExportParticipantId ) |
| { |
| readExtensions(); |
| |
| return extensions.get( archiveExportParticipantId ); |
| } |
| |
| private static synchronized void readExtensions() |
| { |
| if( extensions != null ) |
| { |
| return; |
| } |
| |
| extensions = new HashMap<String,PanelFactoryInfo>(); |
| |
| for( IConfigurationElement element |
| : getTopLevelElements( findExtensions( PLUGIN_ID, EXTENSION_POINT_ID ) ) ) |
| { |
| if( element.getName().equals( EL_PANEL_FACTORY ) ) |
| { |
| try |
| { |
| readExtension( element ); |
| } |
| catch( InvalidExtensionException e ) |
| { |
| // Continue. The problem has been reported to the user via the log. |
| } |
| } |
| } |
| } |
| |
| private static void readExtension( final IConfigurationElement config ) |
| |
| throws InvalidExtensionException |
| |
| { |
| final PanelFactoryInfo ext = new PanelFactoryInfo(); |
| |
| ext.archiveExportParticipantId = findRequiredAttribute( config, ATTR_ARCHIVE_EXPORT_PARTICIPANT_ID ); |
| ext.pluginId = config.getContributor().getName(); |
| ext.className = findRequiredAttribute( config, ATTR_CLASS ); |
| |
| extensions.put( ext.archiveExportParticipantId, ext ); |
| } |
| |
| } |