blob: 89e5800fdd09f80c727814c63270ff7ef42d57e1 [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.xsd.ui.internal.editor;
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.gef.EditPartFactory;
import org.eclipse.wst.xsd.ui.internal.actions.IXSDToolbarAction;
import org.eclipse.wst.xsd.ui.internal.adapters.XSDAdapterFactory;
import org.eclipse.wst.xsd.ui.internal.design.figures.IExtendedFigureFactory;
public class XSDEditorConfiguration
{
public static final String XSDEDITORCONFIGURATIONEXTENSIONID = "org.eclipse.wst.xsd.ui.XSDEditorExtensionConfiguration"; //$NON-NLS-1$
public static final String INTERNALEDITORCONFIGURATION_EXTENSIONID = "org.eclipse.wst.xsd.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 XSDEditorConfiguration()
{
}
public XSDAdapterFactory getAdapterFactory()
{
if (definedExtensionsList == null)
{
readXSDConfigurationRegistry();
}
if (!definedExtensionsList.isEmpty())
{
return ((XSDEditorExtensionProperties) definedExtensionsList.get(0)).getAdapterFactory();
}
return null;
}
public EditPartFactory getEditPartFactory()
{
if (definedExtensionsList == null)
{
readXSDConfigurationRegistry();
}
if (!definedExtensionsList.isEmpty())
{
return ((XSDEditorExtensionProperties) definedExtensionsList.get(0)).getEditPartFactory();
}
return null;
}
public IExtendedFigureFactory getFigureFactory()
{
if (definedExtensionsList == null)
{
readXSDConfigurationRegistry();
}
if (!definedExtensionsList.isEmpty())
{
return ((XSDEditorExtensionProperties) definedExtensionsList.get(0)).getFigureFactory();
}
return null;
}
public List getToolbarActions()
{
if (definedExtensionsList == null)
{
readXSDConfigurationRegistry();
}
if (!definedExtensionsList.isEmpty())
{
return ((XSDEditorExtensionProperties) 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 readXSDConfigurationRegistry()
{
definedExtensionsList = new ArrayList();
updateList(INTERNALEDITORCONFIGURATION_EXTENSIONID);
updateList(XSDEDITORCONFIGURATIONEXTENSIONID);
}
private void updateList(String ID)
{
IConfigurationElement[] xsdEditorExtensionList = Platform.getExtensionRegistry().getConfigurationElementsFor(ID);
boolean definedExtensionsExist = (xsdEditorExtensionList != null && xsdEditorExtensionList.length > 0);
if (definedExtensionsExist)
{
for (int i = 0; i < xsdEditorExtensionList.length; i++)
{
XSDEditorExtensionProperties properties = new XSDEditorExtensionProperties();
definedExtensionsList.add(properties);
IConfigurationElement element = xsdEditorExtensionList[i];
String adapterFactoryClass = element.getAttribute(ADAPTERFACTORY);
if (adapterFactoryClass != null)
{
Object object = loadClass(element, adapterFactoryClass);
XSDAdapterFactory adapterFactory = null;
if (object instanceof XSDAdapterFactory)
{
adapterFactory = (XSDAdapterFactory) object;
properties.setAdapterFactory(adapterFactory);
}
}
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);
}
}
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);
IXSDToolbarAction action = null;
if (actionClass != null)
{
Object object = loadClass(actionElement, actionClass);
if (object instanceof IXSDToolbarAction)
{
action = (IXSDToolbarAction) object;
actionList.add(action);
}
}
}
}
properties.setActionList(actionList);
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);
}
}
}
}
}
}