Package com.mountainminds.eclemma.internal.ui.editors

Source Code of com.mountainminds.eclemma.internal.ui.editors.ExecutedClassesPage$RefreshJob

/*******************************************************************************
* Copyright (c) 2006, 2014 Mountainminds GmbH & Co. KG and Contributors
* 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:
*    Brock Janiczak - initial API and implementation
*   
******************************************************************************/
package com.mountainminds.eclemma.internal.ui.editors;

import static com.mountainminds.eclemma.internal.ui.UIMessages.ExecutionDataEditorExecutedClassesPageColumnExecutedProbes_label;
import static com.mountainminds.eclemma.internal.ui.UIMessages.ExecutionDataEditorExecutedClassesPageColumnId_label;
import static com.mountainminds.eclemma.internal.ui.UIMessages.ExecutionDataEditorExecutedClassesPageColumnName_label;
import static com.mountainminds.eclemma.internal.ui.UIMessages.ExecutionDataEditorExecutedClassesPageColumnTotalProbes_label;
import static com.mountainminds.eclemma.internal.ui.UIMessages.ExecutionDataEditorExecutedClassesPageFilter_message;
import static com.mountainminds.eclemma.internal.ui.UIMessages.ExecutionDataEditorExecutedClassesPageRefreshing_task;
import static com.mountainminds.eclemma.internal.ui.UIMessages.ExecutionDataEditorExecutedClassesPage_title;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.progress.UIJob;
import org.jacoco.core.data.ExecutionData;

class ExecutedClassesPage extends FormPage {

  private final ExecutionDataContent content;
  private final Job refreshJob;

  private TableViewer dataTableViewer;
  private Text filter;

  public ExecutedClassesPage(FormEditor parent, ExecutionDataContent content) {
    super(parent, "classes", ExecutionDataEditorExecutedClassesPage_title); //$NON-NLS-1$
    this.content = content;
    this.refreshJob = new RefreshJob();
  }

  @Override
  protected void createFormContent(IManagedForm managedForm) {
    final FormToolkit toolkit = managedForm.getToolkit();

    final ScrolledForm form = managedForm.getForm();
    form.setText(ExecutionDataEditorExecutedClassesPage_title);
    toolkit.decorateFormHeading(form.getForm());

    final Composite body = form.getBody();
    body.setLayout(new org.eclipse.swt.layout.GridLayout(1, true));

    filter = toolkit.createText(body, null, SWT.SINGLE | SWT.SEARCH
        | SWT.ICON_CANCEL);
    filter.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        triggerRefresh();
      }
    });
    filter.setMessage(ExecutionDataEditorExecutedClassesPageFilter_message);
    filter.setLayoutData(new GridData(SWT.FILL, 0, true, false));

    final Table dataTable = toolkit.createTable(body, SWT.VIRTUAL
        | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.BORDER);
    dataTable.setHeaderVisible(true);
    dataTable.setLinesVisible(true);
    dataTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    dataTableViewer = new TableViewer(dataTable);

    final TableViewerColumn classIdColumnViewer = new TableViewerColumn(
        dataTableViewer, SWT.NONE);
    classIdColumnViewer.setLabelProvider(new ClassIdLabelProvider());
    final TableColumn classIdColumn = classIdColumnViewer.getColumn();
    classIdColumn.setText(ExecutionDataEditorExecutedClassesPageColumnId_label);
    classIdColumn.setWidth(200);
    classIdColumn.setResizable(true);

    final TableViewerColumn vmNameColumnViewer = new TableViewerColumn(
        dataTableViewer, SWT.NONE);
    vmNameColumnViewer.setLabelProvider(new VMNameLabelProvider());
    final TableColumn vmNameColumn = vmNameColumnViewer.getColumn();
    vmNameColumn
        .setText(ExecutionDataEditorExecutedClassesPageColumnName_label);
    vmNameColumn.setWidth(500);
    vmNameColumn.setResizable(true);

    final TableViewerColumn totalProbesColumnViewer = new TableViewerColumn(
        dataTableViewer, SWT.RIGHT);
    totalProbesColumnViewer.setLabelProvider(new TotalProbesLabelProvider());
    final TableColumn totalProbesColumn = totalProbesColumnViewer.getColumn();
    totalProbesColumn
        .setText(ExecutionDataEditorExecutedClassesPageColumnTotalProbes_label);
    totalProbesColumn.setWidth(100);
    totalProbesColumn.setResizable(true);

    final TableViewerColumn executedProbesColumnViewer = new TableViewerColumn(
        dataTableViewer, SWT.RIGHT);
    executedProbesColumnViewer
        .setLabelProvider(new ExecutedProbesLabelProvider());
    final TableColumn executedProbesColumn = executedProbesColumnViewer
        .getColumn();
    executedProbesColumn
        .setText(ExecutionDataEditorExecutedClassesPageColumnExecutedProbes_label);
    executedProbesColumn.setWidth(100);
    executedProbesColumn.setResizable(true);

    dataTable.setSortColumn(vmNameColumn);
    dataTable.setSortDirection(SWT.UP);
    dataTableViewer.setComparator(new ViewerComparator());
    dataTableViewer
        .setContentProvider(new AbstractExecutionDataContentProvider() {
          public Object[] getElements(ExecutionDataContent content) {
            return content.getExecutionData();
          }
        });
    dataTableViewer.setInput(content);
  }

  private abstract static class AbstractExecutionDataColumnLabelProvider extends
      ColumnLabelProvider {
    public final String getText(Object element) {
      return getText((ExecutionData) element);
    }

    public abstract String getText(ExecutionData element);
  }

  private static class VMNameLabelProvider extends
      AbstractExecutionDataColumnLabelProvider {
    @Override
    public String getText(ExecutionData element) {
      return element.getName();
    }
  }

  private static class ClassIdLabelProvider extends
      AbstractExecutionDataColumnLabelProvider {
    @Override
    public String getText(ExecutionData element) {
      return String.format("0x%016x", Long.valueOf(element.getId())); //$NON-NLS-1$
    }

    @Override
    public Font getFont(Object element) {
      return JFaceResources.getTextFont();
    }
  }

  private static class TotalProbesLabelProvider extends
      AbstractExecutionDataColumnLabelProvider {
    @Override
    public String getText(ExecutionData element) {
      return Integer.toString(element.getProbes().length);
    }
  }

  private static class ExecutedProbesLabelProvider extends
      AbstractExecutionDataColumnLabelProvider {
    @Override
    public String getText(ExecutionData element) {
      int executed = 0;
      boolean[] data = element.getProbes();
      for (int i = 0; i < data.length; i++) {
        if (data[i]) {
          executed++;
        }
      }
      return Integer.toString(executed);
    }
  }

  private void triggerRefresh() {
    refreshJob.cancel();
    refreshJob.schedule(250L);
  }

  private final class RefreshJob extends UIJob {

    public RefreshJob() {
      super(ExecutionDataEditorExecutedClassesPageRefreshing_task);
      setSystem(true);
      setPriority(Job.SHORT);
      setUser(false);
    }

    @Override
    public IStatus runInUIThread(IProgressMonitor monitor) {
      dataTableViewer.setFilters(new ViewerFilter[] { ExecutedClassesFilters
          .fromPatternString(filter.getText().trim()) });
      return Status.OK_STATUS;
    }
  }

}
TOP

Related Classes of com.mountainminds.eclemma.internal.ui.editors.ExecutedClassesPage$RefreshJob

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.