Package com.mountainminds.eclemma.internal.ui.dialogs

Source Code of com.mountainminds.eclemma.internal.ui.dialogs.CoveragePropertyPage$Line

/*******************************************************************************
* 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:
*    Marc R. Hoffmann - initial API and implementation
*   
******************************************************************************/
package com.mountainminds.eclemma.internal.ui.dialogs;

import java.text.DecimalFormat;
import java.text.NumberFormat;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.OwnerDrawLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.PropertyPage;
import org.jacoco.core.analysis.ICounter;
import org.jacoco.core.analysis.ICoverageNode;

import com.mountainminds.eclemma.core.CoverageTools;
import com.mountainminds.eclemma.core.ICoverageSession;
import com.mountainminds.eclemma.internal.ui.ContextHelp;
import com.mountainminds.eclemma.internal.ui.RedGreenBar;
import com.mountainminds.eclemma.internal.ui.UIMessages;

/**
* Property page for coverage details of a Java element.
*/
public class CoveragePropertyPage extends PropertyPage {

  private static final NumberFormat COVERAGE_VALUE = new DecimalFormat(
      UIMessages.CoveragePropertyPageColumnCoverage_value);

  private static final NumberFormat COUNTER_VALUE = DecimalFormat
      .getIntegerInstance();

  protected Control createContents(Composite parent) {
    ContextHelp.setHelp(parent, ContextHelp.COVERAGE_PROPERTIES);
    noDefaultAndApplyButton();
    parent = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout();
    layout.numColumns = 2;
    layout.marginWidth = 0;
    layout.marginHeight = 0;
    parent.setLayout(layout);

    Label l1 = new Label(parent, SWT.NONE);
    l1.setText(UIMessages.CoveragePropertyPageSession_label);
    l1.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));

    Text t1 = new Text(parent, SWT.READ_ONLY | SWT.WRAP);
    t1.setText(getSessionDescription());
    t1.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false));
    t1.setBackground(t1.getDisplay()
        .getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));

    Control table = createTable(parent);
    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
    gd.horizontalSpan = 2;
    table.setLayoutData(gd);

    return parent;
  }

  private String getSessionDescription() {
    ICoverageSession session = CoverageTools.getSessionManager()
        .getActiveSession();
    return session == null ? UIMessages.CoveragePropertyPageNoSession_value
        : session.getDescription();
  }

  private Control createTable(Composite parent) {
    final Table table = new Table(parent, SWT.BORDER);
    initializeDialogUnits(table);
    table.setHeaderVisible(true);
    table.setLinesVisible(true);
    TableViewer viewer = new TableViewer(table);
    createColumn(viewer, SWT.LEFT, 20,
        UIMessages.CoveragePropertyPageColumnCounter_label,
        new CellLabelProvider() {
          @Override
          public void update(ViewerCell cell) {
            final Line line = (Line) cell.getElement();
            cell.setText(line.label);
          }
        });
    createColumn(viewer, SWT.RIGHT, 20,
        UIMessages.CoveragePropertyPageColumnCoverage_label,
        new OwnerDrawLabelProvider() {
          @Override
          public void update(ViewerCell cell) {
            final Line line = (Line) cell.getElement();
            cell.setText(COVERAGE_VALUE.format(line.counter.getCoveredRatio()));
          }

          @Override
          protected void paint(Event event, Object element) {
            final Line line = (Line) element;
            RedGreenBar
                .draw(event, table.getColumn(1).getWidth(), line.counter);
          }

          @Override
          protected void erase(Event event, Object element) {
          }

          @Override
          protected void measure(Event event, Object element) {
          }
        });
    createColumn(viewer, SWT.RIGHT, 16,
        UIMessages.CoveragePropertyPageColumnCovered_label,
        new CellLabelProvider() {
          @Override
          public void update(ViewerCell cell) {
            final Line line = (Line) cell.getElement();
            cell.setText(COUNTER_VALUE.format(line.counter.getCoveredCount()));
          }
        });
    createColumn(viewer, SWT.RIGHT, 16,
        UIMessages.CoveragePropertyPageColumnMissed_label,
        new CellLabelProvider() {
          @Override
          public void update(ViewerCell cell) {
            final Line line = (Line) cell.getElement();
            cell.setText(COUNTER_VALUE.format(line.counter.getMissedCount()));
          }
        });
    createColumn(viewer, SWT.RIGHT, 16,
        UIMessages.CoveragePropertyPageColumnTotal_label,
        new CellLabelProvider() {
          @Override
          public void update(ViewerCell cell) {
            final Line line = (Line) cell.getElement();
            cell.setText(COUNTER_VALUE.format(line.counter.getTotalCount()));
          }
        });
    viewer.setContentProvider(new ArrayContentProvider());
    viewer.addFilter(new ViewerFilter() {
      public boolean select(Viewer viewer, Object parentElement, Object element) {
        return ((Line) element).counter.getTotalCount() != 0;
      }
    });
    viewer.setInput(getLines());
    return table;
  }

  private void createColumn(TableViewer viewer, int align, int width,
      String caption, CellLabelProvider labelProvider) {
    TableViewerColumn column = new TableViewerColumn(viewer, align);
    column.getColumn().setText(caption);
    column.getColumn().setWidth(convertWidthInCharsToPixels(width));
    column.setLabelProvider(labelProvider);
  }

  private Line[] getLines() {
    ICoverageNode c = CoverageTools.getCoverageInfo(getElement());
    if (c == null) {
      return new Line[0];
    } else {
      return new Line[] {
          new Line(UIMessages.CoveragePropertyPageInstructions_label,
              c.getInstructionCounter()),
          new Line(UIMessages.CoveragePropertyPageBranches_label,
              c.getBranchCounter()),
          new Line(UIMessages.CoveragePropertyPageLines_label,
              c.getLineCounter()),
          new Line(UIMessages.CoveragePropertyPageMethods_label,
              c.getMethodCounter()),
          new Line(UIMessages.CoveragePropertyPageTypes_label,
              c.getClassCounter()),
          new Line(UIMessages.CoveragePropertyPageComplexity_label,
              c.getComplexityCounter()) };
    }
  }

  private static class Line {
    public final String label;
    public final ICounter counter;

    public Line(String label, ICounter counter) {
      this.label = label;
      this.counter = counter;
    }
  }

}
TOP

Related Classes of com.mountainminds.eclemma.internal.ui.dialogs.CoveragePropertyPage$Line

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.