Archive

Archive for the ‘Programación’ Category

Dale estilo a tu SVN

Enero 5th, 2009

Que tosco es el modulo de SVN para apache, pero podemos darle un mejor aspecto, es muy facil, en solo 5 minutos.

Primero descarga el Repos Style

http://www.reposstyle.com/

Copialo a tu root de Apache, o crea un Alias, como desees, pero trabajemos con la primera opción, luego dentro de tu bloque LOCATION de SVN, solo tienes que incluir lo siguiente


SVNIndexXSLT “/repos-web/view/repos.xsl”

Hazle un Reload o un Restart a tu Apache2, y listo, el resultado es este,

Tags: apache2, svn

Desarrollo ,

Joda-Time para manejar fechas y horas

Enero 4th, 2009

Java ofrece unas librerias para manejar horas y fechas, son Calendar y Date, del paquete java.util.

Pero al ahora de hacer cosas complejas estas librerias se vuelven muy tediosas para hacer cosas a veces sencillas, como por ejemplo, manejar programaciónes al estilo Outlook.

Joda-Time ofrece un paquete fenomenal para manejar todas estas cosas, primero descargate el paquete aqui.

Un ejemplo de como se calcula la diferencia entre dos fechas era esta

Date date1 = new Date();
Date date2 = new Date();
Long dif = date1.getTime() - date2.getTime();
System.out.println("Dias entre fechas: " + date1.getTime());
System.out.println("Dias entre fechas: " + date2.getTime());
System.out.println("Dias entre fechas: " + dif / 86400000L);

Con Joda-Time es mucho mas sencillo, vean el siguiente ejemplo.

        DateTime start = new DateTime(); //Devuelve la fecha actual al estilo Date
        DateTime end = new DateTime(); //Devuelve la fecha actual al estilo Date
        //Buscar la diferencia
        int days = Days.daysBetween(start, end).getDays();
        System.out.println("days = " + days);

Como convertir un objeto DateTime a un Date y a un Calendar, pues la mayoria de los otros frameworks trabajan con  el objeto Date por defecto, aunque Joda tambien puede trabajar de la mano con Hibernate.

	DateTime datetimeRented = new DateTime();
	Date date = datetimeRented.toDate();
	Calendar calendar = Calendar.getInstance();
	calendar.setTime(datetimeRented.toDate());

Ahora que hemos visto un ejemplo que presentó algunas de las API, echemos un vistazo a las principales clases que un usuario de Joda-Time puede usar. Puedes ver el detalle de esta tabla aqui.

Concepto Sub-Concepto Inmutable Mutable
Instante Actual
DateTime
DateMidnight
Instant
MutableDateTime
Parcial LocalDate
LocalDateTime
LocalTime
Partial
Intervalos Interval MutableInterval
Duración Duration
Periodo Cualquier Campo
Period MutablePeriod
Solo un campo
Seconds
Minutes
Hours
Days
Weeks
Months
Years
Cronologia BuddhistChronology
CopticChronology
EthiopicChronology
GJChronology
GregorianChronology
IslamicChronology
ISOChronology
JulianChronology
Tags: fechas, Framework

Framework, Java ,

Iniciando el proyecto encuesta.me

Diciembre 24th, 2008

Después de 6 meses de planear, ya iniciamos el proyecto, esto va en serio, se que iniciar un proyecto del cual deseamos sea open source, es muy dificil, requiere de tiempo y sacrificios, pero estamos dispuestos.

De lo poco que quiero desvelar, es algo obvio, es un Sistema de Gestión de Encuestas en Línea, estará echo en Java, y planeamos que dentro de 1 a 2  meses tendremos un primer Alfa en línea.

Este proyecto, por ahora solo participamos 2 programadores de Nicaragua y 1 Ecuatoriano, falta mucho camino por recorer y para esto quiero citar un Proverbio.

Un viaje de mil kilometros debe empezar por un paso.

Autor: Lao-Tsé

Tags: encuestas, gestión, open source, proyecto

Java, Nicaragua, Personal, Programación, RichFaces , , ,

Disponible RichFaces 3.3 Beta4

Diciembre 17th, 2008

El dia 9 de Diciembre se liberó y ya puedes descargarlo, esta versión 3.3 trae algunas novedades, dos componenetes muy interesantes, ademas de corregir varios bugs, puedes ver el detalle aqui.

  • rich:editor - editor WYSIWYG que permite introducir texto formateado. Mas Info
  • a4j:queue. Mecanismos de colas Globales por Defecto seran implementadas. Separando coponentes de las colas de definicion creadas. Mas Info

Puedes descargar las nuevas librerias aquí.

http://repository.jboss.org/maven2/org/richfaces/ui/richfaces-ui/3.3.0.BETA4/

Tags: Java, RichFaces

Java, Programación, RichFaces ,

La Seguridad Perfecta con Spring y el dropDownMenu de RichFaces

Diciembre 7th, 2008

Bueno, sigo con la seguridad de Spring 2.0 o el conocido como el antiguo Acegi Security, ahora voy a proponer una alternativa para generar una seguridad con un componente de RichFaces, el dropDownMenu. ToolBar y menuItem.

Primero te recomiendo sigas la configuración de Spring con JDBC, o con LDAP, como tu lo desees, porque de todas formas todos los Roles ( o Permisos) quedan almacenados en la misma variable de Spring. También si deseas integrarlo con Facelest, aqui tenes los pasos a seguir.

Lo primero que hay que hacer, es construir el menú, para eso usamos un Tool Bar:

<rich:toolBar>
 
<rich:dropDownMenu >
<f:facet name="label">
        <h:panelGroup>
