Fetishcode…Thinking in objects

Thinking in objects

Archivo para la categoría "Java"

Alternativas Search & Replace en Java sobre un documento plantilla

sin comentarios

This document summarizes a research about the different options for a java implementation of Search & Replace on a word document. The need was to develop a logic that could locate “labels” or text marked in any way known in a word template and replace dynamic values from database.

Desde fetishcode queremos compartir con vosotros un documento creemos muy valioso. En él se resume una investigación que nos ha llevado sudor y lágrimas sobre las diferentes alternativas en java para realizar una implementación de Search&Replace sobre un documento word. La necesidad era desarrollar una lógica que pudiera localizar “etiquetas” o texto marcados de alguna forma conocida en una plantilla word y sustituirlas por valores dinámicos de base de datos.

Como podreis leer no existe una opción asequible en cuanto a tiempo para desarrollarlo completamente en java. Es posible hacerlo pero seguramente requiere el trabajo de 2 o 3 desarrolladores durante bastantes meses.

La conclusión que hemos podido sacar es que es mucho más asequible y mantenible el uso de herramientas de reporting o equivalentes donde el cliente cree su propia plantilla y posteriormente se convierta a pdf. Aunque esta solución requiera aprendizaje por parte del cliente.

Documento: alternativas_search&replace_pdf

Escrito por suestar

Diciembre 3, 2009 a 11:54 am

Escrito en Java

Etiquetado con , ,

Trabajar con ArrayList en Java.

con 3 comentarios

Os dejo una pequeño code snippet con las funciones más básicas que podemos hacer sobre un ArrayList.

 public  ArrayList al = new ArrayList();

 //limpiamos todos los elementos array
 public void clearArray(){
 al.clear();
 }

 //añadimos un elemento
 public void addElement(){
 al.add("");
 System.out.println("El array contiene ahora: " + al);
 }

 //borramos un elemento
 public void removeLastElement(){
 al.remove(al.size()-1);
 System.out.println("El array contiene ahora: " + al);
 }
 

Escrito por fetishcode

Junio 10, 2009 a 1:06 pm

Escrito en Java

JasperReports + Java: Convertir report a distintos formatos.

con 6 comentarios

Aquí les dejo una clase de ejemplo, para poder transformar un report, creado con JasperReports, en distintos formatos.(pdf, html, csv, xls,…)


import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRCsvExporter;
import net.sf.jasperreports.engine.export.JRRtfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;

public class Jasper {
    public Jasper() {
    }

    public static void main(String[] args) {
        Jasper jasper = new Jasper();
        Connection conn = null;

        //Cargamos el driver JDBC
            try {
              Class.forName("oracle.jdbc.driver.OracleDriver");
            }catch (ClassNotFoundException e) {
              System.out.println("JDBC Driver not found.");}
            try {
                String dburl = "jdbc:oracle:thin:@localhost:1521:XE";
                conn = DriverManager.getConnection(dburl,"user","pass");

            }catch (SQLException e){
              System.out.println("Error de conexión: " + e.getMessage());}

        JasperReport report;

        try {

            report = JasperCompileManager.compileReport("C:\\report.jrxml");

            JasperPrint print = JasperFillManager.fillReport(report, null, conn);

            //Exporta el informe a PDF
            String destFileNamePdf="C:\\trabajo\\reporte1.pdf";
            //Creación del PDF
            JasperExportManager.exportReportToPdfFile(print, destFileNamePdf);

            /*Otras importaciones

            //Exporta el informe a HTML
             JasperExportManager.exportReportToHtmlFile(print, destFileNamePdf);

            //Exporta el informe a excel

            OutputStream ouputStream= new FileOutputStream(new File("C:/trabajo/catalog.xls"));
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

            JRXlsExporter exporterXLS = new JRXlsExporter();
            exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT,print);
            exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM,byteArrayOutputStream);

            exporterXLS.exportReport();

            ouputStream.write(byteArrayOutputStream.toByteArray());
            ouputStream.flush();
            ouputStream.close();

            //Exporta el informe a csv

            String destFileNamePdf="C:\\trabajo\\reporte1.csv";
            JRCsvExporter exporter = new JRCsvExporter();
            File destFile = new File(destFileNamePdf);

            exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
            destFile.toString());

            exporter.exportReport();

            //Exporta el informe a rtf

            OutputStream ouputStream= new FileOutputStream(new File("C:/trabajo/catalog.rtf"));
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

            JRRtfExporter exporter = new JRRtfExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);

            exporter.exportReport();

            ouputStream.write(byteArrayOutputStream.toByteArray());
            ouputStream.flush();
            ouputStream.close();

            */

        } catch (Exception e) {System.out.println("Error"+e);}

    }
}

Escrito por fetishcode

Enero 23, 2009 a 9:12 am

Escrito en Java

Etiquetado con

Oracle proxy users

sin comentarios

