/******************************************************************************* * 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); } } } } } }