/******************************************************************************* * 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.HashSet; import java.util.List; import java.util.Set; import java.util.StringTokenizer; 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.IStatus; import org.eclipse.core.runtime.Status; /** * A command factory descriptor wrappers a configuration * element for a <code>commandFactory</code> extension. */ public class CommandFactoryDescriptor { private final static String IDENTIFIER = "id"; //$NON-NLS-1$ private final static String CLASS = "class"; //$NON-NLS-1$ private final static String NAME = "name"; //$NON-NLS-1$ private final static String DEBUGGER_ID = "debuggerID"; //$NON-NLS-1$ private final static String MI_VERSIONS = "miVersions"; //$NON-NLS-1$ private final static String DESCRIPTION = "description"; //$NON-NLS-1$ private final static String PLATFORMS = "platforms"; //$NON-NLS-1$ /** * The configuration element of the extension. */ private IConfigurationElement fElement; /** * The set of the platforms supported by this command factory. */ private Set fPlatforms; /** * The mi levels supported by this command factory. */ private String[] fMIVersions = new String[0]; /** * Constructor for CommandFactoryDescriptor. */ protected CommandFactoryDescriptor( IConfigurationElement element ) { fElement = element; } protected IConfigurationElement getConfigurationElement() { return fElement; } public String getIdentifier() { return getConfigurationElement().getAttribute( IDENTIFIER ); } public String getName() { return getConfigurationElement().getAttribute( NAME ); } public String getDebuggerIdentifier() { return getConfigurationElement().getAttribute( DEBUGGER_ID ); } public String[] getMIVersions() { if ( fMIVersions.length == 0 ) { String miVersions = getConfigurationElement().getAttribute( MI_VERSIONS ); if ( miVersions == null || miVersions.trim().length() == 0 ) miVersions = "mi"; //$NON-NLS-1$ StringTokenizer tokenizer = new StringTokenizer( miVersions, "," ); //$NON-NLS-1$ List list = new ArrayList( tokenizer.countTokens() ); while( tokenizer.hasMoreTokens() ) { list.add( tokenizer.nextToken().trim() ); } fMIVersions = (String[])list.toArray( new String[list.size()] ); } return fMIVersions; } public String getDescription() { String desc = getConfigurationElement().getAttribute( DESCRIPTION ); if ( isEmpty( desc ) ) { desc =""; //$NON-NLS-1$ } return desc; } protected Set getSupportedPlatforms() { if ( fPlatforms == null ) { String platforms = getConfigurationElement().getAttribute( PLATFORMS ); if ( platforms == null ) { return new HashSet( 0 ); } StringTokenizer tokenizer = new StringTokenizer( platforms, "," ); //$NON-NLS-1$ fPlatforms = new HashSet( tokenizer.countTokens() ); while( tokenizer.hasMoreTokens() ) { fPlatforms.add( tokenizer.nextToken().trim() ); } } return fPlatforms; } public boolean supportsPlatform( String platform ) { Set all = getSupportedPlatforms(); return all.isEmpty() || all.contains( "*" ) || all.contains( platform ); //$NON-NLS-1$ } public String[] getSupportedPlatformList() { Set platforms = getSupportedPlatforms(); return (String[])platforms.toArray( new String[platforms.size()] ); } public CommandFactory getCommandFactory() throws CoreException { Object clazz = getConfigurationElement().createExecutableExtension( CLASS ); if ( clazz instanceof CommandFactory ) { return (CommandFactory)clazz; } throw new CoreException( new Status( IStatus.ERROR, MIPlugin.getUniqueIdentifier(), -1, CommandFactoriesMessages.getString( "CommandFactoryDescriptor.0" ), null ) ); //$NON-NLS-1$ } private boolean isEmpty( String str ) { return ( str == null || str.trim().length() == 0 ); } }