/*******************************************************************************
* 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.client.ui.rcp.controllers.jobs;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jubula.client.core.agent.AutAgentRegistration;
import org.eclipse.jubula.client.core.agent.AutRegistrationEvent;
import org.eclipse.jubula.client.core.agent.IAutRegistrationListener;
import org.eclipse.jubula.client.core.model.IAUTConfigPO;
import org.eclipse.jubula.client.core.model.IAUTMainPO;
import org.eclipse.jubula.client.ui.rcp.Plugin;
import org.eclipse.jubula.client.ui.rcp.controllers.TestExecutionContributor;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.toolkit.common.exception.ToolkitPluginException;
import org.eclipse.jubula.tools.internal.constants.AutConfigConstants;
import org.eclipse.jubula.tools.internal.utils.TimeUtil;
import org.eclipse.osgi.util.NLS;
/**
* Job responsible for starting an AUT.
*
* @author BREDEX GmbH
* @created Feb 11, 2010
*/
public class StartAutJob extends Job {
/** the AUT to start */
private IAUTMainPO m_aut;
/** the AUT Configuration to use for startup */
private IAUTConfigPO m_autConfig;
/** flag to indicate whether the AUT has been successfully started */
private boolean m_isAutStarted;
/**
* Constructor
*
* @param aut The AUT to start.
* @param autConfig The AUT Configuration to use for startup.
*/
public StartAutJob(final IAUTMainPO aut, final IAUTConfigPO autConfig) {
super(NLS.bind(Messages.StartAutJobJobName,
autConfig.getConfigMap().get(AutConfigConstants.AUT_ID)));
m_aut = aut;
m_autConfig = autConfig;
}
/**
* {@inheritDoc}
*/
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask(null, IProgressMonitor.UNKNOWN);
IAutRegistrationListener l = new IAutRegistrationListener() {
public void handleAutRegistration(AutRegistrationEvent event) {
if (event.getAutId().getExecutableName().equals(
m_autConfig.getConfigMap().get(
AutConfigConstants.AUT_ID))) {
m_isAutStarted = true;
}
}
};
AutAgentRegistration.getInstance().addListener(l);
try {
TestExecutionContributor.getInstance().getClientTest().startAut(
m_aut, m_autConfig);
} catch (ToolkitPluginException e) {
return new Status(IStatus.ERROR, Plugin.PLUGIN_ID,
e.getLocalizedMessage());
}
while (!monitor.isCanceled() && !m_isAutStarted) {
TimeUtil.delay(500);
}
if (monitor.isCanceled()) {
return Status.CANCEL_STATUS;
}
monitor.done();
return Status.OK_STATUS;
}
}