Generalmente las aplicaciones JEE usan un pool de conexiones, donde el usuario es genérico. Esto dependiendo de donde se tenga implementada la lógica de negocio puede ser un inconveniente.

Quizá en algún caso nos interesa saber que usuario accede realmente a la base de datos, por que tenemos reglas de negocio implementadas en BBDD o reglas de seguridad o de acceso

Desde Oracle 10 se puede hacer uso de Oracle proxy users, proporcionando una manera sencilla de saber el usuario conectado en base de datos

En it-eye hablan profundamente del tema:

Escrito por fetishcode

Noviembre 14, 2008 a 7:59 am

Escrito en Java

Etiquetado con , ,

Recorrer hashtable

con 2 comentarios

Enumeration e = ht.keys();
Object obj;
  while (e.hasMoreElements()) {
     obj = e.nextElement();
     System.out.println("clave "+ obj +": " + ht.get(obj));
  }

Escrito por fetishcode

Noviembre 12, 2008 a 3:08 pm

Escrito en Java

Etiquetado con

Font Underline en Java

sin comentarios

Aquí les dejo un método que añade la propiedad Underline o subrayado a Font

/**
* Dado un String y una fuente con las propiedades que se quiera.
* añade la propiedad Underline
* @param s texto que se quiere subrayado
* @param f fuente
* @return el texto formateado
*/
private AttributedString fontUnderline(String s, Font f){
AttributedString as = new AttributedString(s);
as.addAttribute(TextAttribute.FONT, f);
as.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
return as;
}

Si trabajamos con Graphics en java:

g2.drawString(fontUnderline (s,Arial_Normal_10).getIterator(), 24, 70);

Escrito por fetishcode

Noviembre 3, 2008 a 9:18 am

Escrito en Java

Java Conversion Utils

sin comentarios

Java – comparing strings

Use == for primitive data types like int

If (mystring == null)

Use the equals() method to compare objects

Use .equals for strings : if (a.equals(“cat”))

Java – Converting int to string

String myString = Integer.toString(my int value) or String str = “” + i

Java – Converting String to int

int i = Integer.parseInt(str);

or int i = Integer.valueOf(str).intValue();

 

 

double to String:

String str = Double.toString(i);

 

 

long to String:

String str = Long.toString(l);

 

 

float to String:

String str = Float.toString(f);

 

 

String to double:

double d = Double.valueOf(str).doubleValue();

 

String to long:

long l = Long.valueOf(str).longValue(); or long l = Long.parseLong(str);

 

String to float:

float f = Float.valueOf(str).floatValue();

decimal to binary:

int i = 42;
String binstr = Integer.toBinaryString(i);

decimal to hexadecimal:

int i = 42; String hexstr = Integer.toString(i, 16);
or String hexstr = Integer.toHexString(i);
or (with leading zeroes and uppercase)
public class Hex { public static void main(String args[]){
int i = 42;
System.out.print (Integer.toHexString( 0×10000 | i).substring(1).toUpperCase());
 }
 }

 

hexadecimal to integer:

int i = Integer.valueOf(“B8DA3″, 16).intValue(); or int i = Integer.parseInt(“B8DA3″, 16);

ASCII code to String

int i = 64;String aChar = new Character((char)i).toString();

integer to ASCII code (byte)

char c = ‘A’;int i = (int) c; // i will have the value 65 decimal

integer to boolean

b = (i != 0);

 

boolean to integer

i = (b)?1:0;

Escrito por fetishcode

Junio 21, 2008 a 6:10 am

Escrito en Java

Etiquetado con ,

Combos dependientes en jsp con AJAX.

con 9 comentarios

Para ello lo que haremos será crear los combos dependientes en jsp separados,llamarles via ajax y el resultado incrustarlo en el jsp que contiene el formulario con el combo principal.
A continuación un pequeño ejemplo:

Jsp Principal:

<form name="formulario" action="action.jsp" method="POST" id="formulario">
   <div>
      <label for="comboprincipal"> comboPrincipal </label>
      <select name=" comboprincipal " id=" comboprincipal " onchange="javascript:cargarCombo(' combodependiente.jsp', 'comboprincipal', div_combodependiente)">
            <option value="">Selecciona</option>
             < %//cogemos valores de la bbdd%>
       </select>
     </div>
     <div id="div_combodependiente">
         <label for="combodependiente">comboDependiente</label>
         <select name="combodependiente"  id="combodependiente" ></select>
     </div>
 </form>

A continuación el javascript que hace la peticion AJAX del jsp combodependiente. Este método recibe tres parámetros:el jsp que tiene que llamar, el campo que ha recogido del combodeprincipal, del cual depende y el id del componente html donde volcara el resultado de la petición Ajax.

