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