Java tutorial
/* * This file is part of Biblioteca-Digital de Univalle. * * Biblioteca-Digital de Univalle is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Biblioteca-Digital de Univalle is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Biblioteca-Digital de Univalle. If not, see <http://www.gnu.org/licenses/>. * */ package biblioteca.database2.controladores; import biblioteca.database2.accesoDatos.DaoEstadisticas; import biblioteca.reportes.ChartCreator; import com.itextpdf.text.BadElementException; import com.itextpdf.text.Element; import com.itextpdf.text.Image; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfPTable; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.MalformedURLException; import java.sql.ResultSet; import java.util.ArrayList; import org.jfree.chart.JFreeChart; import org.jfree.chart.encoders.EncoderUtil; public class ControladorEstadisticas { public ControladorEstadisticas() { } public ArrayList<Element> estadisticasDocumentosDescargados(String dow, String dom, String month, String year, String tipo_usuario, String[] franja, String[] desde, String[] hasta, String area, String autor, String doc_tipo, String usuario, boolean todos, int salida) throws BadElementException, MalformedURLException, IOException { ArrayList<Element> Salida = new ArrayList<Element>(6); BufferedImage bufferedImage; Image image; ResultSet rs = new DaoEstadisticas().documentosMasDescargados(dow, dom, month, year, tipo_usuario, franja, desde, hasta, area, autor, doc_tipo, usuario, todos); int total = 0; ArrayList<ArrayList<String>> resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); ArrayList<String> Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 1, 2); for (int i = 1; i < resultadosTabla.size(); i++) { total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); } PdfPTable tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("* Diagrama de Pastel y Diagrama de Barras: Documentos Descargados")); JFreeChart chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Documentos Descargados"); bufferedImage = chart.createBufferedImage(500, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(250, 300); image.setAlignment(Image.MIDDLE); Salida.add(image); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Documentos Descargados", "Identificador Documento", "Numero de Descargados"); bufferedImage = chart.createBufferedImage(1000, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(500, 250); image.setAlignment(Image.MIDDLE); Salida.add(image); return Salida; } public ArrayList<Element> estadisticasDocumentosConsultados(String dow, String dom, String month, String year, String tipo_usuario, String[] franja, String[] desde, String[] hasta, String area, String autor, String doc_tipo, String usuario, boolean todos, int salida) throws BadElementException, MalformedURLException, IOException { ArrayList<Element> Salida = new ArrayList<Element>(6); BufferedImage bufferedImage; Image image; ResultSet rs = new DaoEstadisticas().documentosMasConsultados(dow, dom, month, year, tipo_usuario, franja, desde, hasta, area, autor, doc_tipo, usuario, todos); int total = 0; ArrayList<ArrayList<String>> resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); ArrayList<String> Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 2); for (int i = 1; i < resultadosTabla.size(); i++) { total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); } PdfPTable tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("* Diagrama de Pastel y Diagrama de Barras: Documentos Consultados")); JFreeChart chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Documentos Consultados"); bufferedImage = chart.createBufferedImage(500, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(250, 300); image.setAlignment(Image.MIDDLE); Salida.add(image); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Documentos Consultados", "Identificador Documento", "Numero de Consultas"); bufferedImage = chart.createBufferedImage(1000, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(500, 250); image.setAlignment(Image.MIDDLE); Salida.add(image); return Salida; } public ArrayList<Element> estadisticasUsuariosRegistradosMultiplesTablas(boolean dow, boolean dom, boolean mes, String Year, String[] franja, String desde[], String[] hasta, boolean genero, boolean vinculo, boolean tipo, boolean estado, boolean area, int salida) throws BadElementException, MalformedURLException, IOException { BufferedImage bufferedImage; Image image; ResultSet rs; ArrayList<Element> Salida = new ArrayList<Element>(100); ArrayList<Element> images = new ArrayList<Element>(100); DaoEstadisticas controlador = new DaoEstadisticas(); JFreeChart chart; ArrayList<ArrayList<String>> resultadosTabla; ArrayList<String> Array2DtoArrayPlane; PdfPTable tabla = null; int total = 0; if (dow) { ArrayList<String> tmp = controlador.consultarUsuariosRegistradosPorDoW(); float promedio = promedio(tmp, 2); Salida.add(new Paragraph("Resultados para los das de la semana")); Salida.add(new Paragraph("\r\n")); Salida.add( biblioteca.reportes.PdfCreator.plainArrayListToPdfPTable(agregarPorcentajesALista(tmp, 2), 3)); Salida.add(new Paragraph("Promedio " + promedio)); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Pastel: Usuarios Registrados para los dias de la Semana")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(tmp), "Usuarios Registrados para los das de la semana"); bufferedImage = chart.createBufferedImage(400, 300); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(300, 200); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Barras: Usuarios Registrados para los dias de la Semana")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(tmp), "Usuarios Registrados para los das de la semana", "Das de la Semana", "Cantidad de usuarios"); bufferedImage = chart.createBufferedImage(700, 300); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(400, 200); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); } if (dom) { rs = controlador.consultarUsuariosRegistradosPorDoM(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 1); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Resultados para los das del mes")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add( new Paragraph("* Ver Anexo: Diagrama de Pastel: Usuarios Registrados para los dias del mes")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Usuarios Registrados para los das del mes"); bufferedImage = chart.createBufferedImage(500, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(250, 300); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Usuarios Registrados para los das del Mes", "Das del mes", "Cantidad de usuarios"); bufferedImage = chart.createBufferedImage(1000, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(500, 250); image.setAlignment(Image.MIDDLE); Salida.add( new Paragraph("* Ver Anexo: Diagrama de Barras: Usuarios Registrados para los dias del mes")); Salida.add(new Paragraph("\r\n")); images.add(image); images.add(new Paragraph("\r\n")); } if (mes) { ArrayList<String> tmp = controlador.consultarUsuariosRegistradosPorMes(); Salida.add(new Paragraph("Resultados para los meses")); Salida.add(new Paragraph("\r\n")); float promedio = promedio(tmp, 2); Salida.add( biblioteca.reportes.PdfCreator.plainArrayListToPdfPTable(agregarPorcentajesALista(tmp, 2), 3)); Salida.add(new Paragraph("Promedio " + promedio)); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("* Ver Anexo: Diagrama de Pastel: Usuarios Registrados para los meses")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(tmp), "Usuarios Registrados para los meses"); bufferedImage = chart.createBufferedImage(500, 300); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(350, 200); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); Salida.add(new Paragraph("* Ver Anexo: Diagrama de Barras: Usuarios Registrados para los meses")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(tmp), "Usuarios Registrados para los Meses", "Meses", "Cantidad de usuarios"); bufferedImage = chart.createBufferedImage(1000, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(500, 300); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); } if (Year != null) { ArrayList<String> tmp = controlador.consultarUsuariosRegistradosPorYear(Year); Salida.add(new Paragraph("Resultados para el ao seleccionado")); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("Ao:" + tmp.get(0) + ", Resultados:" + tmp.get(1))); Salida.add(new Paragraph("\r\n")); } if (franja != null) { ArrayList<String> tmp = controlador.consultarUsuariosRegistradosPorFranja(franja[0], franja[1]); Salida.add(new Paragraph("Resultados para la franja seleccionada")); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("Franja:" + tmp.get(0) + ", Resultados:" + tmp.get(1))); Salida.add(new Paragraph("\r\n")); } if (desde != null && hasta != null) { ArrayList<String> tmp = controlador.consultarUsuariosRegistradosPorIntervalo( desde[0] + "-" + desde[1] + "-" + desde[2], hasta[0] + "-" + hasta[1] + "-" + hasta[2]); Salida.add(new Paragraph("Resultados para el intervalo de tiempo seleccionado")); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("Intervalo de Tiempo: " + tmp.get(0) + ", Resultados:" + tmp.get(1))); Salida.add(new Paragraph("\r\n")); } if (genero) { rs = controlador.consultarUsuariosRegistradosPorGenero(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); for (int i = 0; i < resultadosTabla.size(); i++) { if (resultadosTabla.get(i).get(0).equals("F") || resultadosTabla.get(i).get(0).equals("f")) resultadosTabla.get(i).set(0, "Femenino"); if (resultadosTabla.get(i).get(0).equals("M") || resultadosTabla.get(i).get(0).equals("m")) resultadosTabla.get(i).set(0, "Masculino"); if (resultadosTabla.get(i).get(0).equals("N") || resultadosTabla.get(i).get(0).equals("n")) { resultadosTabla.remove(i); } } Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 1); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Estadisticas de Usuarios Registrados por Genero")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Pastel: Estadisticas de Usuarios Registrados por Genero")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Estadisticas de Usuarios Registrados por Genero"); bufferedImage = chart.createBufferedImage(450, 400); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(250, 200); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Estadisticas de Usuarios Registrados por Genero", "Genero", "Cantidad de Usuarios"); bufferedImage = chart.createBufferedImage(400, 400); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(200, 200); image.setAlignment(Image.MIDDLE); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Barras: Estadisticas de Usuarios Registrados por Genero")); Salida.add(new Paragraph("\r\n")); images.add(image); images.add(new Paragraph("\r\n")); } if (vinculo) { rs = controlador.consultarUsuariosRegistradosPorVinculo(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 1); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Estadisticas de Usuarios Registrados por Vinculo")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Pastel: Estadisticas de Usuarios Registrados por Vinculo")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Estadisticas de Usuarios Registrados por Vinculo"); bufferedImage = chart.createBufferedImage(500, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(300, 200); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Estadisticas de Usuarios Registrados por Vinculo", "Vinculo", "Cantidad de Usuarios"); bufferedImage = chart.createBufferedImage(500, 400); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(200, 200); image.setAlignment(Image.MIDDLE); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Barras: Estadisticas de Usuarios Registrados por Vinculo")); Salida.add(new Paragraph("\r\n")); images.add(image); images.add(new Paragraph("\r\n")); } if (tipo) { rs = controlador.consultarUsuariosRegistradosPorTipoUsuario(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); for (int i = 0; i < resultadosTabla.size(); i++) { if (resultadosTabla.get(i).get(0).equals("3")) resultadosTabla.get(i).set(0, "Normal"); else if (resultadosTabla.get(i).get(0).equals("2")) resultadosTabla.get(i).set(0, "Catalogador"); else if (resultadosTabla.get(i).get(0).equals("1")) resultadosTabla.get(i).set(0, "Administrador"); else if (resultadosTabla.get(i).get(0).equals("0")) resultadosTabla.remove(i); } Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 1); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Estadisticas de Usuarios Registrados por Tipo de Usuario")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("* Ver Anexo: Diagrama de Pastel: Estadisticas de Usuarios Tipo de Usuario")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Estadisticas de Usuarios Tipo de Usuario"); bufferedImage = chart.createBufferedImage(450, 400); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(250, 200); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Estadisticas de Usuarios Registrados por Tipo de Usuario", "Tipo de Usuario", "Cantidad de Usuarios"); bufferedImage = chart.createBufferedImage(600, 400); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(300, 200); image.setAlignment(Image.MIDDLE); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Barras: Estadisticas de Usuarios Registrados por Genero")); Salida.add(new Paragraph("\r\n")); images.add(image); images.add(new Paragraph("\r\n")); } if (estado) { rs = controlador.consultarUsuariosRegistradosPorEstado(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); for (int i = 0; i < resultadosTabla.size(); i++) { if (resultadosTabla.get(i).get(0).equals("t") || resultadosTabla.get(i).get(0).equals("T")) resultadosTabla.get(i).set(0, "Activo"); if (resultadosTabla.get(i).get(0).equals("f") || resultadosTabla.get(i).get(0).equals("F")) resultadosTabla.get(i).set(0, "Inactivo"); } Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 1); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Estadisticas de Usuarios Registrados por Estado de Cuenta")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Pastel: Estadisticas de Usuarios por Estado de Cuenta")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Estadisticas de Usuarios por Estado de Cuenta"); bufferedImage = chart.createBufferedImage(450, 400); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(250, 200); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Estadisticas de Usuarios Registrados por Estado de Cuenta", "Estado de Cuenta", "Cantidad de Usuarios"); bufferedImage = chart.createBufferedImage(600, 400); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(300, 200); image.setAlignment(Image.MIDDLE); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Barras: Estadisticas de Usuarios Registrados por Estado de Cuenta")); Salida.add(new Paragraph("\r\n")); images.add(image); images.add(new Paragraph("\r\n")); } if (area) { total = 0; rs = controlador.consultarUsuariosRegistradosPorArea(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 2); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Areas con ms Documentos Catalogados")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo Diagrama de Pastel y Diagrama de Barras para Areas con ms Documentos Catalogados")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Areas con ms Documentos Catalogados"); bufferedImage = chart.createBufferedImage(600, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(300, 300); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Areas con ms Documentos Catalogados", "Area_ID", "Numero de Documentos Catalogados"); bufferedImage = chart.createBufferedImage(900, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(450, 250); image.setAlignment(Image.MIDDLE); images.add(image); images.add(new Paragraph("\r\n")); } if (!images.isEmpty()) { Salida.add(new Paragraph("Anexos:")); Salida.add(new Paragraph("\r\n")); } for (int i = 0; i < images.size(); i++) { Salida.add(images.get(i)); } return Salida; } public ArrayList<Element> ConsultarDocumentosCatalogados(boolean dow, boolean dom, boolean month, String year, String[] franja, String[] desde, String[] Hasta, boolean area, boolean autor, boolean doc_tipo, boolean pc, boolean usuario, int salida) throws BadElementException, MalformedURLException, IOException { ArrayList<Element> Salida = new ArrayList<Element>(100); ArrayList<Element> Images = new ArrayList<Element>(100); DaoEstadisticas controlador = new DaoEstadisticas(); ResultSet rs; JFreeChart chart; BufferedImage bufferedImage; Image image; ArrayList<ArrayList<String>> resultadosTabla; ArrayList<String> Array2DtoArrayPlane; PdfPTable tabla = null; int total = 0; if (dow) { ArrayList<String> tmp = controlador.consultarDocumentosCatalogadosPorDoW(); float promedio = promedio(tmp, 2); Salida.add(new Paragraph("Resultados de Documentos Catalogados para los das de la semana")); Salida.add(new Paragraph("\r\n")); Salida.add( biblioteca.reportes.PdfCreator.plainArrayListToPdfPTable(agregarPorcentajesALista(tmp, 2), 3)); Salida.add(new Paragraph("Promedio " + promedio)); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Pastel: Documentos Catalogados para los dias de la Semana")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(tmp), "Documentos Catalogados para los Das de la Semana"); bufferedImage = chart.createBufferedImage(400, 300); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(300, 200); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo: Diagrama de Barras: Documentos Catalogados para los Das de la Semana")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(tmp), "Documentos Catalogados para los Das de la Semana", "Das de la Semana", "Cantidad de Documentos Catalogados"); bufferedImage = chart.createBufferedImage(700, 300); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(400, 200); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); } if (dom) { rs = controlador.consultarDocumentosCatalogadosPorDoM(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 1); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Resultados de Documentos Catalogados para los das del mes")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add( new Paragraph("* Ver Anexo: Diagrama de Pastel: Documentos Catalogados para los dias del mes")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Documentos Catalogados para los das del mes"); bufferedImage = chart.createBufferedImage(500, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(250, 300); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Documentos Catalogados para los das del Mes", "Das del mes", "Documentos Catalogados"); bufferedImage = chart.createBufferedImage(1000, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(500, 250); image.setAlignment(Image.MIDDLE); Salida.add( new Paragraph("* Ver Anexo: Diagrama de Barras: Documentos Catalogados para los dias del mes")); Salida.add(new Paragraph("\r\n")); Images.add(image); Images.add(new Paragraph("\r\n")); } if (month) { ArrayList<String> tmp = controlador.consultarDocumentosCatalogadosPorMes(); Salida.add(new Paragraph("Resultados de Documentos Catalogados para los meses")); Salida.add(new Paragraph("\r\n")); float promedio = promedio(tmp, 2); Salida.add( biblioteca.reportes.PdfCreator.plainArrayListToPdfPTable(agregarPorcentajesALista(tmp, 2), 3)); Salida.add(new Paragraph("Promedio " + promedio)); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("* Ver Anexo: Diagrama de Pastel: Documentos Catalogados para los meses")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(tmp), "Documentos Catalogados para los meses"); bufferedImage = chart.createBufferedImage(500, 300); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(350, 200); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); Salida.add(new Paragraph("* Ver Anexo: Diagrama de Barras: Documentos Catalogados para los meses")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(tmp), "Documentos Catalogados para los Meses", "Meses", "Documentos Catalogados"); bufferedImage = chart.createBufferedImage(1000, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(500, 300); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); } if (year != null) { ArrayList<String> tmp = controlador.consultarDocumentosCatalogadosPorYear(year); Salida.add(new Paragraph("Resultados para el ao seleccionado")); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("Ao: " + tmp.get(0) + ", Resultados:" + tmp.get(1))); Salida.add(new Paragraph("\r\n")); } if (franja != null) { ArrayList<String> tmp = controlador.consultarDocumentosCatalogadosPorFranja(franja[0], franja[1]); Salida.add(new Paragraph("Resultados para la franja seleccionada")); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("Franja:" + tmp.get(0) + ", Resultados:" + tmp.get(1))); Salida.add(new Paragraph("\r\n")); } if (desde != null && Hasta != null) { ArrayList<String> tmp = controlador.consultarDocumentosCatalogadosPorIntervalo( desde[0] + "-" + desde[1] + "-" + desde[2], Hasta[0] + "-" + Hasta[1] + "-" + Hasta[2]); Salida.add(new Paragraph("Resultados para el intervalo de tiempo seleccionado")); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph("Intervalo de Tiempo: " + tmp.get(0) + ", Resultados:" + tmp.get(1))); Salida.add(new Paragraph("\r\n")); } if (area) { total = 0; rs = controlador.consultarDocumentosCatalogadosPorArea(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 2); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Areas con ms Documentos Catalogados")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo Diagrama de Pastel y Diagrama de Barras para Areas con ms Documentos Catalogados")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Areas con ms Documentos Catalogados"); bufferedImage = chart.createBufferedImage(600, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(300, 300); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Areas con ms Documentos Catalogados", "Area_ID", "Numero de Documentos Catalogados"); bufferedImage = chart.createBufferedImage(900, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(450, 250); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); } if (autor) { total = 0; rs = controlador.consultarDocumentosCatalogadosPorAutor(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 1, 3); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Autores con ms Documentos Catalogados")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo Diagrama de Pastel y Diagrama de Barras para Autores con ms Documentos Catalogados")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Autores con ms Documentos Catalogados"); bufferedImage = chart.createBufferedImage(600, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(300, 300); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Autores con ms Documentos Catalogados", "Nombre Autor", "Numero de Documentos Catalogados"); bufferedImage = chart.createBufferedImage(1000, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(400, 300); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); } if (doc_tipo) { total = 0; rs = controlador.consultarDocumentosCatalogadosPorTipoMaterial(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 1); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Tipos de Material con ms Documentos Catalogados")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo Diagrama de Pastel y Diagrama de Barras para Tipos de Material con ms Documentos Catalogados")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Tipos de Material con ms Documentos Catalogados"); bufferedImage = chart.createBufferedImage(600, 600); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); bufferedImage = chart.createBufferedImage(300, 300); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Tipos de Material con ms Documentos Catalogados", "Tipo de Material", "Numero de Documentos Catalogados"); bufferedImage = chart.createBufferedImage(900, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(450, 250); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); } if (pc) { total = 0; rs = controlador.consultarDocumentosCatalogadosPorPalabraClave(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 1); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Palabras Clave con ms Documentos Catalogados")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo Diagrama de Pastel y Diagrama de Barras para Palabras Clave con ms Documentos Catalogados")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Palabras Clave con ms Documentos Catalogados"); bufferedImage = chart.createBufferedImage(500, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(250, 250); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Palabras Clave con ms Documentos Catalogados", "Palabras Clave", "Numero de Documentos Catalogados"); bufferedImage = chart.createBufferedImage(900, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(450, 250); Images.add(image); Images.add(new Paragraph("\r\n")); } if (usuario) { total = 0; rs = controlador.consultarDocumentosCatalogadosPorUsuarios(); resultadosTabla = biblioteca.reportes.PdfCreator.resultSetToArrayList(rs); Array2DtoArrayPlane = biblioteca.reportes.PdfCreator.Array2DtoArrayPlane(resultadosTabla, 0, 2); for (int i = 1; i < resultadosTabla.size(); i++) total += Integer.parseInt(resultadosTabla.get(i).get(resultadosTabla.get(i).size() - 1)); tabla = biblioteca.reportes.PdfCreator.arrayListToStatisticTable(resultadosTabla, total, salida); Salida.add(new Paragraph("Usuarios que mas Catalogan Documentos")); Salida.add(new Paragraph("\r\n")); Salida.add(tabla); Salida.add(new Paragraph("\r\n")); Salida.add(new Paragraph( "* Ver Anexo Diagrama de Pastel y Diagrama de Barras para Usuarios que mas Catalogan")); Salida.add(new Paragraph("\r\n")); chart = ChartCreator.generatePieChart(ChartCreator.asignarPieDataset(Array2DtoArrayPlane), "Usuarios que mas Catalogan"); bufferedImage = chart.createBufferedImage(500, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(250, 250); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); chart = ChartCreator.generateBarChart(ChartCreator.asignarBarDataset(Array2DtoArrayPlane), "Usuarios que mas Catalogan", "Username", "Numero de Documentos Catalogados"); bufferedImage = chart.createBufferedImage(900, 500); image = Image.getInstance(EncoderUtil.encode(bufferedImage, "png")); image.scaleAbsolute(450, 250); image.setAlignment(Image.MIDDLE); Images.add(image); Images.add(new Paragraph("\r\n")); } if (!Images.isEmpty()) { Salida.add(new Paragraph("Anexos:")); Salida.add(new Paragraph("\r\n")); } for (int i = 0; i < Images.size(); i++) { Salida.add(Images.get(i)); } return Salida; } private float promedio(ArrayList<String> datos, int columnas) { int total = 0, n = 0; for (int i = columnas + 1; i < datos.size(); i += columnas) { total += Integer.parseInt(datos.get(i)); n++; } return (float) total / n; } private ArrayList<String> agregarPorcentajesALista(ArrayList<String> datos, int columnas) { int total = 0; ArrayList<String> salida = new ArrayList<String>((int) (datos.size() * 1.5)); for (int i = columnas + 1; i < datos.size(); i += columnas) { total += Integer.parseInt(datos.get(i)); } for (int i = 0; i < columnas; i++) { salida.add(datos.get(i)); } salida.add("Porcentaje"); for (int i = columnas; i < datos.size(); i++) { salida.add(datos.get(i)); if (i % (columnas) == columnas - 1) { salida.add(((int) ((Integer.parseInt(datos.get(i)) * 100) / total)) + "%"); } } return salida; } }