Package org.jacoco.report.internal.html.page

Source Code of org.jacoco.report.internal.html.page.SessionsPage

/*******************************************************************************
* Copyright (c) 2009, 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 org.jacoco.report.internal.html.page;

import java.io.IOException;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

import org.jacoco.core.data.ExecutionData;
import org.jacoco.core.data.SessionInfo;
import org.jacoco.report.ILanguageNames;
import org.jacoco.report.internal.ReportOutputFolder;
import org.jacoco.report.internal.html.HTMLElement;
import org.jacoco.report.internal.html.IHTMLReportContext;
import org.jacoco.report.internal.html.index.ElementIndex;
import org.jacoco.report.internal.html.resources.Styles;

/**
* Page to display information about sessions covered by this report.
*/
public class SessionsPage extends ReportPage {

  private static final String MSG_SESSIONS = "This coverage report is based "
      + "on execution data from the following sessions:";

  private static final String MSG_NO_SESSIONS = "No session information available.";

  private static final String MSG_EXECDATA = "Execution data for the "
      + "following classes is considered in this report:";

  private static final String MSG_NO_EXECDATA = "No execution data available.";

  private final List<SessionInfo> sessionInfos;

  private final DateFormat dateFormat;

  private final List<ExecutionData> executionData;

  private final ElementIndex index;

  /**
   * Creates a new page page to display session information.
   *
   * @param sessionInfos
   *            session info objects
   * @param executionData
   *            execution data objects
   * @param index
   *            index for cross-linking
   * @param parent
   *            optional hierarchical parent
   * @param folder
   *            base folder to create this page in
   * @param context
   *            settings context
   */
  public SessionsPage(final List<SessionInfo> sessionInfos,
      final Collection<ExecutionData> executionData,
      final ElementIndex index, final ReportPage parent,
      final ReportOutputFolder folder, final IHTMLReportContext context) {
    super(parent, folder, context);
    this.sessionInfos = sessionInfos;
    this.executionData = new ArrayList<ExecutionData>(executionData);
    this.index = index;
    this.dateFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,
        DateFormat.DEFAULT, context.getLocale());
    final ILanguageNames names = context.getLanguageNames();
    Collections.sort(this.executionData, new Comparator<ExecutionData>() {
      public int compare(final ExecutionData e1, final ExecutionData e2) {
        return names.getQualifiedClassName(e1.getName()).compareTo(
            names.getQualifiedClassName(e2.getName()));
      }
    });
  }

  @Override
  protected void content(final HTMLElement body) throws IOException {
    if (sessionInfos.isEmpty()) {
      body.p().text(MSG_NO_SESSIONS);
    } else {
      body.p().text(MSG_SESSIONS);
      sessionTable(body);
    }
    if (executionData.isEmpty()) {
      body.p().text(MSG_NO_EXECDATA);
    } else {
      body.p().text(MSG_EXECDATA);
      executionDataTable(body);
    }
  }

  private void sessionTable(final HTMLElement body) throws IOException {
    final HTMLElement table = body.table(Styles.COVERAGETABLE);
    {
      final HTMLElement tr = table.thead().tr();
      tr.td().text("Session");
      tr.td().text("Start Time");
      tr.td().text("Dump Time");
    }
    final HTMLElement tbody = table.tbody();
    for (final SessionInfo i : sessionInfos) {
      final HTMLElement tr = tbody.tr();
      tr.td().span(Styles.EL_SESSION).text(i.getId());
      tr.td().text(dateFormat.format(new Date(i.getStartTimeStamp())));
      tr.td().text(dateFormat.format(new Date(i.getDumpTimeStamp())));
    }
  }

  private void executionDataTable(final HTMLElement body) throws IOException {
    final HTMLElement table = body.table(Styles.COVERAGETABLE);
    {
      final HTMLElement tr = table.thead().tr();
      tr.td().text("Class");
      tr.td().text("Id");
    }
    final HTMLElement tbody = table.tbody();
    final ILanguageNames names = context.getLanguageNames();
    for (final ExecutionData e : executionData) {
      final HTMLElement tr = tbody.tr();
      final String link = index.getLinkToClass(e.getId());
      final String qualifiedName = names.getQualifiedClassName(e
          .getName());
      if (link == null) {
        tr.td().span(Styles.EL_CLASS).text(qualifiedName);
      } else {
        tr.td().a(link, Styles.EL_CLASS).text(qualifiedName);
      }
      final String id = String.format("%016x", Long.valueOf(e.getId()));
      tr.td().code().text(id);
    }
  }

  @Override
  protected String getFileName() {
    return ".sessions.html";
  }

  public String getLinkStyle() {
    return Styles.EL_SESSION;
  }

  public String getLinkLabel() {
    return "Sessions";
  }

}
TOP

Related Classes of org.jacoco.report.internal.html.page.SessionsPage

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.