Package org.cfeclipse.cfml.cfunit.views

Source Code of org.cfeclipse.cfml.cfunit.views.CFUnitViewTestList

package org.cfeclipse.cfml.cfunit.views;

import java.util.Observable;
import java.util.Observer;

import org.cfeclipse.cfml.cfunit.CFUnitTestCase;
import org.cfeclipse.cfml.cfunit.CFUnitTestResult;
import org.cfeclipse.cfml.cfunit.CFUnitTestSuite;

import org.cfeclipse.cfml.views.explorer.LocalFileSystem;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.part.DrillDownAdapter;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.dialogs.MessageDialog;

import org.eclipse.core.runtime.Path;

public class CFUnitViewTestList extends Canvas implements Observer {
 
  private TreeViewer tests;
  private Label title;
  private Label labelIcon;
  private Composite innerScrollpane;
 
  private Label lastDetailsLabel;
  private final Color COLOR_HIGHLIGHT = new Color(this.getDisplay(), 236, 236, 236);
  private final Color COLOR_WHITE = new Color(this.getDisplay(), 255, 255, 255);
 
  private final Image blankIcon = CFUnitView.getIcon( CFUnitView.ICON_NONE );
  private final Image errorIcon = CFUnitView.getIcon( CFUnitView.ICON_ERROR );
  private final Image failureIcon = CFUnitView.getIcon( CFUnitView.ICON_FAILURE );
  private final Image nwErrorIcon = CFUnitView.getIcon( CFUnitView.ICON_NWERROR );
 
  public CFUnitViewTestList(Composite parent) {
    super(parent, SWT.BORDER );
   
    GridLayout gridLayout= new GridLayout();
    gridLayout.numColumns = 2;
    setLayout( gridLayout );
   
    GridData data;
   
    // Test List
    Composite treePanel = new Composite(this, SWT.BORDER);
    treePanel.setLayout( new FillLayout() );
    GridData gd = new GridData( GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL );
    gd.horizontalSpan = 2;
    treePanel.setLayoutData( gd );
   
    tests = new TreeViewer(treePanel, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
    new DrillDownAdapter( tests );
    tests.setContentProvider(new CFUnitViewTestListContent());
    tests.setLabelProvider(new CFUnitViewTestListLabels());
    tests.setInput( CFUnitTestSuite.getInstence() );

    tests.addSelectionChangedListener(
      new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
          String n = event.getSelection().toString();
          handleSelection( n.substring(1, n.length()-1 ) );
        }
      }
    );
   
    tests.addDoubleClickListener(
      new IDoubleClickListener() {
        public void doubleClick(DoubleClickEvent event) {
         
          String n = event.getSelection().toString();
         
          CFUnitTestCase tc = CFUnitTestSuite.getTestCase( n.substring(1, n.length()-1 ) );
          if(tc != null) {
            Display display = Display.getCurrent();
            display.asyncExec( tc );
          }         
        }
      }
    );
   
   
    // Title Bar
    labelIcon = new Label(this, SWT.NONE);
    labelIcon.setImage( blankIcon );
    title = new Label(this, SWT.NONE);
    title.setLayoutData ( new GridData( GridData.FILL_HORIZONTAL ) );
   
    // Test Details
    Composite d = createDetailsPane( this );
   
      data = new GridData( GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL );
    data.horizontalSpan = 2;
    d.setBackground( COLOR_WHITE );
    d.setLayoutData (data);
   
    //
    addDisposeListener(new DisposeListener() {
      public void widgetDisposed(DisposeEvent e) {
        disposeIcons();
      }
    });
   
