Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: 1fe7c47415119e451110f81560ff9d01f0b46842 (plain) (tree)
1
2
                                                                                
                                                                                     





















                                                                                 
                                                                             














                                                                                                         

                                                                                                               
                                              
                                                                                        

                                                 
                                                                                              

                                                
                                                                                                     

                                                
                                                                                             

                                                    
                                                                                                          

                                                   
                                                                                                     






























































































                                                                                                                                                                                            
/*******************************************************************************
 * Copyright (c) 2012, 2014 Wind River Systems, Inc. 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:
 * Wind River Systems - initial API and implementation
 *******************************************************************************/
package org.eclipse.tcf.te.launch.core.lm;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.eclipse.core.runtime.Assert;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.ILaunchMode;
import org.eclipse.tcf.te.launch.core.persistence.DefaultPersistenceDelegate;

/**
 * Static launch configuration utility implementations.
 */
public class LaunchConfigHelper {

	/**
	 * Generate a unique launch config name.
	 * @param name The suggested name.
	 * @return The unique name.
	 */
	public static String getUniqueLaunchConfigName(String name) {
		return DebugPlugin.getDefault().getLaunchManager().generateLaunchConfigurationName(name);
	}

	@SuppressWarnings("unchecked")
    public static void addLaunchConfigAttribute(ILaunchConfigurationWorkingCopy wc, String key, Object value) {
		if (value instanceof String) {
			DefaultPersistenceDelegate.setAttribute(wc, key, (String)value);
		}
		else if (value instanceof List) {
			DefaultPersistenceDelegate.setAttribute(wc, key, (List<String>)value);
		}
		else if (value instanceof Map) {
			DefaultPersistenceDelegate.setAttribute(wc, key, (Map<String, String>)value);
		}
		else if (value instanceof Set) {
			DefaultPersistenceDelegate.setAttribute(wc, key, (Set<String>)value);
		}
		else if (value instanceof Boolean) {
			DefaultPersistenceDelegate.setAttribute(wc, key, ((Boolean)value).booleanValue());
		}
		else if (value instanceof Number) {
			DefaultPersistenceDelegate.setAttribute(wc, key, ((Number)value).intValue());
		}
		else {
			throw new IllegalArgumentException("Unknown attribute type " + value.getClass().getName() + "(" + value.toString() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
		}
	}

	/**
	 * Get a sorted list of all launch modes for the given launch configuration type.
	 *
	 * @param launchConfigType The launch configuration type.
	 * @param reverse If <code>true</code> the sorted list order is reversed.
	 *
	 * @return Sorted list of supported launch modes.
	 */
	public static String[] getLaunchConfigTypeModes(ILaunchConfigurationType launchConfigType, boolean reverse) {
		return getLaunchConfigTypeModes(new ILaunchConfigurationType[] { launchConfigType }, reverse);
	}

	/**
	 * Get a sorted list of all launch modes for the given launch configuration types.
	 *
	 * @param launchConfigTypes The launch configuration types.
	 * @param reverse If <code>true</code> the sorted list order is reversed.
	 *
	 * @return Sorted list of supported launch modes.
	 */
	public static String[] getLaunchConfigTypeModes(ILaunchConfigurationType[] launchConfigTypes, boolean reverse) {
		List<String> modes = new ArrayList<String>();
		for (ILaunchConfigurationType launchConfigType : launchConfigTypes) {
			for (Object modeCombination : launchConfigType.getSupportedModeCombinations()) {
				if (((Set<?>) modeCombination).size() == 1) {
					String mode = (String) ((Set<?>) modeCombination).toArray()[0];
					if (!modes.contains(mode)) {
						modes.add(mode);
					}
				}
			}
		}
		return getLaunchModesSorted(modes.toArray(new String[modes.size()]), reverse);
	}

	/**
	 * Gets a sorted list of launch mode identifiers.
	 *
	 * @param launchModes The launch modes. Must not be <code>null</code>.
	 * @param reverse If <code>true</code> the sorted list order is reversed.
	 *
	 * @return Sorted list of launch mode identifiers.
	 */
	public static String[] getLaunchModesSorted(ILaunchMode[] launchModes, boolean reverse) {
		Assert.isNotNull(launchModes);

		String[] modes = new String[launchModes.length];
		for (int i = 0; i < launchModes.length; i++) {
			modes[i] = launchModes[i].getIdentifier();
		}
		return getLaunchModesSorted(modes, reverse);
	}

	/**
	 * Gets a sorted list of launch mode identifiers.
	 *
	 * @param launchModes The unsorted list of launch modes identifiers. Must not be <code>null</code>.
	 * @param reverse If <code>true</code> the sorted list order is reversed.
	 *
	 * @return Sorted list of launch mode identifiers.
	 */
	public static String[] getLaunchModesSorted(String[] launchModes, final boolean reverse) {
		Assert.isNotNull(launchModes);

		// sort the list of launch modes
		// Run is always the first, followed by Debug.
		// All other modes are sorted alphabetically at the end of the list.
		Arrays.sort(launchModes, new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				if (o1.equals(ILaunchManager.RUN_MODE) && !o2.equals(ILaunchManager.RUN_MODE)) {
					return reverse ? 1 : -1;
				}
				if (o2.equals(ILaunchManager.RUN_MODE) && !o1.equals(ILaunchManager.RUN_MODE)) {
					return reverse ? -1 : 1;
				}
				if (o1.equals(ILaunchManager.DEBUG_MODE) && !o2.equals(ILaunchManager.DEBUG_MODE)) {
					return reverse ? 1 : -1;
				}
				if (o2.equals(ILaunchManager.DEBUG_MODE) && !o1.equals(ILaunchManager.DEBUG_MODE)) {
					return reverse ? -1 : 1;
				}
				return reverse ? o2.compareTo(o1) : o1.compareTo(o2);
			}
		});

		return launchModes;
	}
}

Back to the top