/*
 * Fichero:     FactoriaAleatoria.java
 * Fecha:       20/10/06
 * Autor:       Alvaro Sarmiento Losada
 * Asignatura:  Proyecto Fin de Carrera
 * Descripción: Contiene la clase FactoriaAleatoria, que proporciona métodos
 *              de generación de números y cadenas aleatorias.
 *
 * Este fichero pertenece al proyecto fin de carrera del autor,
 * consistente en el estudio de JXTA y su aplicación al comercio 
 * electrónico b2b.
 */

package com.pfc.lib.utiles;

import java.util.Random;
import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * Clase que contiene métodos de generación de números y cadenas 
 * <code>String</code> numéricas aleatorias.
 *
 * @author  Josef Ignacio Hötz Ordoño
 */
public abstract class FactoriaAleatoria {
    
    /** 
     * Constante de limite superior de generación de números aleatorios. Ningún 
     * valor generado será mayor que este número.
     */
    protected final static int LIMITE = 10000000;
    
    /** Variable de clase para la generación de números aleatorios */
    private static Random random;
    
    /*
     * Inicializador estático de la clase. Crea un nuevo objeto 
     * Random y le asigna una semilla basada en los milisegundos
     * de la hora actual. De esta manera se consigue una generación aleatoria 
     * eficaz, ya que la semilla solo se crea una sola vez, la primera en que
     * se usa la clase.
     */
    static {
        random = new Random();
        
        Calendar calendario = new GregorianCalendar();
        random.setSeed( calendario.getTimeInMillis() );
    }
    
    /**
     * Genera un número aleatorio comprendido entre 0 y <code>LIMITE</code>
     *
     * @return un entero aleatorio comprendido entre 0 y <code>LIMITE</code>
     */
    public static int numeroAleatorio() {
        return random.nextInt(LIMITE);
    }
    
    /**
     * Genera una cadena de caracteres numéricos aleatoria comprendido entre 0
     * y <code>LIMITE</code>.
     *
     * @return una cadena <code>String</code> de caracteres numéricos aleatoria 
     *         comprendidos entre 0 y <code>LIMITE</code>.
     */
    public static String cadenaNumericaAleatoria() {
        int i = random.nextInt(LIMITE);
        return String.valueOf(i);
    }
    
}