JUnitStatusContributionItem.java
package com.codeaffine.extras.jdt.internal.junitstatus;
import org.eclipse.jdt.junit.JUnitCore;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.jface.resource.ResourceManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.menus.WorkbenchWindowControlContribution;
public class JUnitStatusContributionItem extends WorkbenchWindowControlContribution {
private ResourceManager resourceManager;
private JUnitTestRunListener testRunListener;
private JUnitProgressBar progressBar;
@Override
protected Control createControl( Composite parent ) {
resourceManager = new LocalResourceManager( JFaceResources.getResources( parent.getDisplay() ) );
Composite result = createControls( parent );
layoutControls( result );
attachContextMenu();
JUnitCore.addTestRunListener( testRunListener );
return result;
}
@Override
public void dispose() {
detachTestRunListener();
disposeResourceManager();
super.dispose();
}
private Composite createControls( Composite parent ) {
Composite result = new StatusComposite( parent, SWT.NONE );
progressBar = new JUnitProgressBar( result );
testRunListener = new JUnitTestRunListener( resourceManager, new JUnitProgressUI( progressBar ) );
return result;
}
private void layoutControls( Composite composite ) {
composite.setLayout( GridLayoutFactory.fillDefaults().margins( 3, 0 ).create() );
progressBar.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
}
private void attachContextMenu() {
attachContextMenu( progressBar );
}
private void attachContextMenu( Control control ) {
MenuManager menuManager = new MenuManager();
menuManager.add( new ActivateJUnitViewOnFailureAction() );
menuManager.add( new Separator() );
menuManager.add( new CloseJUnitStatusAction( getWorkbenchWindow().getWorkbench() ) );
Menu contextMenu = menuManager.createContextMenu( control );
control.setMenu( contextMenu );
}
private void detachTestRunListener() {
if( testRunListener != null ) {
JUnitCore.removeTestRunListener( testRunListener );
testRunListener.dispose();
testRunListener = null;
}
}
private void disposeResourceManager() {
if( resourceManager != null ) {
resourceManager.dispose();
resourceManager = null;
}
}
}