/******************************************************************************* * 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.inspector.ui.handlers; import java.util.List; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jubula.client.core.communication.AUTConnection; import org.eclipse.jubula.client.inspector.ui.commands.ActivateInspectorResponseCommand; import org.eclipse.jubula.client.inspector.ui.i18n.Messages; import org.eclipse.jubula.client.inspector.ui.provider.sourceprovider.InspectableAutSourceProvider; import org.eclipse.jubula.client.internal.BaseConnection.NotConnectedException; import org.eclipse.jubula.client.internal.exceptions.ConnectionException; import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil; import org.eclipse.jubula.client.ui.utils.JobUtils; import org.eclipse.jubula.communication.internal.message.ActivateInspectorMessage; import org.eclipse.jubula.tools.internal.exception.CommunicationException; import org.eclipse.jubula.tools.internal.messagehandling.MessageIDs; import org.eclipse.jubula.tools.internal.registration.AutIdentifier; /** * Handler for activating the AUT Inspector. * * @author BREDEX GmbH * @created Jun 11, 2009 */ public class ActivateInspectorHandler extends AbstractHandler { /** id for the AUT ID parameter */ public static final String AUT_ID = "org.eclipse.jubula.client.inspector.ui.commands.parameter.activateInspector.autId"; //$NON-NLS-1$ /** last inspected AUT */ private static AutIdentifier lastAut = null; /** * {@inheritDoc} */ public Object execute(final ExecutionEvent event) { final String jobName = Messages.UIJobActivateInspector; Job activateInspectorJob = new Job(jobName) { protected IStatus run(IProgressMonitor monitor) { monitor.beginTask(jobName, IProgressMonitor.UNKNOWN); AutIdentifier autId = null; try { autId = (AutIdentifier)event .getObjectParameterForExecution(AUT_ID); lastAut = autId; } catch (ExecutionException e) { InspectableAutSourceProvider iasp = new InspectableAutSourceProvider(); Object inspectableAUTs = iasp.getCurrentState().get( InspectableAutSourceProvider.INSPECTABLE_AUTS); if (inspectableAUTs != null && inspectableAUTs instanceof List) { List auts = (List)inspectableAUTs; if (auts.size() == 1) { Object object = auts.get(0); autId = object instanceof AutIdentifier ? (AutIdentifier)object : null; lastAut = autId; } else if (lastAut != null && auts.contains(lastAut)) { autId = lastAut; } } } if (autId == null) { return Status.CANCEL_STATUS; } ActivateInspectorMessage message = new ActivateInspectorMessage(); try { AUTConnection.getInstance().connectToAut( autId, new NullProgressMonitor()); AUTConnection.getInstance().request(message, new ActivateInspectorResponseCommand(), 5000); } catch (NotConnectedException nce) { ErrorHandlingUtil.createMessageDialog( MessageIDs.E_NO_AUT_CONNECTION_ERROR); } catch (ConnectionException ce) { ErrorHandlingUtil.createMessageDialog(ce, null, null); } catch (CommunicationException ce) { ErrorHandlingUtil.createMessageDialog(ce, null, null); } monitor.done(); return Status.OK_STATUS; } }; activateInspectorJob.setSystem(true); JobUtils.executeJob(activateInspectorJob, null); return null; } }