/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * 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: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.autagent.commands; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.StringTokenizer; import java.util.Vector; import org.apache.commons.lang.LocaleUtils; import org.eclipse.jubula.tools.internal.constants.AutConfigConstants; import org.eclipse.jubula.tools.internal.constants.CommandConstants; import org.eclipse.jubula.tools.internal.constants.StringConstants; import org.eclipse.jubula.tools.internal.utils.EnvironmentUtils; import org.eclipse.jubula.tools.internal.utils.MonitoringUtil; /** * @author BREDEX GmbH * @created 04.09.2007 * */ public class StartRcpAutServerCommand extends AbstractStartJavaAut { /** * -nl : * the argument that defines the locale for the RCP application. */ private static final String NL = "-nl"; //$NON-NLS-1$ /** * @param pathSeparator the defined pathSeparator * @param cmds the cmd list * @param parameters The startup parameters for the AUT. */ private void createDirectAutJavaCallParameter(final String pathSeparator, List<String> cmds, Map<String, String> parameters) { StringBuffer autClassPath = new StringBuffer(); final String autJar = parameters.get( AutConfigConstants.JAR_FILE); String manifestClassPath = getClassPathFromManifest(parameters); if (manifestClassPath.length() > 0) { autClassPath.append(manifestClassPath).append(pathSeparator); } if (autClassPath.toString() != null && !StringConstants.EMPTY.equals(autClassPath.toString())) { cmds.add("-classpath"); //$NON-NLS-1$ cmds.add(autClassPath.toString()); } cmds.add("-jar"); //$NON-NLS-1$ cmds.add(autJar); final String autArgs = parameters.get(AutConfigConstants.AUT_ARGUMENTS); if (autArgs != null) { StringTokenizer args = new StringTokenizer(autArgs, WHITESPACE_DELIMITER); while (args.hasMoreTokens()) { String arg = args.nextToken(); cmds.add(arg); } } } /** * @param cmds the cmd list * @param parameters The startup parameters for the AUT. */ private void createDirectAutExeCallParameter(List<String> cmds, Map<String, String> parameters) { final String autArgs = parameters.get(AutConfigConstants.AUT_ARGUMENTS); if (autArgs != null) { StringTokenizer args = new StringTokenizer(autArgs, WHITESPACE_DELIMITER); while (args.hasMoreTokens()) { String arg = args.nextToken(); cmds.add(arg); } } } /** * * @param parameters * The parameters for starting the AUT. * @return a command line array as list with locale, JRE-parameters and * optional debug parameters */ private List<String> createDirectAutJavaCall( final Map<String, String> parameters) { // create exec string array List<String> cmds = new Vector<String>(); // add locale addLocale(cmds, LocaleUtils.toLocale( parameters.get(AutConfigConstants.AUT_LOCALE))); // add JRE parameter final String jreParams = parameters .get(AutConfigConstants.JRE_PARAMETER); if (jreParams != null && jreParams.length() > 0) { StringTokenizer tok = new StringTokenizer(jreParams, WHITESPACE_DELIMITER); while (tok.hasMoreTokens()) { cmds.add(tok.nextToken()); } } // add debug options (if necessary) addDebugParams(cmds, true); return cmds; } /** * {@inheritDoc} */ protected String getServerClassName() { return CommandConstants.AUT_SWT_SERVER; } /** * {@inheritDoc} */ protected String[] createCmdArray(String baseCmd, Map<String, String> parameters) { List<String> cmds; if (!isRunningFromExecutable(parameters)) { // Start using java cmds = createDirectAutJavaCall(parameters); cmds.add(0, baseCmd); createDirectAutJavaCallParameter(PATH_SEPARATOR, cmds, parameters); addLocale(cmds, LocaleUtils.toLocale(parameters .get(AutConfigConstants.AUT_LOCALE))); } else { // Start using executable file cmds = new Vector<String>(); cmds.add(0, baseCmd); createDirectAutExeCallParameter(cmds, parameters); // add locale // Note: This overrides the -nl defined in the <app>.ini file, if // any. It will not override a -nl from the command line. if (!cmds.contains(NL)) { Locale locale = LocaleUtils.toLocale(parameters .get(AutConfigConstants.AUT_LOCALE)); if (locale != null) { if ((locale.getCountry() != null && locale.getCountry().length() > 0) || (locale.getLanguage() != null && locale.getLanguage().length() > 0)) { // Add -nl argument if country and/or language is // available. cmds.add(1, NL); cmds.add(2, locale.toString()); } } } addDebugParams(cmds, true); } String[] cmdArray = cmds.toArray(new String[cmds.size()]); return cmdArray; } /** * {@inheritDoc} */ protected String[] createEnvArray(Map<String, String> parameters, boolean isAgentSet) { String [] envArray = super.createEnvArray(parameters, isAgentSet); if (envArray == null) { envArray = EnvironmentUtils.propToStrArray( EnvironmentUtils.getProcessEnvironment(), IStartAut.PROPERTY_DELIMITER); } Vector<String> envList = new Vector<String>(Arrays.asList(envArray)); envList.addAll(getConnectionProperties(parameters, StartSwtAutServerCommand.ENV_VALUE_SEP)); if (MonitoringUtil.shouldAndCanRunWithMonitoring(parameters)) { String monAgent = this.getMonitoringAgent(parameters); if (monAgent != null) { StringBuffer sb = new StringBuffer(); sb.append(JAVA_OPTIONS_INTRO); sb.append(monAgent); envList.add(sb.toString()); envArray = super.createEnvArray(parameters, true); } } envArray = envList.toArray(new String [envList.size()]); return envArray; } /** * * @param parameters * The AUT Configuration parameters. * @param valueSeparator * The string to use to separate property names from property * values. * @return the list of properties. */ private List<String> getConnectionProperties( Map<String, String> parameters, String valueSeparator) { List<String> props = new ArrayList<String>(); StringBuffer sb = new StringBuffer(); sb = new StringBuffer(); sb.append(AutConfigConstants.KEYBOARD_LAYOUT).append(valueSeparator) .append(parameters.get(AutConfigConstants.KEYBOARD_LAYOUT)); props.add(sb.toString()); sb = new StringBuffer(); sb.append(AutConfigConstants.AUT_AGENT_HOST).append(valueSeparator) .append(parameters.get(AutConfigConstants.AUT_AGENT_HOST)); props.add(sb.toString()); sb = new StringBuffer(); sb.append(AutConfigConstants.AUT_AGENT_PORT).append(valueSeparator) .append(parameters.get(AutConfigConstants.AUT_AGENT_PORT)); props.add(sb.toString()); sb = new StringBuffer(); sb.append(AutConfigConstants.AUT_NAME).append(valueSeparator) .append(parameters.get(AutConfigConstants.AUT_NAME)); props.add(sb.toString()); return props; } @Override public String getRcBundleId() { return CommandConstants.RC_RCP_BUNDLE_ID; } }