JUnitProgressUI.java

package com.codeaffine.extras.jdt.internal.junitstatus;

import java.util.Objects;

import org.eclipse.swt.graphics.Color;

import com.codeaffine.eclipse.swt.util.UIThreadSynchronizer;

public class JUnitProgressUI implements ProgressUI {

  private final JUnitProgressBar progressBar;
  private final UIThreadSynchronizer uiThreadSynchronizer;
  private volatile String currentToolTipText;

  public JUnitProgressUI( JUnitProgressBar progressBar ) {
    this.progressBar = progressBar;
    this.uiThreadSynchronizer = new UIThreadSynchronizer();
    this.currentToolTipText = "";
  }

  @Override
  public void update( String text, int textAlignment, Color barColor, int selection, int maximum ) {
    uiThreadSynchronizer.asyncExec( progressBar, new Runnable() {
      @Override
      public void run() {
        progressBar.setValues( text, textAlignment, barColor, selection, maximum );
      }
    } );
  }

  @Override
  public void setToolTipText( String toolTipText ) {
    if( !Objects.equals( currentToolTipText, toolTipText ) ) {
      currentToolTipText = toolTipText;
      execSetToolTipText( toolTipText );
    }
  }

  private void execSetToolTipText( final String toolTipText ) {
    uiThreadSynchronizer.asyncExec( progressBar, new Runnable() {
      @Override
      public void run() {
        progressBar.setToolTipText( toolTipText );
      }
    } );
  }

}