Bienvenido!!

Posted in AdictoaAprender on julio 23, 2010 by AdictoaAprender

Bienvenido a Adicto a aprender, Web dedicada a todos aquellos que tienen entre sus principales aficiones aprender y poner en practica nuevos conocimientos, e intentar estar a la ultima en desarrollo web aplicando tecnologías java.

Redimensionar imágenes con Java

Posted in Imagenes on octubre 1, 2010 by AdictoaAprender
Hace poco me enfrenté al problema de redimensionar una imagen a un tamaño específico, y pues con java esto es muy sencillo.

Basta con estas dos líneas de código y ya esta:

public BufferedImage scaleBufferedJPGImage(BufferedImage originalImage){

AffineTransformOp op = new AffineTransformOp( AffineTransform.getScaleInstance(newWidth,newHeight), null);

return op.filter(originalImage, null);

}

Pero… ¿Qué pasa si estamos trabajando nuestra imagen como un arreglo de bytes?, en ese caso debemos hacer la conversión a BufferedImage y después de redimensionar, hacer la operación inversa. Veamos como quedaría:

private static final float IMAGE_DIMENSIONS = 235;

public static byte[] scaleJPGImage(byte[] originalImage) throws ImageFormatException, IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(originalImage);
BufferedInputStream bis = new BufferedInputStream(bais);
com.sun.image.codec.jpeg.JPEGImageDecoder decoder = JPEGCodec
.createJPEGDecoder(bis);
BufferedImage bufferedImage = decoder.decodeAsBufferedImage();

bufferedImage = scaleBufferedJPGImage(bufferedImage);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedOutputStream bai = newBufferedOutputStream(baos);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bai);
encoder.encode(bufferedImage);
returnbaos.toByteArray();

}

public static BufferedImage scaleBufferedJPGImage(BufferedImage originalImage) throws ImageFormatException,
IOException {
float height = Float.parseFloat(originalImage.getHeight() + “” );
float width = Float.parseFloat(originalImage.getWidth() + “”);

height = IMAGE_DIMENSIONS < height ? IMAGE_DIMENSIONS / height : 1;
width = IMAGE_DIMENSIONS < width ? IMAGE_DIMENSIONS / width : 1;

AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(width,height), null);

BufferedImage imageResult = op.filter(originalImage, null);
return imageResult;
}

Trabajando con PropertyEditor

Posted in PropertyEditor on septiembre 15, 2010 by AdictoaAprender

Los PropertyEditor son muy fáciles de usar y nos facilitan mucho el trabajo, su principal utilidad es cuando enviamos un String desde la capa de presentación y queremos que al negocio llegue un Object (y viceversa).

Para mayor entendimiento, explicare su funcionamiento a través de un ejemplo sencillo, en el cual, el objeto que estoy registrando tiene un atributo fecha de tipo Date, pero lo que recibo de la capa de presentación un String “fecha” en formato dd/MM/yyyy, para evitar un seguro error es necesario interceptar ese objeto y hacer la conversión de String a Object.

Para esto creare un ProperyEditor y le sobrescribiré el método setAsText:

public class FechaPropertyEditor extends PropertyEditorSupport{

public class FechaPropertyEditor extends PropertyEditorSupport{

public FechaPropertyEditor() {

}

@SuppressWarnings(“deprecation”)

@Override

public void setAsText(String fecha) throws IllegalArgumentException {

String[] splittedDate = fecha.split(“/”);

int day = Integer.parseInt(splittedDate[0]);

int month = Integer.parseInt(splittedDate[1]);

int year = Integer.parseInt(splittedDate[2]);

year -= 1900;

Date date = new Date();

date.setDate(day);

date.setMonth(month);

date.setYear(year);
setValue(date);
}
}

También es necesario crear un PropertyEditorRegistrar, el cual se va a encargar de registrar y asociar cada PropertyEditor con el tipo de dato que va a resolver.

import org.springframework.beans.PropertyEditorRegistrar;

import org.springframework.beans.PropertyEditorRegistry;

public class CustomPropertyEditorRegistrar implements PropertyEditorRegistrar{

@Override

public void registerCustomEditors(PropertyEditorRegistry propertyEditorRegistry) {

propertyEditorRegistry.registerCustomEditor(java.util.Date.class, new FechaPropertyEditor());

propertyEditorRegistry.registerCustomEditor(OtroDato.class, new OtroPropertyEditor());

Luego debemos indicarle al controlador encargado de recibir el Object, que este va a ser interceptado por un PropertyEditorRegistrar, para ello sobrescribiremos el método initBinder.

public class GestionarEntrenoSimpleFormController   extends SimpleFormController {

private final PropertyEditorRegistrar customPropertyEditorRegistrar;

public GestionarEntrenoSimpleFormController(PropertyEditorRegistrar customPropertyEditorRegistrar) {

this.customPropertyEditorRegistrar = customPropertyEditorRegistrar;

setCommandClass(Entreno.class);

setCommandName(“entreno”);

}

@Override

protected ModelAndView onSubmit(HttpServletRequest request,

HttpServletResponse response, Object command, BindException errors) throws Exception {

//IMPLEMENTACION

}

@Override

protected void initBinder(HttpServletRequest request,

ServletRequestDataBinder binder) throws Exception {

this.customPropertyEditorRegistrar.registerCustomEditors(binder);

}

}

Y por último, en el fichero de configuración creamos el bean de nuestro PropertyEditorRegistrar y se lo inyectamos como parámetro de constructor al constructor del controlador, quedaría así:

<bean id=“customPropertyEditorRegistrar”

class=“common.web.mvc.propertyEditos.CustomPropertyEditorRegistrar”/>

<bean id=“gestionarEntrenoSimpleFormController”

class=“common.web.mvc.controllers.GestionarEntrenoSimpleFormController>

<constructor-arg ref=“customPropertyEditorRegistrar” />

</bean>

Finalmente decir que existen otras formas de implementar un PropertyEditor, pero esta me ha parecido la mas practica y aconsejable. Espero te haya servido y hasta la próxima.

Presentación

Posted in Motivacion on septiembre 11, 2010 by AdictoaAprender

En este primer post intentaré presentarme,  haciendo un recorrido de  mi corta trayectoria por el mundo del desarrollo web.

Todo comenzó a finales de segundo año, en aquel tiempo, dominando bastante bien el lenguaje java y con conocimientos básicos de programación web paso a integrar el equipo de desarrollo que haría un nuevo software para el Banco Nacional de Cuba, para lo que tendría un año de capacitación (que después resulto ser auto-capacitación).

Todo tercer año lo pase entre tutoriales de Spring e Hibernate y también estudie levemente las librerías de dojo con el cual se iba a trabajar en la capa de presentación. Ya en los meses finales de tercero comenzó el desarrollo y yo comienzo como programador de acceso a datos (Hibernate puro y duro).

Cuando comienza cuarto año paso a ser programador de lógica de negocio e interfaz de usuario, trabajando, salvo los viernes por la mañana en que dábamos clases, todos los días de la semana, 8 horas diarias (así es nuestro modelo de estudio, que a decir verdad no me incomoda, pues me gusta lo que hago).  Cuando llega el segundo semestre paso a ser diseñador y programador principal del equipo… y así comencé este quinto año.

En este curso, dado el estado actual del proyecto, pienso tener un poco más de tiempo para aprender cosas nuevas, que hasta ahora no he podido mirar por cuestión de tiempo.

Y esa es la razón principal de este blog, ir posteando las cosas que valla aprendiendo con la modesta intención de que le sirvan al que lo necesite.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.