blob: 4be005c198fbd4e5af94532c137f70f8b35caaad [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2006 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.wsdl.ui.internal.extensions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.gef.EditPartFactory;
import org.eclipse.wst.wsdl.ui.internal.actions.IWSDLToolbarAction;
public class WSDLEditorConfiguration {
public static final String WSDLEDITORCONFIGURATIONEXTENSIONID = "org.eclipse.wst.wsdl.ui.WSDLEditorExtensionConfiguration"; //$NON-NLS-1$
public static final String INTERNALEDITORCONFIGURATION_EXTENSIONID = "org.eclipse.wst.wsdl.ui.internalEditorConfiguration"; //$NON-NLS-1$
public static final String CLASSNAME = "class"; //$NON-NLS-1$
public static final String ADAPTERFACTORY = "adapterFactory"; //$NON-NLS-1$
public static final String TOOLBARACTION = "toolbarAction"; //$NON-NLS-1$
public static final String FIGUREFACTORY = "figureFactory"; //$NON-NLS-1$
public static final String EDITPARTFACTORY = "editPartFactory"; //$NON-NLS-1$
List definedExtensionsList = null;
public WSDLEditorConfiguration()
{
}
public AdapterFactory getAdapterFactory()
{
if (definedExtensionsList == null)
{
readWSDLConfigurationRegistry();
}
if (!definedExtensionsList.isEmpty())
{
return ((WSDLEditorExtensionProperties) definedExtensionsList.get(0)).getAdapterFactory();
}
return null;
}
public EditPartFactory getEditPartFactory()
{
if (definedExtensionsList == null)
{
readWSDLConfigurationRegistry();
}
if (!definedExtensionsList.isEmpty())
{
return ((WSDLEditorExtensionProperties) definedExtensionsList.get(0)).getEditPartFactory();
}
return null;
}
// public IExtendedFigureFactory getFigureFactory()
// {
// if (definedExtensionsList == null)
// {
// readWSDLConfigurationRegistry();
// }
// if (!definedExtensionsList.isEmpty())
// {
// return ((WSDLEditorExtensionProperties) definedExtensionsList.get(0)).getFigureFactory();
// }
// return null;
// }
public List getToolbarActions()
{
if (definedExtensionsList == null)
{
readWSDLConfigurationRegistry();
}
if (!definedExtensionsList.isEmpty())
{
return ((WSDLEditorExtensionProperties) definedExtensionsList.get(0)).getActionList();
}
return Collections.EMPTY_LIST;
}
protected Object loadClass(IConfigurationElement element, String classString)
{
String pluginId = element.getDeclaringExtension().getContributor().getName();
try
{
Class theClass = Platform.getBundle(pluginId).loadClass(classString);
Object instance = theClass.newInstance();
return instance;
}
catch (Exception e)
{
}
return null;
}
public void readWSDLConfigurationRegistry()
{
definedExtensionsList = new ArrayList();
updateList(INTERNALEDITORCONFIGURATION_EXTENSIONID);
updateList(WSDLEDITORCONFIGURATIONEXTENSIONID);
}
public void updateList(String ID)
{
IConfigurationElement[] wsdlEditorExtensionList = Platform.getExtensionRegistry().getConfigurationElementsFor(ID);
boolean definedExtensionsExist = (wsdlEditorExtensionList != null && wsdlEditorExtensionList.length > 0);
definedExtensionsList = new ArrayList();
if (definedExtensionsExist)
{
for (int i = 0; i < wsdlEditorExtensionList.length; i++)
{
WSDLEditorExtensionProperties properties = new WSDLEditorExtensionProperties();
definedExtensionsList.add(properties);
IConfigurationElement element = wsdlEditorExtensionList[i];
String adapterFactoryClass = element.getAttribute(ADAPTERFACTORY);
if (adapterFactoryClass != null)
{
Object object = loadClass(element, adapterFactoryClass);
if (object instanceof AdapterFactory)
{
properties.setAdapterFactory((AdapterFactory) object);
}
}
// String figureFactoryClass = element.getAttribute(FIGUREFACTORY);
// if (figureFactoryClass != null)
// {
// Object object = loadClass(element, figureFactoryClass);
// IExtendedFigureFactory figureFactory = null;
// if (object instanceof IExtendedFigureFactory)
// {
// figureFactory = (IExtendedFigureFactory) object;
// properties.setFigureFactoryList(figureFactory);
// }
// }
String editPartFactoryClass = element.getAttribute(EDITPARTFACTORY);
if (editPartFactoryClass != null)
{
Object object = loadClass(element, editPartFactoryClass);
EditPartFactory editPartFactory = null;
if (object instanceof EditPartFactory)
{
editPartFactory = (EditPartFactory) object;
properties.setEditPartFactoryList(editPartFactory);
}
}
IConfigurationElement[] toolbarActions = element.getChildren(TOOLBARACTION);
List actionList = new ArrayList();
if (toolbarActions != null)
{
for (int j = 0; j < toolbarActions.length; j++)
{
IConfigurationElement actionElement = toolbarActions[j];
String actionClass = actionElement.getAttribute(CLASSNAME);
IWSDLToolbarAction action = null;
if (actionClass != null)
{
Object object = loadClass(actionElement, actionClass);
if (object instanceof IWSDLToolbarAction)
{
action = (IWSDLToolbarAction) object;
actionList.add(action);
}
}
}
}
properties.setActionList(actionList);
}
}
}
}