package com.zinep.script;
import com.zinep.*;
import com.zinep.trans.Cambio;
import com.zinep.trans.Deposito;
import com.zinep.trans.Retiro;
import com.zinep.trans.Transaccion;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author tomas
*/
public class TrnParser {
public static final String ETIQUETA = "([a-zA-Z0-9]+)";
public static final String NUMERO = "([0-9]+)";
public static final String W = "\\s+"; // whitespace
public static final String DEL = "\\s*"; // delimiter
static final Pattern RETIRO = Pattern.compile(DEL + "Retiro"
+ W + "Cuenta"
+ W + "(USD|UYU)"
+ W + NUMERO
+ W + ETIQUETA
+ DEL);
static final Pattern DEPOSITO = Pattern.compile(DEL + "Deposito"
+ W + "Cuenta"
+ W + "(USD|UYU)"
+ W + NUMERO
+ W + "(USD|UYU)"
+ DEL);
static final Pattern CAMBIO = Pattern.compile(DEL + "Cambio"
+ W + NUMERO
+ W + "(USD|UYU)"
+ DEL);
// Deposito Cuenta USD 1000 USD
//Cliente cliente, Cuenta cuenta, Sucursal sucursal, Monto cantADepositar
static final Pattern PRESTAMOPERSONAL = Pattern.compile(DEL +"PrestamoPersonal"
+ W + "Cuenta"
+ W + "(USD|UYU)"
+ W + NUMERO
+ W + "(USD|UYU)"
+ DEL);
public Transaccion parse(Banco banco, Sucursal sucursal, Cliente cliente, String linea) {
Pattern rTrn = Pattern.compile(DEL + ETIQUETA + "\\.*");
Matcher m = rTrn.matcher(linea);
if (!m.find()) {
return null;
}
String id = m.group(1);
Transaccion trn = null;
if (id.equals("Retiro")) {
if ((m = RETIRO.matcher(linea)).find()) {
Moneda moneda = Moneda.valueOf(m.group(1));
Cuenta cuenta = cliente.getCuenta(moneda);
Monto monto = new Monto(Long.parseLong(m.group(2)), Moneda.valueOf(m.group(3)));
trn = Retiro.crearRetiro(cliente, cuenta, sucursal, monto);
}
} else if (id.equals("Deposito")) {
// TODO procesar deposito
if ((m = DEPOSITO.matcher(linea)).find()) {
System.out.println(m.group(0));
Moneda moneda = Moneda.valueOf(m.group(1));
Cuenta cuenta = cliente.getCuenta(moneda);
Monto monto = new Monto(Long.parseLong(m.group(2)), Moneda.valueOf(m.group(3)));
trn = Deposito.efectuarDeposito(cliente, cuenta, sucursal, monto);
}
} else if (id.equals("Cambio")) {
// TODO procesar deposito
if ((m = CAMBIO.matcher(linea)).find()) {
Moneda moneda = Moneda.valueOf(m.group(1));
Monto monto = new Monto(Long.parseLong(m.group(2)), Moneda.valueOf(m.group(3)));
trn = Cambio.efectuarCambio(cliente, monto, moneda, sucursal);
// System.out.println("?Cambio()
// System.out.println("????????");
// for (int i = 0; i < 4; i++) {
// System.out.println(m.group(i));
// }
}
} else if (id.equals("PrestamoPersonal")){
if((m = PRESTAMOPERSONAL.matcher(linea)).find()){
Moneda moneda = Moneda.valueOf(m.group(1));
Cuenta cuenta = cliente.getCuenta(moneda);
Monto monto = new Monto(Long.parseLong(m.group(2)), Moneda.valueOf(m.group(3)));
trn = Deposito.efectuarDeposito(cliente, cuenta, sucursal, monto);
}
} else {
System.out.println("Transaccion no encontrada: " + id);
}
return trn;
}
}