/******************************************************************************* * Copyright (c) 2000, 2005 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.ui.internal.ide.registry; import java.util.ArrayList; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.Platform; import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; /** * This class is used to read marker help context ids and * resolutions from the platform registry. */ public class MarkerHelpRegistryReader extends IDERegistryReader { private MarkerHelpRegistry markerHelpRegistry; private ArrayList currentAttributeNames; private ArrayList currentAttributeValues; private static final String TAG_HELP = "markerHelp";//$NON-NLS-1$ private static final String TAG_RESOLUTION_GENERATOR = "markerResolutionGenerator";//$NON-NLS-1$ private static final String TAG_ATTRIBUTE = "attribute";//$NON-NLS-1$ private static final String ATT_TYPE = "markerType";//$NON-NLS-1$ private static final String ATT_NAME = "name";//$NON-NLS-1$ private static final String ATT_VALUE = "value";//$NON-NLS-1$ /** * Get the marker help that is defined in the plugin registry * and add it to the given marker help registry. * <p> * Warning: * The marker help registry must be passed in because this * method is called during the process of setting up the * marker help registry and at this time it has not been * safely setup with the plugin. * </p> */ public void addHelp(MarkerHelpRegistry registry) { IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry(); markerHelpRegistry = registry; readRegistry(extensionRegistry, IDEWorkbenchPlugin.IDE_WORKBENCH, IDEWorkbenchPlugin.PL_MARKER_HELP); readRegistry(extensionRegistry, IDEWorkbenchPlugin.IDE_WORKBENCH, IDEWorkbenchPlugin.PL_MARKER_RESOLUTION); } /** * Processes one configuration element or child element. */ protected boolean readElement(IConfigurationElement element) { if (element.getName().equals(TAG_HELP)) { readHelpElement(element); return true; } if (element.getName().equals(TAG_RESOLUTION_GENERATOR)) { readResolutionElement(element); return true; } if (element.getName().equals(TAG_ATTRIBUTE)) { readAttributeElement(element); return true; } return false; } /** * Processes a help configuration element. */ private void readHelpElement(IConfigurationElement element) { // read type String type = element.getAttribute(ATT_TYPE); // read attributes and values currentAttributeNames = new ArrayList(); currentAttributeValues = new ArrayList(); readElementChildren(element); String[] attributeNames = (String[]) currentAttributeNames .toArray(new String[currentAttributeNames.size()]); String[] attributeValues = (String[]) currentAttributeValues .toArray(new String[currentAttributeValues.size()]); // add query to the registry MarkerQuery query = new MarkerQuery(type, attributeNames); MarkerQueryResult result = new MarkerQueryResult(attributeValues); markerHelpRegistry.addHelpQuery(query, result, element); } /** * Processes a resolution configuration element. */ private void readResolutionElement(IConfigurationElement element) { // read type String type = element.getAttribute(ATT_TYPE); // read attributes and values currentAttributeNames = new ArrayList(); currentAttributeValues = new ArrayList(); readElementChildren(element); String[] attributeNames = (String[]) currentAttributeNames .toArray(new String[currentAttributeNames.size()]); String[] attributeValues = (String[]) currentAttributeValues .toArray(new String[currentAttributeValues.size()]); // add query to the registry MarkerQuery query = new MarkerQuery(type, attributeNames); MarkerQueryResult result = new MarkerQueryResult(attributeValues); markerHelpRegistry.addResolutionQuery(query, result, element); } /** * Processes an attribute sub element. */ private void readAttributeElement(IConfigurationElement element) { String name = element.getAttribute(ATT_NAME); String value = element.getAttribute(ATT_VALUE); if (name != null && value != null) { currentAttributeNames.add(name); currentAttributeValues.add(value); } } }