<h:graphicImage value="#{initParam['rootimages']}/images/icons/contexthelp.png" />
	<h:outputText value="JotaDeveloper" />
	</h:panelGroup>
</f:facet>
	<rich:menuItem submitMode="ajax" value="Articulos"></rich:menuItem>
	<rich:menuItem submitMode="ajax" value="Tutoriales"></rich:menuItem>
	<rich:menuItem submitMode="ajax" value="Ayuda"></rich:menuItem>
</rich:dropDownMenu>
</rich:toolBar>

El código es bien sencillo, no hace falta explicar mucho, solo que para poder colocar un dropDownMenu , es necesario el toolBar, y para el menuItem , debe estar dentro de un dropDownMenu.

Depues de esto, y espero que hayas leido los 3 articulos que sugerí anteriormente, vamos a crear un Bean, donde tendremos la logica de nuestra seguridad con el dropDownMenu.

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.security.Authentication;
import org.springframework.security.GrantedAuthority;
import org.springframework.security.context.SecurityContext;
import org.springframework.security.context.SecurityContextHolder;
import org.springframework.security.ui.WebAuthenticationDetails;
 
public class JotaDeveloperMenuBean {
 
	// Un objeto Booleano por cada elemento del Menu
	private Boolean rootJotaDeveloper;
	private Boolean rootTutoriales;
	private Boolean rootArticulos;
	private Boolean rootAyuda;
 
	// Objetos Spring Security
	private Object seguridadAcegi;
	// El GrantedAuthority es un Array con todos los Roles que recupera de la BD
	private GrantedAuthority[] listaAutoridades;
	private SecurityContext contexto;
	private Authentication autenticacion;
	private List<String> ListAutoridades = new ArrayList<String>();
	private String nombreUsuario;
	private Boolean estaAutenticado;
	private WebAuthenticationDetails webAu;
 
	/**
	 * Constructor que accede a toda la información de Spring Security
	 */
 
	public JotaDeveloperMenuBean() {
		this.seguridadAcegi = SecurityContextHolder.getContext()
				.getAuthentication().getPrincipal();
		this.contexto = SecurityContextHolder.getContext();
		this.autenticacion = SecurityContextHolder.getContext()
				.getAuthentication();
		this.listaAutoridades = SecurityContextHolder.getContext()
				.getAuthentication().getAuthorities();
		convertirArrayAuthoritiesToListAuthorities();
		this.nombreUsuario = this.autenticacion.getName();
		this.estaAutenticado = this.autenticacion.isAuthenticated();
	}
 
	/**
	 * Este metodo convierte el Array de Roles poco manejable en un List
	 */
	private void convertirArrayAuthoritiesToListAuthorities() {
		int it_cont;
		for (it_cont = 0; it_cont < listaAutoridades.length; it_cont++) {
			String ROL = listaAutoridades[it_cont].toString();
			ListAutoridades.add(ROL);
		}
	}
 
	/**
	 * Comprueba si existe determinado Rol en la Lista de Autoridades del
	 * Usuario Logeado
	 * 
	 * @param cadena
	 *            ROL
	 * @return El resultado de la Busqueda
	 */
	private Boolean comprobarRol(String cadena) {
		Integer id = ListAutoridades.indexOf(cadena);
		// Si el Id es -1, el valor no fue encontrado.
		if (id != -1) {
			return false;
		} else {
			return true;
		}
	}
 
	/**
	 * Los Getters que va leer cada elemento del Menu
	 */
 
	public Boolean getRootJotaDeveloper() {
		return rootJotaDeveloper = comprobarRol("ROLE_ROOT_JOTADEVELOPER");
	}
 
	public Boolean getRootTutoriales() {
		return rootTutoriales = comprobarRol("ROLE_ROOT_TUTORIALES");
	}
 
	public Boolean getRootAyuda() {
		return rootArticulos = comprobarRol("ROLE_ROOT_AYUDA");
	}
 
	public Boolean getRootArticulos() {
		return rootAyuda = comprobarRol("ROLE_ROOT_ARTICULOS");
	}
 
}

Despues de esto y incluir el Bean el el ManageBean de faces-config.xml, solo agregamos a la propiedad disabled del MenuItem el get del Bean.

<rich:toolBar>
<acegijsf:authorize ifAllGranted="ROLE_ROOT_JOTADEVELOPER">
<rich:dropDownMenu >
<f:facet name="label">
        <h:panelGroup>
<h:graphicImage value="#{initParam['rootimages']}/images/icons/contexthelp.png" />
	<h:outputText value="JotaDeveloper" />
	</h:panelGroup>
</f:facet>
	<rich:menuItem submitMode="ajax" value="Articulos" disabled="#{jotaDeveloperMenuBean.rootArticulos}"></rich:menuItem>
	<rich:menuItem submitMode="ajax" value="Tutoriales" disabled="#{jotaDeveloperMenuBean.rootTutoriales}"></rich:menuItem>
	<rich:menuItem submitMode="ajax" value="Ayuda" disabled="#{jotaDeveloperMenuBean.rootAyuda}"></rich:menuItem>
</rich:dropDownMenu>
</acegijsf:authorize>
</rich:toolBar>

El resultado de todo esto, es que cuando inices sesión, el GrantedAuthority que genera en la sesión del usuario Spring Security, lo convertimos en un List, luego cada elemente del menu que tu crees, va preguntarle al List si existe, si Existe, regresa True, sino, False, y apareceran los menus cuales el usuario no tenga permiso desactivados, ademas de eso, no podra acceder via URL, si has configurado correctamente el security.xml del Spring Security.

Tags: Ajax, Java, RichFaces, spring security

Java, RichFaces , , ,