Package com.zinep.script

Source Code of com.zinep.script.Simulacion$LlegadaCliente

package com.zinep.script;

import com.zinep.*;
import com.zinep.trans.Transaccion;
import com.zinep.utils.TimeManager;
import com.zinep.utils.Trabajador;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.TreeSet;

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

    public static class LlegadaCliente implements Comparable<LlegadaCliente> {

        public final int instante;
        public final Cliente cliente;
        public final Sucursal sucursal;
        public final List<Transaccion> trns = new LinkedList<Transaccion>();

        public LlegadaCliente(int instante, Cliente cliente, Sucursal sucursal) {
            this.instante = instante;
            this.cliente = cliente;
            this.sucursal = sucursal;
        }

        public boolean add(Transaccion e) {
            return trns.add(e);
        }

        @Override
        public int compareTo(LlegadaCliente t) {
            int res = this.instante - t.instante;

            if (res == 0) {
                res = cliente.getNombre().compareTo(t.cliente.getNombre());
            }

            if (res == 0) {
                res = sucursal.getNombre().compareTo(t.sucursal.getNombre());
            }

            return res;
        }

        private void aplicar() {
            cliente.addAll(sucursal, trns.toArray(new Transaccion[]{}));
            sucursal.entraCliente(cliente);
        }

        @Override
        public String toString() {
            return "LlegadaCliente{" + "instante=" + instante + ", cliente=" + cliente + ", sucursal=" + sucursal + '}';
        }
    }
    private TreeSet<LlegadaCliente> llegadas = new TreeSet<Simulacion.LlegadaCliente>();
    private Banco banco;

    public Simulacion(Banco banco) {
        this.banco = banco;
    }

    public void correr() {
        Trabajador generadorClientes = new Trabajador() {

            private int contador = 0;
            Iterator<LlegadaCliente> it = llegadas.iterator();
            LlegadaCliente llegada = null;

            @Override
            protected void ejecutar() {
                do {
                    if (llegada != null) {
                        if (llegada.instante == contador) {
                            llegada.aplicar();
                            llegada = null;
                        } else {
                            break;
                        }
                    } else if (it.hasNext()) {
                        llegada = it.next();
                    } else {
                        detener();
                        break;
                    }
                } while (true);

                contador++;
            }
        };

        final TimeManager tiempo = TimeManager.get();

        tiempo.add(generadorClientes);
        for (Sucursal sucursal : banco.getSucursales()) {
            for (Agente agente : sucursal.getAgentes()) {
                tiempo.add(agente);
            }
            tiempo.add(sucursal);
        }

        tiempo.setTerminacion(new Runnable() {

            @Override
            public void run() {
                System.out.println("Banco:" + banco);
                for (Sucursal sucursal1 : banco.getSucursales()) {
                    System.out.println("\tSucursal: " + sucursal1);
                }
                for (Cliente cliente1 : banco.getClientes().values()) {
                    System.out.println("\tCliente: " + cliente1);
                    for (Cuenta cuenta : cliente1.getCuentasCliente()) {
                        System.out.println("\t\tCuenta:" + cuenta);
                    }
                }
            }
        });

        tiempo.start();
    }

    public boolean add(LlegadaCliente e) {
        return llegadas.add(e);
    }
}
TOP

Related Classes of com.zinep.script.Simulacion$LlegadaCliente

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.