/*PETICIONES AJAX PARA COMBOS ANIDADOS*/
var peticion = false;
var  testPasado = false;
try {
  peticion = new XMLHttpRequest();
  } catch (trymicrosoft) {
  try {
  peticion = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (othermicrosoft) {
  try {
  peticion = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (failed) {
  peticion = false;
  }
  }
}
if (!peticion)
alert("ERROR AL INICIALIZAR!");

function cargarCombo (url, comboAnterior, element_id) {
    //Obtenemos el contenido del div
    //donde se cargaran los resultados
    var element =  document.getElementById(element_id);
    //Obtenemos el valor seleccionado del combo anterior
    var valordepende = document.getElementById(comboAnterior)
    var x = valordepende.value
    //construimos la url definitiva
    //pasando como parametro el valor seleccionado
    var fragment_url = url+'?Id='+x;
    element.innerHTML = '<img src="Imagenes/loading.gif" />';
    //abrimos la url
    peticion.open("GET", fragment_url);
    peticion.onreadystatechange = function() {
        if (peticion.readyState == 4) {
	//escribimos la respuesta
	element.innerHTML = peticion.responseText;
        }
    }
   peticion.send(null);
}

Y por último el combodependiente.jsp

< %
    out.println("<label for='combodependiente'> comboDependiente ");
    out.println("<select name='combodependiente'  id='combodependiente' >");
    out.println("<option value=''>Selecciona</option>");
//recogemos el parámetro
if(request.getParameter("Id")!=null){ //cogemos valores de la bbdd
}
%>

Como veis en el combodependiente.jsp solo cargamos los posibles valores del combo sin el elemento  contenedor “Select” ya que este se implementa en el jsp principal.

Nota:El JavaScript fue sacado de http://www.webintenta.com

Actualización:En el combodependiente.jsp es importante cargar todo mediante out.println sino no funciona en IE7

Escrito por fetishcode

Abril 26, 2008 a 7:05 pm

Escrito en Java

Etiquetado con , ,

Extracción de ficheros desde JAR

sin comentarios

Creating the self-extracting jar file
Hace ya algún tiempo recibí, un correo consultandome sobre la extracción de ficheros desde un jar. Es decir, como extraer ficheros desde el jar que se esta ejecutando, en tiempo de ejecución.

Mas concretamente, el tema era el siguiente: Desplegar una aplicación en formato JAR, mediante JavaWebStart, y al ejecutar la aplicación extraer una serie de ficheros de configuración del propio jar y copiarlos en un lugar determinado.

Lo principal es como conseguir la URL de nuestro JAR y jugar con la clase ZipFile para extraer los archivos del mismo.

myClassName = this.getClass().getName() + ".class";
URL urlJar = this.getClass().getClassLoader().getSystemResource(myClassName);

Les dejo un articulo de javaworld donde se trata este tema con mas profundidad.

Escrito por fetishcode

Octubre 20, 2007 a 7:57 pm

Escrito en Java

Etiquetado con , , ,

Crear Thumbnails de imágenes en Java con JIMI

con 2 comentarios

How to create image thumbnails programmatically cropping a region of an image instead of scaling it. We explain how JIMI (Java Image Management Interface) can provide a easy solution.

Si lo que queremos es generar una imagen en miniatura a partir de otra imagen, dentro de una aplicación java, pero con un tamaño fijo, podemos hacerlo de una forma muy sencilla. Para ello necesitamos la librería JIMI (Java Image Management Interface), una api propia de Sun para leer, crear y manipular imágenes en múltiples formatos.

En nuestro caso estamos desarrollando en struts una galeria de imágenes al estilo de Flickr y necesitamos crear miniaturas de las imágenes con un HxW fijo, por ejemplo 100×100, sin modificar la imagen al escalarla. Por lo que si la imagen original es rectangular para evitar deformarla necesitamos recortar una parte de ésta con las medidas adecuadas, con JIMI es posible.

thumb_jimi

Primero, necesitamos incluir las clases de JIMI en nuestro proyecto, para ello primero descargamos la librería en la página oficial de Sun:

http://java.sun.com/products/jimi/

Después descomprimimos el zip en local, renombramos el archivo JimiProClasses.zip como jimi-1.0.jar y lo copiamos en el path /WEB-INF/lib de nuestro proyecto y lo añadimos al Build Path del proyecto desde Eclipse:

Project –> Properties –> Java Build Path –> pestaña Libraries –> Add JARs…

Una vez hecho este paso nuestra aplicación ya puede reconocer las clases de jimi, lo último que queda por hacer es incluir este pequeño código:

import java.awt.image.*;
import com.sun.jimi.core.Jimi;
(...)

ImageProducer p1=Jimi.getImageProducer("image.jpg");
ImageFilter f=new CropImageFilter(0,0,100,100);
ImageProducer p2=new FilteredImageSource(f, p1);
Jimi.putImage(p2, "image.jpg");

fuente

Escrito por suestar

Octubre 4, 2007 a 8:01 am

Escrito en Java

Etiquetado con ,