blob: f0b325d16d8a05ce7ca5b4b8f8b79ca201164d38 [file] [log] [blame]
/*******************************************************************************
* 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$
}
}