    CFUnitTestSuite.getInstence().addObserver(this); // Begin observing the test Model
  }
 
  public void update(Observable o, Object arg) {
    tests.refresh();
  }
 
  private void handleSelection( String name ) {
   
    CFUnitTestResult result = CFUnitTestSuite.getTestResult( name );
       
    if(result != null) {
     
      clearDetails();

      title.setText( name );
     
      switch( result.getType() ) {
        case CFUnitTestResult.ERROR:
          labelIcon.setImage( errorIcon );
          break;
        case CFUnitTestResult.FAILURE:
          labelIcon.setImage( failureIcon );
          break;
        case CFUnitTestResult.NWERROR:
          labelIcon.setImage( nwErrorIcon );
          break;
        default:
          labelIcon.setImage( blankIcon );
      }
     
     
      String[] d = result.getDetails();
     
      for(int i = 0; i < d.length; i++ ) {
        Label l = new Label(innerScrollpane, SWT.NONE);
        l.setBackground( COLOR_WHITE );
        l.setText( d[i] );
        l.addMouseListener(new DetailsSelectionListener());
       
      }
     
      innerScrollpane.setSize(innerScrollpane.computeSize(SWT.DEFAULT, SWT.DEFAULT));
      innerScrollpane.layout();
    }
  }

  public void clearDetails() {
    labelIcon.setImage( blankIcon );
    title.setText( "" );
   
    try {
      org.eclipse.swt.widgets.Control[] c = innerScrollpane.getChildren();
     
      for(int i = 0; i < c.length; i++ ) {
        c[i].dispose();
      }
    } catch(Throwable e) {
      System.err.println(e);
    }
   
  }
 
  private void disposeIcons() {
    errorIcon.dispose();
    failureIcon.dispose();
  }
 
  private Composite createDetailsPane(Composite parent) {
    final ScrolledComposite scrollpane = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
   
    innerScrollpane = new Composite(scrollpane, SWT.NONE);
      innerScrollpane.setLayout( new FillLayout( SWT.VERTICAL ) );
    innerScrollpane.setBackground( new Color(getDisplay(), 255, 255, 255) );
    scrollpane.setContent( innerScrollpane );
   
    Label details = new Label(innerScrollpane, SWT.NONE);
    details.setText("");
    details.setBackground( COLOR_WHITE );
   
    innerScrollpane.setSize(innerScrollpane.computeSize(SWT.DEFAULT, SWT.DEFAULT));
   
    return scrollpane;
  }
 
 
  public class DetailsSelectionListener implements MouseListener {
    public DetailsSelectionListener() {}
   
    public void mouseDown(MouseEvent e) {
      Label l = (Label)e.widget;
      String line = l.getText().trim();
     
      // Unhighlight last row     
      if(lastDetailsLabel != null) {
        lastDetailsLabel.setBackground( COLOR_WHITE );
      }
     
      // Get the file name/line number
      int li = line.lastIndexOf(':');
      String fileName = line.substring(0, li);
      Path path = new Path( fileName );
     
      if( path.isValidPath(fileName) ) {
        int lineNumber;
       
        try {
          lineNumber = Integer.parseInt( line.substring(li+1, line.length()) );
        } catch(NumberFormatException nfe) {
          return;
        }
       
        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        try {
          // Open the file
          LocalFileSystem fs = new LocalFileSystem();
          org.eclipse.ui.IEditorPart editor = page.openEditor(fs.getEditorInput( fileName ),"org.cfeclipse.cfml.editors.CFMLEditor");
               
          // Select the line number
          ITextEditor textEditor = (ITextEditor)editor;
          lineNumber--; // document is 0 based
          IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
          textEditor.selectAndReveal( document.getLineOffset(lineNumber), document.getLineLength(lineNumber));
          page.activate(textEditor);
         
        } catch (Exception ex) {
                ex.printStackTrace();
            }
       
        // Highlight this row
        l.setBackground( COLOR_HIGHLIGHT );
        lastDetailsLabel = l;
      }
    }
   
    public void mouseDoubleClick(MouseEvent e) {}
    public void mouseUp(MouseEvent e) {}
   
  }

}
TOP

Related Classes of org.cfeclipse.cfml.cfunit.views.CFUnitViewTestList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.