blob: 6de3d6e1eba54b57e1edb3960374adb468ff17a1 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}
}