/*******************************************************************************
* 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.views;
import org.eclipse.core.databinding.beans.PojoProperties;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.databinding.viewers.ViewerSupport;
import org.eclipse.jface.viewers.ListViewer;
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.events.DataEventDispatcher;
import org.eclipse.jubula.client.core.events.DataEventDispatcher.IProjectLoadedListener;
import org.eclipse.jubula.client.core.events.DataEventDispatcher.IProjectStateListener;
import org.eclipse.jubula.client.core.events.DataEventDispatcher.ProjectState;
import org.eclipse.jubula.client.ui.constants.ContextHelpIds;
import org.eclipse.jubula.client.ui.rcp.Plugin;
import org.eclipse.jubula.client.ui.rcp.provider.labelprovider.RunningAutsViewLabelProvider;
import org.eclipse.jubula.tools.internal.registration.AutIdentifier;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.part.ViewPart;
/**
* View for visualizing the list of running AUTs managed by the currently
* connected AUT Agent.
*
* @author BREDEX GmbH
* @created Jan 26, 2010
*/
public class RunningAutsView extends ViewPart
implements IProjectLoadedListener, IProjectStateListener {
/** listens for changes in AUT registration */
private IAutRegistrationListener m_autRegListener;
/** component to show the currently running AUTs */
private ListViewer m_runningAutComponent;
/** collection of currently running AUTs */
private WritableList m_runningAuts;
/**
* The databinding realm. All updates to running AUTs must be executed
* from within this realm.
*/
private Realm m_viewRealm;
/**
*
* {@inheritDoc}
*/
public void createPartControl(Composite parent) {
m_runningAuts = new WritableList();
m_runningAutComponent = new ListViewer(parent);
m_viewRealm = Realm.getDefault();
ViewerSupport.bind(m_runningAutComponent, m_runningAuts,
PojoProperties.value(AutIdentifier.PROP_EXECUTABLE_NAME));
m_autRegListener = new IAutRegistrationListener() {
@SuppressWarnings("synthetic-access")
public void handleAutRegistration(
final AutRegistrationEvent event) {
m_viewRealm.exec(new Runnable() {
public void run() {
switch (event.getStatus()) {
case Register:
m_runningAuts.add(event.getAutId());
break;
case Deregister:
m_runningAuts.remove(event.getAutId());
break;
default:
break;
}
}
});
}
};
AutAgentRegistration.getInstance().addListener(m_autRegListener);
getSite().setSelectionProvider(m_runningAutComponent);
m_runningAutComponent.setLabelProvider(
new RunningAutsViewLabelProvider());
DataEventDispatcher ded = DataEventDispatcher.getInstance();
ded.addProjectLoadedListener(this, true);
ded.addProjectStateListener(this);
Plugin.getHelpSystem().setHelp(m_runningAutComponent.getControl(),
ContextHelpIds.RUNNING_AUTS_VIEW);
// Create menu manager and menu
MenuManager menuMgr = new MenuManager();
Menu menu = menuMgr.createContextMenu(
m_runningAutComponent.getControl());
m_runningAutComponent.getControl().setMenu(menu);
// Register menu for extension.
getViewSite().registerContextMenu(menuMgr, m_runningAutComponent);
}
/**
*
* {@inheritDoc}
*/
public void setFocus() {
m_runningAutComponent.getControl().setFocus();
}
/**
* {@inheritDoc}
*/
public void dispose() {
AutAgentRegistration.getInstance().removeListener(m_autRegListener);
DataEventDispatcher ded = DataEventDispatcher.getInstance();
ded.removeProjectLoadedListener(this);
ded.removeProjectStateListener(this);
super.dispose();
}
/**
* {@inheritDoc}
*/
public void handleProjectLoaded() {
refreshViewer();
}
/**
* refreshes the viewer and the labels
*/
private void refreshViewer() {
Plugin.getDisplay().syncExec(new Runnable() {
public void run() {
m_runningAutComponent.refresh(true);
}
});
}
/** {@inheritDoc} */
public void handleProjectStateChanged(ProjectState state) {
if (ProjectState.prop_modified.equals(state)) {
refreshViewer();
}
}
}