/******************************************************************************* * 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.AbstractList; import java.util.HashMap; import java.util.Map; import java.util.Vector; import org.apache.commons.lang.StringUtils; import org.eclipse.jubula.autagent.AutStarter; 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.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author BREDEX GmbH * @created 01.09.2009 */ public class StartHtmlAutServerCommand extends AbstractStartPseudoJavaAUT { /** * <code>DEFAULT_AUT_ID_ATTRIBUTE_NAME</code> */ private static final String DEFAULT_AUT_ID_ATTRIBUTE_NAME = "id"; //$NON-NLS-1$ /** the logger */ private static Logger log = LoggerFactory.getLogger(StartHtmlAutServerCommand.class); /** * mapping from browser type (String) to corresponding * Selenium browser command (String) */ private static final Map<String, String> BROWSER_TO_CMD_MAP = new HashMap<String, String>(); static { BROWSER_TO_CMD_MAP.put("Firefox", "*firefox"); //$NON-NLS-1$ //$NON-NLS-2$ BROWSER_TO_CMD_MAP.put("FirefoxOver47", "*firefox"); //$NON-NLS-1$ //$NON-NLS-2$ BROWSER_TO_CMD_MAP.put("InternetExplorer", "*iexplore"); //$NON-NLS-1$ //$NON-NLS-2$ BROWSER_TO_CMD_MAP.put("Safari", "*safari"); //$NON-NLS-1$ //$NON-NLS-2$ BROWSER_TO_CMD_MAP.put("Chrome", "*googlechrome"); //$NON-NLS-1$ //$NON-NLS-2$ } /** * {@inheritDoc} */ protected String[] createCmdArray(String baseCmd, Map<String, String> parameters) { Vector<String> commands = new Vector<String>(); commands.add(baseCmd); addDebugParams(commands, false); Object webdriverMode = parameters.get( AutConfigConstants.WEBDRIVER_MODE); Boolean useWebdriver = (String.valueOf(webdriverMode) .equals(Boolean.TRUE.toString())); StringBuilder serverClasspath = new StringBuilder(); String [] bundlesToAddToClasspath = getBundlesForClasspath( useWebdriver); for (String bundleId : bundlesToAddToClasspath) { String classpathForBundleId = AbstractStartToolkitAut .getClasspathForBundleId(bundleId); if (!StringUtils.isEmpty(classpathForBundleId)) { serverClasspath.append(classpathForBundleId); serverClasspath.append(PATH_SEPARATOR); } else { log.warn("Bundle not found: " + bundleId); //$NON-NLS-1$ } } commands.add("-classpath"); //$NON-NLS-1$ commands.add(serverClasspath.toString()); commands.add("com.bredexsw.jubula.rc.html.WebAUTServer"); //$NON-NLS-1$ // connection parameters commands.add(String.valueOf( AutStarter.getInstance().getAutCommunicator().getLocalPort())); commands.add(String.valueOf( parameters.get(AutConfigConstants.AUT_ARGUMENTS))); if (useWebdriver) { commands.add(String.valueOf(parameters.get( AutConfigConstants.BROWSER))); } else { commands.add(getBrowserString( parameters.get(AutConfigConstants.BROWSER_PATH), parameters.get(AutConfigConstants.BROWSER), useWebdriver)); } if (useWebdriver) { commands.add(String.valueOf( parameters.get(AutConfigConstants.BROWSER_SIZE))); } else { // place holder commands.add("AUT"); //$NON-NLS-1$ } fillRegistrationParameters(parameters, commands); // additional parameters Object idAttribute = parameters.get(AutConfigConstants.WEB_ID_TAG); if (idAttribute != null) { commands.add(String.valueOf(idAttribute)); } else { commands.add(DEFAULT_AUT_ID_ATTRIBUTE_NAME); } if (useWebdriver) { commands.add(String.valueOf(parameters.get( AutConfigConstants.BROWSER_PATH))); commands.add(String.valueOf(parameters.get( AutConfigConstants.DRIVER_PATH))); } else { Object singleWindowMode = parameters.get(AutConfigConstants.SINGLE_WINDOW_MODE); if (singleWindowMode != null) { commands.add(String.valueOf(singleWindowMode)); } else { commands.add(String.valueOf(true)); } } return commands.toArray(new String[commands.size()]); } /** * add host/port parameters to commands * @param parameters the parameters * @param commands the commands */ private void fillRegistrationParameters(Map parameters, AbstractList<String> commands) { commands.add(String.valueOf( parameters.get(AutConfigConstants.AUT_AGENT_HOST))); commands.add(String.valueOf( parameters.get(AutConfigConstants.AUT_AGENT_PORT))); commands.add(String.valueOf( parameters.get(AutConfigConstants.AUT_ID))); } /** * @param useWebdriver whether to use webdriver * @return the bundles to add to the classpath */ protected String[] getBundlesForClasspath(boolean useWebdriver) { String rcHtmlDriverBundleId = useWebdriver ? CommandConstants.RC_HTML_WEBDRIVER_BUNDLE_ID : CommandConstants.RC_HTML_SELENIUM2_BUNDLE_ID; return new String[] { CommandConstants.RC_HTML_BUNDLE_ID, rcHtmlDriverBundleId, CommandConstants.TOOLKIT_HTML_BUNDLE_ID, CommandConstants.TOOLS_BUNDLE_ID, CommandConstants.TOOLS_EXEC_BUNDLE_ID, CommandConstants.COMMUNICATION_BUNDLE_ID, CommandConstants.RC_COMMON_BUNDLE_ID, CommandConstants.TOOLKIT_API_BUNDLE_ID, CommandConstants.RC_BREDEX_COMMON_BUNDLE_ID, CommandConstants.SLF4J_JCL_BUNDLE_ID, CommandConstants.ORG_SLF4J_JUL_BUNDLE_ID, CommandConstants.SLF4J_API_BUNDLE_ID, CommandConstants.LOGBACK_CLASSIC_BUNDLE_ID, CommandConstants.LOGBACK_CORE_BUNDLE_ID, CommandConstants.LOGBACK_SLF4J_BUNDLE_ID, CommandConstants.COMMONS_LANG_BUNDLE_ID, CommandConstants.APACHE_IO_BUNDLE_ID, CommandConstants.APACHE_EXEC_BUNDLE_ID, CommandConstants.APACHE_ORO_BUNDLE_ID, CommandConstants.COMMONS_COLLECTIONS_BUNDLE_ID }; } /** * * @param browserPath The path to the browser to start, or * <code>null</code> if the default path for the given * browser type should be used. * @param browserType The browser type to start * (ex. Firefox, Internet Explorer, Safari). * @param useWebdriver * Whether to use Webdriver for test execution * @return the command to use when starting Selenium in order to start the * desired browser from the desired path. */ private String getBrowserString(Object browserPath, Object browserType, boolean useWebdriver) { String browserString; if (useWebdriver) { if (browserType == null) { throw new IllegalArgumentException( "Unsupported browser type: " + browserType); //$NON-NLS-1$ } browserString = String.valueOf(browserType); } else { Object browser = BROWSER_TO_CMD_MAP.get(browserType); if (browser == null) { throw new IllegalArgumentException( "Unsupported browser type: " + browserType); //$NON-NLS-1$ } browserString = String.valueOf(browser); } if (browserPath != null) { browserString += " " + String.valueOf(browserPath); //$NON-NLS-1$ } return StringConstants.QUOTE + browserString + StringConstants.QUOTE; } @Override public String getRcBundleId() { return CommandConstants.RC_HTML_BUNDLE_ID; } }