/* * Copyright 2008-2014 by Emeric Vernat * * This file is part of Java Melody. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.bull.javamelody; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import net.bull.javamelody.SamplingProfiler.SampledMethod; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.pdf.PdfPCell; /** * Rapport pdf pour les hotspots du sampling. * @author Emeric Vernat */ class PdfHotspotsReport extends PdfAbstractTableReport { private final List<SampledMethod> hotspots; private final long totalCount; private final DecimalFormat percentFormat = I18N.createPercentFormat(); PdfHotspotsReport(List<SampledMethod> hotspots, Document document) { super(document); assert hotspots != null; this.hotspots = hotspots; long total = 0; for (final SampledMethod hotspot : hotspots) { total += hotspot.getCount(); } this.totalCount = total; } @Override void toPdf() throws DocumentException { writeHeader(); writeHotspots(); } private void writeHotspots() throws DocumentException { for (final SampledMethod hotspot : hotspots) { nextRow(); writeHotspot(hotspot); } addTableToDocument(); } private void writeHeader() throws DocumentException { final List<String> headers = createHeaders(); final int[] relativeWidths = new int[headers.size()]; Arrays.fill(relativeWidths, 0, headers.size(), 1); relativeWidths[0] = 12; // méthode initTable(headers, relativeWidths); } private List<String> createHeaders() { final List<String> headers = new ArrayList<String>(); headers.add(getString("Methode_executee")); headers.add(getString("percent_time")); return headers; } private void writeHotspot(SampledMethod hotspot) { final PdfPCell defaultCell = getDefaultCell(); defaultCell.setHorizontalAlignment(Element.ALIGN_LEFT); addCell(hotspot.getClassName() + '.' + hotspot.getMethodName()); defaultCell.setHorizontalAlignment(Element.ALIGN_RIGHT); final double percent = 100d * hotspot.getCount() / totalCount; addCell(percentFormat.format(percent)); } }