blob: fc6154923e578cc9f260dcefee0d2f9b86ecb01d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2010 QNX Software Systems 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:
* QNX Software Systems - Initial API and implementation
* Andy Jin - Hardware debugging UI improvements, bug 229946
* Bruce Griffith, Sage Electronic Engineering, LLC - bug 305943
* - API generalization to become transport-independent (allow
* connections via serial ports and pipes).
*******************************************************************************/
package org.eclipse.cdt.debug.gdbjtag.core.jtagdevice;
import java.util.ArrayList;
import org.eclipse.cdt.debug.gdbjtag.core.Activator;
import org.eclipse.cdt.debug.gdbjtag.core.IGDBJtagConstants;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugPlugin;
public class GDBJtagDeviceContributionFactory {
private static final String EXTENSION_POINT_NAME = "JTagDevice"; //$NON-NLS-1$
private static final String MAIN_ELEMENT = "device"; //$NON-NLS-1$
private static GDBJtagDeviceContributionFactory instance;
protected ArrayList<GDBJtagDeviceContribution> contributions;
private GDBJtagDeviceContributionFactory() {
contributions = new ArrayList<GDBJtagDeviceContribution>();
loadSubtypeContributions();
}
public GDBJtagDeviceContribution[] getGDBJtagDeviceContribution() {
return contributions.toArray(
new GDBJtagDeviceContribution[contributions.size()]);
}
private void loadSubtypeContributions() {
IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(
Activator.getUniqueIdentifier(), EXTENSION_POINT_NAME);
if (ep == null)
return;
IConfigurationElement[] elements = ep.getConfigurationElements();
for (int i = 0; i < elements.length; i++) {
IConfigurationElement configurationElement = elements[i];
if (configurationElement.getName().equals(MAIN_ELEMENT)) {
String id = getRequired(configurationElement, "id"); //$NON-NLS-1$
String name = getRequired(configurationElement, "name"); //$NON-NLS-1$
String className = getRequired(configurationElement, "class"); //$NON-NLS-1$
String connection = getOptional(configurationElement, "default_connection", IGDBJtagConstants.DEFAULT_CONNECTION); //$NON-NLS-1$
GDBJtagDeviceContribution adapter = new GDBJtagDeviceContribution();
adapter.setDeviceId(id);
adapter.setDeviceName(name);
adapter.setDeviceClassName(className);
adapter.setDeviceDefaultConnection(connection);
adapter.setDeviceClassBundleName(configurationElement.getContributor().getName());
addContribution(adapter);
}
}
}
public void addContribution(GDBJtagDeviceContribution contribution) {
contributions.add(contribution);
}
public static GDBJtagDeviceContributionFactory getInstance() {
if (instance == null) {
instance = new GDBJtagDeviceContributionFactory();
}
return instance;
}
private static String getRequired(IConfigurationElement configurationElement, String name) {
String elementValue = configurationElement.getAttribute(name);
if (elementValue == null)
Activator.log(new Status(IStatus.ERROR, Activator.getUniqueIdentifier(),
DebugPlugin.INTERNAL_ERROR, "Extension "
+ configurationElement.getDeclaringExtension().getUniqueIdentifier()
+ " missing required attribute: " + name, null));
return elementValue;
}
private static String getOptional(IConfigurationElement configurationElement, String name, String defaultValue) {
String elementValue = configurationElement.getAttribute(name);
return (elementValue != null) ? elementValue : defaultValue;
}
}