Report plugins

Bueno una de las cosas que me quedan por hacer o empezar ha hacer es el motor de informes o yai que es el codeName.

Estuve que elegir en que formatos pdf, RTF, excel , Open  Calc, pues viendo todas las herramientas de reporting vi que lo estándar es pdf,excel y html, esto me llevo a una pregunta que usar para pdf ya que para Excel esta mas que claro POI por que es la única que conozca.

Pero para pdf he visto algunas sobre todo con 2 una que me la enseño dagi3d programador cualificado donde los alla y es una capa que recubre a  iText que es la otra.

Voy a enseñar un poco ambas con algunos ejemplos y los resultados de mis pruebas con ellas , siempre con una cantidad de datos mas grande de lo avitual para los sistemas de reporte.

la Primera es iText,a segunda es la que he hablado anterior mente Flying Saucer y por ultima la todo poderosa PIO de Apache.

iText

iText

iText es una biblioteca Open Source para crear y manipular archivos PDF, RTF, y HTML en Java. Fue escrita por Bruno Lowagie, Paulo Soares; está distribuida bajo la Mozilla Public License con la LGPL como licencia alternativa.

Esta librería es de las mejores en el mundo java para la exportación a pdf , el problema que tiene es la maqueta  es muy complicada y eso hacer difícil su uso , requiere una gran cantidad  horas de pruebas para poder usarlas.

Flying Saucer

Esta librería es la que he comentado antes muy por encima , esta iberia emcapsula a iText y lo que   hace es renderizar una pagina xhtml+css y sacarte el pdf . Esta librería tiene problemas o mas de 6000 registros en base de datos , usa mucha memoria ya que utiliza DOM para poder pasear el xhtml.

Esta es POI para poder generar ficheros excel ya que es el formato de fichero mas común dentro de los negocios , hay barbaridades hechas con POI , tiene otras aplicaciones pero esta creo que es la mas común.

Ejemplos de uso

Ahora voy a explicar como voy a usar cada una y por que. La primera es POI , necesito un método para que cuando ejecute la query me de un fichero .xsl con el nombre que yo quiera tanto en el fichero como en las pestañas.

xsl

public void escribirExcelOnlySheetHerad(String nameXsl, String nameSheet,
ResultSet datos) throws SQLException, IOException {
HSSFWorkbook wb = new HSSFWorkbook();
// Creo la pestaña
HSSFSheet sheet = wb.createSheet(nameSheet);
HSSFRow row = sheet.createRow((short) 1);
// pongo las cabezeras de la query
for (int j = 1; j <= datos.getMetaData().getColumnCount(); j++) {
HSSFCell cell = row.createCell(j, HSSFCell.CELL_TYPE_BLANK);
.......

Ahora toca iText :D.Como ya hable iText es para pasar a pdf tiene muy buena documentación y es potente , pero es complicada de manejar.Tiene un buen libro

itext

public void RendderPEF(ResultSet rs,String NameFile,String size){
try {
int numS = rs.getMetaData().getColumnCount();
Document document  = new Document();
PdfWriter.getInstance(document, new FileOutputStream(NameFile));
document.open();
PdfPTable table = new PdfPTable(numS);
PdfPCell cell = new PdfPCell(new Paragraph("Informe Ejemplo"));
cell.setColspan(numS);
table.addCell(cell);
int i = 1;
while (rs.next()) {
for(int j = 0 ; j>rs.getMetaData().getColumnCount();j++){
table.addCell(rs.getString(j));
….

y por ultimo flying saucer , lo que tengo es un método que saca un xhtml con el ResulSet y me genera el informe, el problema de esta librería es que come mucha ram para informes de 6000 registros , por usar DOM para renderizar el informe , pero esta librería es muy sencilla de manipular ya que con css uno hace maravillaras.

String inputFile = "samples/firstdoc.xhtml";
String url = new File(inputFile).toURI().toURL().toString();
String outputFile = "firstdoc.pdf";
OutputStream os = new FileOutputStream(outputFile);

ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);

os.close();

Este es el diagrama UML de yai que es básicamente un modelo Strategy.

reportSiento si el post es algo grande :P.

Fuentes:

UML- Plugin

try {
_uacct = “UA-4775371-3”;
urchinTracker();
} catch(err) {}

Uno de las cosas que mas me preocupa es la forma de hacer escalable una aplicación. Y que  mantenga una relación rapidez – potencia.Por eso pensé en hace mediante plugins la aplicación.

Definicion de plugin:es una aplicación que se relaciona con otra para aportarle una función nueva y generalmente muy especifica. Esta aplicación adicional es ejecutada por la aplicación principal e interactúan por medio de la API.

El primer plugin se diseñó en 1987 para el programa HyperCard de Macintosh.

Actualmente existe como una forma de expandir programas de forma modular, de manera que se puedan añadir sin afectar a las ya existentes ni complicar el desarrollo del programa principal.

Esto se refleja al intentar abrir un archivo que no posee un complemento en el sistema, como los documentos en PDF o las animaciones en Flash, lo que generará un error y se entrega, generalmente, un enlace para conseguir el complemento que no existe en el ordenador.

Otro de las cosas por las cuales quiero que sea por plugins es por que hay gente que me ha pedido participar. Gente del mundo del OpenSource  (Pentaho)y gente de mi empresa , que también es del OpenSource (Stratebi), ademas de amigos, pero claro también estoy en un concurso y he aceptado las normas del mismo , así que para no perder posibilidades y por no desvirtuar el asunto , he montado otra rama que esta fuera de redclover pero que se puede integrar (Zetsu).

Así  que todo aquel que quiera hacer algo para redClover solo tiene que respetar una interface y asi todos tan contentos.

De momento ya esta en mi Road Map  los siguiente:

  1. DataMing  con Weka y su funcionalidad es Clutering
  2. Estadística con  las siguientes librerías
    1. statdistlib
    2. Apache Math
    3. Clot que es del CERN
  3. Teoría de Juegos
    1. Dilema del prisionero

Este es diagrama para hacer los plugins después solo hay que hacer un *. jar y meterlo en la carpeta de plugins y a correr.

Diagrama de uml
Diagrama de uml

Lo unico que bueno , quiza no entienda y por lo tanto no pueda valorar , es el tema de “Crear Comunidad”. Ya que si gente del producto original , y empresas que se dedican a esto del Open Source ,se interesa, que les tenga que decir ” NO puedes” , pues me da cosa , pero es lo que hay y hay que aceptarlo.

Pero por lo menos una de las cosas que mas me esta gustando es la aceptación del posible producto.