blob: 38b1307b7cfaa5028b4e3d12bd6735a2739bd3e4 [file] [log] [blame]
/******************************************************************************
* 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 );
}
}