package secuencia;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Andrés Mella
*/
public final class ManejadorSecuencia {
private final static String FICHERO_SECUENCIA_ENV = "FICHERO_SECUENCIA";
private ManejadorSecuencia(){}
//Llamar a este metodo para obtener el valor de la secuencia !
public static String nextValue() {
//La secuencia tiene una longitud de 10 caracteres
//Inicia con ceros por la izquierda
//1.- Obtener el numero de secuencia Actual
//1.1 Obtener el valor de la variable de entorno FICHERO_SECUENCIA
String rutaFichero = System.getenv(FICHERO_SECUENCIA_ENV);
File fichero = new File(rutaFichero);
Long valorActual = getValorActual(fichero);
//Incrementar el valor y guardarlo.
guardarSiguienteValor(valorActual, fichero);
return formatearValor(valorActual);
}
private static String formatearValor(Long valor) {
return String.format("%010d", valor);
}
private static void guardarSiguienteValor(Long valorActual, File fichero) {
PrintWriter pw = null;
try {
pw = new PrintWriter(new FileWriter(fichero));
pw.write(formatearValor(valorActual+1));
}catch (IOException ex) {
Logger.getLogger(ManejadorSecuencia.class.getName()).log(Level.SEVERE, null, ex);
}finally {
if(null != pw) {
pw.close();
}
}
}
private static Long getValorActual(File fichero) {
Scanner scanner = null;
Long valorActual = null;
//Leer el numero de secuencia
try {
scanner = new Scanner(fichero);
String line = scanner.nextLine();
valorActual = Long.parseLong(line);
} catch (FileNotFoundException ex) {
Logger.getLogger(ManejadorSecuencia.class.getName()).log(Level.SEVERE, null, ex);
}finally {
if(null!=scanner) {
scanner.close();
}
}
return valorActual;
}
}