/* * 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.io.IOException; import java.io.Writer; /** * Partie du rapport html pour les informations sur la base de donnĂ©es. * @author Emeric Vernat */ class HtmlDatabaseInformationsReport extends HtmlAbstractReport { private final DatabaseInformations databaseInformations; static class TableReport extends HtmlAbstractReport { private final String[][] values; private final int nbColumns; TableReport(String[][] values, int nbColumns, Writer writer) { super(writer); this.values = values.clone(); this.nbColumns = nbColumns; } @Override void toHtml() throws IOException { final int rowsByColumn; if (nbColumns > 1) { rowsByColumn = (values.length - 1) / nbColumns + 1; writeln("<table width='100%' summary=''><tr><td valign='top'>"); } else { rowsByColumn = -1; } if (values.length <= 1) { return; } final String[] headerValues = values[0]; HtmlTable table = new HtmlTable(); table.beginTable(getString("database")); writeTableHeaders(headerValues); int index = 0; for (final String[] row : values) { if (index == 0) { index++; continue; } table.nextRow(); writeRow(row); index++; if (rowsByColumn > 0 && (index - 1) % rowsByColumn == 0 && index != values.length) { table.endTable(); writeln("</td><td valign='top'>"); table = new HtmlTable(); table.beginTable(getString("database")); writeTableHeaders(headerValues); } } table.endTable(); if (nbColumns > 1) { writeln("</td></tr></table>"); } } private void writeTableHeaders(String[] headerValues) throws IOException { for (final String value : headerValues) { write("<th>"); writeDirectly(value.replace("\n", "<br/>")); write("</th>"); } } private void writeRow(String[] row) throws IOException { for (final String value : row) { if (value == null || value.length() == 0) { write("<td> </td>"); } else { if (isNumber(value)) { write("<td align='right' valign='top'>"); writeDirectly(value); } else { write("<td valign='top'>"); writeDirectly(value.replace("\n", "<br/>")); } write("</td>"); } } } private static boolean isNumber(String text) { final int length = text.length(); for (int i = 0; i < length; i++) { final char c = text.charAt(i); if (!Character.isDigit(c) && c != '.') { return false; } } return true; } } HtmlDatabaseInformationsReport(DatabaseInformations databaseInformations, Writer writer) { super(writer); assert databaseInformations != null; this.databaseInformations = databaseInformations; } @Override void toHtml() throws IOException { writeLinks(); writeln("<br/>"); final String title = getString("database") + " : " + getString(databaseInformations.getSelectedRequestName()); writeTitle("db.png", title); final String[][] values = databaseInformations.getResult(); final int nbColumns = databaseInformations.getNbColumns(); new TableReport(values, nbColumns, getWriter()).toHtml(); } private void writeLinks() throws IOException { writeln("<div class='noPrint'>"); writeln("<a href='javascript:history.back()'><img src='?resource=action_back.png' alt='#Retour#'/> #Retour#</a>"); final String separator = "     "; writeln(separator); writeln("<a href='?part=database&request=" + databaseInformations.getSelectedRequestIndex() + "'><img src='?resource=action_refresh.png' alt='#Actualiser#'/> #Actualiser#</a>"); if (isPdfEnabled()) { writeln(separator); write("<a href='?part=database&request=" + databaseInformations.getSelectedRequestIndex() + "&format=pdf' title='#afficher_PDF#'>"); write("<img src='?resource=pdf.png' alt='#PDF#'/> #PDF#</a>"); } writeln(separator); writeln("<select name='request' onchange=\"location.href='?part=database&request='+options.selectedIndex;\">"); int index = 0; for (final String request : databaseInformations.getRequestNames()) { write("<option value='"); write(String.valueOf(index)); write("'"); if (index == databaseInformations.getSelectedRequestIndex()) { write(" selected='selected'"); } write(">"); write(getString(request)); write("</option>"); index++; } writeln("</select>"); writeln("</div>"); } }