/*
* 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.DateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Phrase;
/**
* Partie du rapport pdf pour les erreurs http et dans les logs.
* @author Emeric Vernat
*/
class PdfCounterErrorReport extends PdfAbstractTableReport {
private final Counter counter;
private final DateFormat dateTimeFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,
DateFormat.MEDIUM, I18N.getCurrentLocale());
private final Font severeFont = PdfFonts.SEVERE_CELL.getFont();
private final Font normalFont = PdfFonts.NORMAL.getFont();
PdfCounterErrorReport(Counter counter, Document document) {
super(document);
assert counter != null;
assert counter.isErrorCounter();
this.counter = counter;
}
@Override
void toPdf() throws DocumentException {
final List<CounterError> errors = counter.getErrors();
if (errors.isEmpty()) {
addToDocument(new Phrase(getString("Aucune_erreur"), normalFont));
} else {
writeErrors(errors);
}
}
private void writeErrors(List<CounterError> errors) throws DocumentException {
assert errors != null;
final boolean displayUser = HtmlCounterErrorReport.shouldDisplayUser(errors);
final boolean displayHttpRequest = HtmlCounterErrorReport.shouldDisplayHttpRequest(errors);
if (errors.size() >= Counter.MAX_ERRORS_COUNT) {
addToDocument(new Phrase(getFormattedString("Dernieres_erreurs_seulement",
Counter.MAX_ERRORS_COUNT) + '\n', severeFont));
}
writeHeader(displayUser, displayHttpRequest);
for (final CounterError error : errors) {
nextRow();
writeError(error, displayUser, displayHttpRequest);
}
addTableToDocument();
}
private void writeHeader(boolean displayUser, boolean displayHttpRequest)
throws DocumentException {
final List<String> headers = createHeaders(displayUser, displayHttpRequest);
final int[] relativeWidths = new int[headers.size()];
Arrays.fill(relativeWidths, 0, headers.size(), 1);
if (displayHttpRequest) {
relativeWidths[1] = 4; // requĂȘte http
}
relativeWidths[headers.size() - 1] = 4; // message d'erreur
initTable(headers, relativeWidths);
}
private List<String> createHeaders(boolean displayUser, boolean displayHttpRequest) {
final List<String> headers = new ArrayList<String>();
headers.add(getString("Date"));
if (displayHttpRequest) {
headers.add(getString("Requete"));
}
if (displayUser) {
headers.add(getString("Utilisateur"));
}
headers.add(getString("Erreur"));
return headers;
}
private void writeError(CounterError error, boolean displayUser, boolean displayHttpRequest) {
getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
addCell(dateTimeFormat.format(error.getDate()));
getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
if (displayHttpRequest) {
if (error.getHttpRequest() == null) {
addCell("");
} else {
addCell(error.getHttpRequest());
}
}
if (displayUser) {
if (error.getRemoteUser() == null) {
addCell("");
} else {
addCell(error.getRemoteUser());
}
}
addCell(error.getMessage());
}
}