package com.zinep.sucursales;
import com.zinep.Agente;
import com.zinep.Cliente;
import com.zinep.Monto;
import com.zinep.Sucursal;
import com.zinep.agentes.Mostrador;
import com.zinep.clientes.Pool;
import com.zinep.clientes.PoolDefault;
import com.zinep.clientes.PoolMultiplexer;
import com.zinep.utils.TimeManager;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author tomas
*/
public class Local extends Sucursal {
private Pool<Cliente> colaNormal = new PoolDefault<Cliente>();
private Pool<Cliente> colaPreferencial = new PoolDefault<Cliente>();
private Pool<Cliente> colas = new PoolMultiplexer<Cliente>(colaPreferencial, colaNormal);
private Pool<Cliente> colasAgentesNormal = new PoolMultiplexer<Cliente>(colaNormal, colaPreferencial);
public Local(String nombre, List<Agente> agentes, Monto montoDisponibleUYU, Monto montoDisponibleUSD) {
super(nombre, agentes, montoDisponibleUYU, montoDisponibleUSD);
for (Agente agente : agentes) {
agente.setSucursal(this);
}
}
public Local(String nombre, Monto montoDisponibleUYU, Monto montoDisponibleUSD) {
this(nombre, new ArrayList<Agente>(), montoDisponibleUYU, montoDisponibleUSD);
agentes.add(new Mostrador());
agentes.add(new Mostrador());
agentes.add(new Mostrador());
agentes.get(0).setCola(colas);
agentes.get(1).setCola(colasAgentesNormal);
agentes.get(2).setCola(colasAgentesNormal);
for (Agente agente : agentes) {
agente.setSucursal(this);
}
}
@Override
public void entraCliente(Cliente cliente) {
TimeManager.get().log(this + " entra cliente:" + cliente);
if (cliente.isPreferencial()) {
colaPreferencial.put(cliente);
} else {
colaNormal.put(cliente);
}
}
@Override
protected void ejecutar() {
if (tareaActual == null) {
// Hay que elegir cual tarea procesar, si no se elije se hará FIFO
}
}
@Override
public String toString() {
return "Local{" + "montos = " + montos + '}';
}
}