Package com.zinep.script

Source Code of com.zinep.script.Reader

package com.zinep.script;

import com.zinep.*;
import com.zinep.sucursales.Local;
import com.zinep.sucursales.Virtual;
import com.zinep.trans.Transaccion;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
*
* @author tomas
*/
public class Reader {

    private List<String> lineas;

    public Reader(List<String> lineas) {
        this.lineas = lineas;
    }

    public void procesar() {
        String etiqueta = "([a-zA-Z0-9]+)";
        String numero = "([0-9]+)";
        String w = "\\s+"; // whitespace
        String del = "\\s*"; // delimiter

        Pattern rBanco = Pattern.compile(del + "Banco" + w + etiqueta + del);
        Pattern rMostrador = Pattern.compile(del + "Mostrador" + w + "(Preferencial|Regular)" + w + etiqueta + w + numero + del);
        Pattern rCliente = Pattern.compile(del + "Cliente" + w + "(Preferencial|Regular)" + w + etiqueta + w + numero + del);
        Pattern rSucursal = Pattern.compile(del + "Sucursal" + w + etiqueta + w + "UYU" + w + numero + w + "USD" + w + numero + del);
        Pattern rCuenta = Pattern.compile(del + "Cuenta" + w + etiqueta + w + "(UYU|USD)" + w + numero + del);

        Pattern rInstante = Pattern.compile(del + "Instante" + w + numero + w + etiqueta + w + numero + w + etiqueta + del);

        Banco banco = null;
        Sucursal sucursal = null;
        Cliente cliente = null;
        Matcher matcher = null;
        List<Sucursal> sucursales = null;
        List<Cuenta> cuentas = null;

        Simulacion sim = null;
        Simulacion.LlegadaCliente llegada = null;
        Transaccion trn = null;
        TrnParser trnParser = new TrnParser();

        for (int i = 0; i < lineas.size(); i++) {
            String linea = lineas.get(i);

            if ((matcher = rBanco.matcher(linea)).find()) {
                sucursales = new LinkedList<Sucursal>();
                banco = new Banco(matcher.group(1), sucursales);
                sim = new Simulacion(banco);
            } else if ((matcher = rSucursal.matcher(linea)).find()) {
                String nombre = matcher.group(1);
                Monto uyu = new Monto(Long.parseLong(matcher.group(2)), Moneda.UYU);
                Monto usd = new Monto(Long.parseLong(matcher.group(3)), Moneda.USD);

                if (nombre.equals("Local")) {
                    sucursal = new Local(nombre, uyu, usd);
                } else if (nombre.equals("Virtual")) {
                    sucursal = new Virtual(nombre, uyu, usd);
                }
                sucursales.add(sucursal);
            } else if ((matcher = rCliente.matcher(linea)).find()) {
                String tipo = matcher.group(1);
                String nombre = matcher.group(2);
                int id = Integer.parseInt(matcher.group(3));

                cuentas = new LinkedList<Cuenta>();
                cliente = new Cliente(nombre, id, tipo.equals("Preferencial"), cuentas);
                banco.agregarCliente(id, cliente);
            } else if ((matcher = rCuenta.matcher(linea)).find()) {
                String tipo = matcher.group(1);
                String moneda = matcher.group(2);
                Monto monto = new Monto(Long.parseLong(matcher.group(3)), moneda.equals("UYU") ? Moneda.UYU : Moneda.USD);
                final Cuenta cuenta = new Cuenta(monto.getMoneda());
                cuenta.aumentarMonto(monto);
                cuentas.add(cuenta);
            } else if ((matcher = rInstante.matcher(linea)).find()) {
                //"Instante" + w + numero + w + etiqueta + w + numero + w + etiqueta + del);
                int instante = Integer.parseInt(matcher.group(1));
                String nombreCliente = matcher.group(2);
                int idCliente = Integer.parseInt(matcher.group(3));
                String nombreSucursal = matcher.group(4);

                cliente = banco.getCliente(nombreCliente);
                sucursal = banco.getSucursal(nombreSucursal);
                llegada = new Simulacion.LlegadaCliente(
                        instante,
                        cliente,
                        sucursal);

                sim.add(llegada);
            } else if ((trn = trnParser.parse(banco, sucursal, cliente, linea)) != null) {
                llegada.add(trn);
            } else {
                System.out.println("Línea ignorada:\n" + linea);
            }
        }

        System.out.println("Banco:" + banco);
        for (Sucursal sucursal1 : banco.getSucursales()) {
            System.out.println("\tSucursal: " + sucursal1);
            for (Agente agente : sucursal1.getAgentes()) {
                System.out.println("\t\tAgente: " + agente);
            }
        }
        for (Cliente cliente1 : banco.getClientes().values()) {
            System.out.println("\tCliente: " + cliente1);
            for (Cuenta cuenta : cliente1.getCuentasCliente()) {
                System.out.println("\t\tCuenta:" + cuenta);
            }
        }

        sim.correr();
    }
}
TOP

Related Classes of com.zinep.script.Reader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.