| /******************************************************************************* |
| * Copyright (c) 2008 IBM Corporation. |
| * 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: |
| * IBM Corporation - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.ptp.rm.mpi.mpich2.ui.launch; |
| |
| import java.util.Map; |
| import java.util.Map.Entry; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.debug.core.ILaunchConfiguration; |
| import org.eclipse.ptp.rm.mpi.mpich2.ui.MPICH2UIPlugin; |
| |
| /** |
| * |
| * @author Daniel Felix Ferber |
| * |
| */ |
| public class MPICH2LaunchConfiguration { |
| public static final String ATTR_BASE = MPICH2UIPlugin.PLUGIN_ID + ".launchAttributes"; //$NON-NLS-1$ |
| public static final String ATTR_NUMPROCS = ATTR_BASE + ".numProcs"; //$NON-NLS-1$ |
| public static final String ATTR_NOLOCAL = ATTR_BASE + ".noLocal"; //$NON-NLS-1$ |
| public static final String ATTR_PREFIX = ATTR_BASE + ".prefix"; //$NON-NLS-1$ |
| public static final String ATTR_USEPREFIX = ATTR_BASE + ".usePrefix"; //$NON-NLS-1$ |
| public static final String ATTR_HOSTFILE = ATTR_BASE + ".hostFile"; //$NON-NLS-1$ |
| public static final String ATTR_USEHOSTFILE = ATTR_BASE + ".useHostFile"; //$NON-NLS-1$ |
| public static final String ATTR_HOSTLIST = ATTR_BASE + ".hostList"; //$NON-NLS-1$ |
| public static final String ATTR_USEHOSTLIST = ATTR_BASE + ".useHostList"; //$NON-NLS-1$ |
| public static final String ATTR_ARGUMENTS = ATTR_BASE + ".arguments"; //$NON-NLS-1$ |
| public static final String ATTR_USEDEFAULTARGUMENTS = ATTR_BASE + ".useDefaultArguments"; //$NON-NLS-1$ |
| public static final String ATTR_PARAMETERS = ATTR_BASE + ".parameters"; //$NON-NLS-1$ |
| public static final String ATTR_USEDEFAULTPARAMETERS = ATTR_BASE + ".useDefaultParameters"; //$NON-NLS-1$ |
| |
| static String calculateArguments(ILaunchConfiguration configuration) throws CoreException { |
| if (configuration.getAttribute(ATTR_USEDEFAULTARGUMENTS, MPICH2LaunchConfigurationDefaults.ATTR_USEDEFAULTARGUMENTS)) { |
| String launchArgs = "-np " + Integer.toString(configuration.getAttribute(ATTR_NUMPROCS, MPICH2LaunchConfigurationDefaults.ATTR_NUMPROCS)); //$NON-NLS-1$ |
| if (configuration.getAttribute(ATTR_NOLOCAL, MPICH2LaunchConfigurationDefaults.ATTR_NOLOCAL)) { |
| launchArgs += " -nolocal"; //$NON-NLS-1$ |
| } |
| if (configuration.getAttribute(ATTR_USEPREFIX, MPICH2LaunchConfigurationDefaults.ATTR_USEPREFIX)) { |
| launchArgs += " --prefix " + fixString(configuration.getAttribute(ATTR_PREFIX, MPICH2LaunchConfigurationDefaults.ATTR_PREFIX)); //$NON-NLS-1$ |
| } |
| if (configuration.getAttribute(ATTR_USEHOSTFILE, MPICH2LaunchConfigurationDefaults.ATTR_USEHOSTFILE)) { |
| launchArgs += " -hostfile " + fixString(configuration.getAttribute(ATTR_HOSTFILE, MPICH2LaunchConfigurationDefaults.ATTR_HOSTFILE)); //$NON-NLS-1$ |
| } |
| if (configuration.getAttribute(ATTR_USEHOSTLIST, MPICH2LaunchConfigurationDefaults.ATTR_USEHOSTLIST)) { |
| launchArgs += " -host " + fixString(configuration.getAttribute(ATTR_HOSTLIST, MPICH2LaunchConfigurationDefaults.ATTR_HOSTLIST)); //$NON-NLS-1$ |
| } |
| |
| if (! configuration.getAttribute(ATTR_USEDEFAULTPARAMETERS, MPICH2LaunchConfigurationDefaults.ATTR_USEDEFAULTPARAMETERS)) { |
| Map<String, String> params = configuration.getAttribute(ATTR_PARAMETERS, MPICH2LaunchConfigurationDefaults.ATTR_PARAMETERS); |
| for (Entry<String, String> param : params.entrySet()) { |
| launchArgs += " -mca " + param.getKey() + " " + fixString(param.getValue()); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| } |
| return launchArgs; |
| } else { |
| String launchArgs = configuration.getAttribute(ATTR_ARGUMENTS, MPICH2LaunchConfigurationDefaults.ATTR_ARGUMENTS); |
| return launchArgs; |
| } |
| } |
| |
| /** |
| * Make string suitable for passing as an argument |
| * |
| * @param s |
| * @return |
| */ |
| static private String fixString(String s) { |
| // TODO is that right and escaped correctly? |
| if (s == null) { |
| return "\"\""; //$NON-NLS-1$ |
| } |
| return "\"" + s + "\""; //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| } |