Si no te gustan los videos sigue las instrucciones a continuación.
Valor por defecto desde un archivo de propiedades
Es conveniente para el usuario tener el campo
porcentajeIVA lleno por defecto con un valor adecuado. Podrías usar un calculador (
@DefaultValueCalculator) que devuelva un valor fijo, pero en ese caso cambiar el valor por defecto implica cambiar el código fuente. O podrías leer el valor por defecto de una base de datos (usando JPA desde tu calculador), pero en ese caso cambiar el valor por defecto implica actualizar la base de datos.
Otra opción es tener estos valores de configuración en un archivo de propiedades, un archivo plano con pares clave=valor. En este caso cambiar el valor por defecto de
porcentajeIVA es tan simple como editar un archivo plano con un editor de texto.
Implementemos la opción del archivo de propiedades. Crea un archivo llamado
facturacion.properties en la carpeta
facturacion/src/main/resources con el siguiente contenido:
porcentajeIVADefecto=21
Aunque puedes usar la clase
java.util.Properties de Java para leer este archivo preferimos usar una clase propia para leer estas propiedades. Vamos a llamar a esta clase
PreferenciasFacturacion y la pondremos en un nuevo paquete llamado
com.tuempresa.facturacion.util. Veamos el código:
package com.tuempresa.facturacion.util; // En el paquete 'util'
import java.io.*;
import java.math.*;
import java.util.*;
import org.apache.commons.logging.*;
import org.openxava.util.*;
public class PreferenciasFacturacion {
private final static String ARCHIVO_PROPIEDADES="facturacion.properties";
private static Log log = LogFactory.getLog(PreferenciasFacturacion.class);
private static Properties propiedades; // Almacenamos las propiedades aquí
private static Properties getPropiedades() {
if (propiedades == null) { // Usamos inicialización vaga
PropertiesReader reader = // PropertiesReader es una clase de OpenXava
new PropertiesReader(
PreferenciasFacturacion.class, ARCHIVO_PROPIEDADES);
try {
propiedades = reader.get();
}
catch (IOException ex) {
log.error(
XavaResources.getString( // Para leer un mensaje i18n
"properties_file_error",
ARCHIVO_PROPIEDADES),
ex);
propiedades = new Properties();
}
}
return propiedades;
}
public static BigDecimal getPorcentajeIVADefecto() { // El único método público
return new BigDecimal(getPropiedades().getProperty("porcentajeIVADefecto"));
}
}
Como puedes ver
PreferenciasFacturacion es una clase con un método estático,
getPorcentajeIVADefecto(). La ventaja de usar esta clase en lugar de leer directamente del archivo de propiedades es que si cambias la forma en que se obtienen las preferencias, por ejemplo leyendo de una base de datos o de un directorio LDAP, solo has de cambiar esta clase en toda tu aplicación.
Puedes usar esta clase desde el calculador por defecto para la propiedad
porcentajeIVA. Aquí tienes el código del calculador:
package com.tuempresa.facturacion.calculadores; // En el paquete 'calculadores'
import org.openxava.calculators.*; // Para usar 'ICalculator'
import com.tuempresa.facturacion.util.*; // Para usar 'PreferenciasFacturacion'
public class CalculadorPorcentajeIVA implements ICalculator {
public Object calculate() throws Exception {
return PreferenciasFacturacion.getPorcentajeIVADefecto();
}
}
Como ves, simplemente devuelve
porcentajeIVADefecto de
PreferenciasFacturacion. Ahora, ya puedes usar este calculador en la definición de la propiedad
porcentajeIVA en
DocumentoComercial. Mira el código:
@DefaultValueCalculator(CalculadorPorcentajeIVA.class)
BigDecimal porcentajeIVA;
Con este código cuando el usuario pulsa para crear una nueva factura, el campo
porcentajeIVA se rellenará con 21, o cualquier otro valor que hayas puesto en
facturacion.properties.