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