/******************************************************************************* * Copyright (c) 2004, 2006 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 *******************************************************************************/ package org.eclipse.cdt.debug.mi.core.command.factories; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.cdt.debug.mi.core.MIPlugin; import org.eclipse.cdt.debug.mi.core.command.CommandFactory; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; /** * Manages command factories. */ public class CommandFactoryManager { private List fDescriptors = null; public CommandFactoryDescriptor[] getDescriptors() { List factories = getDescriptorList(); return (CommandFactoryDescriptor[])factories.toArray( new CommandFactoryDescriptor[factories.size()] ); } public CommandFactoryDescriptor getDefaultDescriptor( String debuggerID ) { // TODO: temporary CommandFactoryDescriptor[] descriptors = getDescriptors( debuggerID ); return descriptors[0]; } public CommandFactoryDescriptor[] getDescriptors( String debuggerID ) { String platform = Platform.getOS(); List all = getDescriptorList(); ArrayList list = new ArrayList( all.size() ); Iterator it = all.iterator(); while( it.hasNext() ) { CommandFactoryDescriptor desc = (CommandFactoryDescriptor)it.next(); if ( desc.getDebuggerIdentifier().equals( debuggerID ) && desc.supportsPlatform( platform ) ) { list.add( desc ); } } return (CommandFactoryDescriptor[])list.toArray( new CommandFactoryDescriptor[list.size()] ); } public CommandFactory getCommandFactory( String factoryID ) throws CoreException { List all = getDescriptorList(); Iterator it = all.iterator(); while( it.hasNext() ) { CommandFactoryDescriptor desc = (CommandFactoryDescriptor)it.next(); if ( desc.getIdentifier().equals( factoryID ) ) { return desc.getCommandFactory(); } } return null; } private List getDescriptorList() { if ( fDescriptors == null ) initializeDescriptorList(); return fDescriptors; } private synchronized void initializeDescriptorList() { if ( fDescriptors == null ) { IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint( MIPlugin.getUniqueIdentifier(), MIPlugin.EXTENSION_POINT_COMMAND_FACTORIES ); IConfigurationElement[] infos = extensionPoint.getConfigurationElements(); fDescriptors = new ArrayList( infos.length ); for( int i = 0; i < infos.length; i++ ) { IConfigurationElement configurationElement = infos[i]; CommandFactoryDescriptor factory = new CommandFactoryDescriptor( configurationElement ); fDescriptors.add( factory ); } } } }