package com.escuelademanejo.negocio;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.TreeMap;
import com.escuelademanejo.persistencia.FactoryPersistencia;
import com.escuelademanejo.persistencia.IPersistenciaController;
public class CatalogoClientes {
/**
* Clase que maneja el catalogo de clientes Implementa el patron Singleton
*/
private static CatalogoClientes INSTANCE = null;
private TreeMap<Integer, Cliente> clientes = null;
private IPersistenciaController iPersistController = null;
private CatalogoClientes() throws Exception {
FactoryPersistencia factPersistencia = FactoryPersistencia.getInstance();
iPersistController = factPersistencia.getIPersistenciaController();
if (clientes == null){
clientes = new TreeMap<Integer, Cliente>();
TreeMap<Integer, ArrayList<String>> rows_clientes = iPersistController.selectAllClientes();
Collection<ArrayList<String>> rows_cli = rows_clientes.values();
for (ArrayList<String> datos_cli : rows_cli) {
int id_cli= Integer.valueOf(datos_cli.get(0));
clientes.put(id_cli, new Cliente(datos_cli));
}
}
}
/**
*
* @return Devuelve la unica instancia al CatalogoClientes. Si no existe
* crea uno.
* @throws Exception
*/
public static CatalogoClientes getInstance() throws Exception {
if (INSTANCE == null)
createInstance();
return INSTANCE;
}
private synchronized static void createInstance() throws Exception {
if (INSTANCE == null) {
INSTANCE = new CatalogoClientes();
}
}
/**
* @since El metodo "clone" es sobreescrito por el siguiente que arroja una
* excepci�n:
*/
@Override
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
public void addCliente(String username, String clave, String nombre_completo,
String telefono, String mail, Date fecha_nacimiento)
throws Exception {
// TODO Auto-generated method stub
if(clientes == null)
clientes = new TreeMap<Integer, Cliente>();
Cliente cli= new Cliente(username, clave, nombre_completo, telefono,
mail, fecha_nacimiento, new ArrayList<Integer>());
int id = cli.save();
clientes.put(id, cli);
}
public void deleteCliente(int id_cliente) throws Exception {
// TODO Auto-generated method stub
if(clientes == null)
throw new Exception("ERROR: el cliente " + id_cliente + " no existe");
Cliente cli= clientes.get(id_cliente);
if (cli == null)
throw new Exception("ERROR: el cliente " + id_cliente + " no existe");
else{
cli.delete();
cli = clientes.remove(id_cliente);
}
}
public TreeMap<Integer, Cliente> getClientes() {
// TODO Auto-generated method stub
return clientes;
}
public Cliente getCliente(int id_Cliente) throws Exception {
// TODO Auto-generated method stub
if(clientes == null)
throw new Exception("ERROR: el cliente " + id_Cliente + " no existe");
else{
Cliente cli = clientes.get(id_Cliente);
if(cli == null)
throw new Exception("ERROR: el cliente " + id_Cliente + " no existe");
else
return cli;
}
}
/**
*
* @param id_cliente
* Es el id del cliente que se quiere buscar. Para indicar que no
* se quiere buscar por id se debe ingresar un numero menor o
* igual a cero
* @param username
* Es el nombre de usuario del cliente. Para indicar que no se
* quiere buscar por nombre de usuario poner username=null
*
* PRECOND: se debe ingresar correctamente alguno de los dos par�metros
*
* @return el cliente si se encontr� o null
* @throws Exception
*/
public Cliente getCliente(int id_cliente, String username) throws Exception {
// TODO Auto-generated method stub
if(id_cliente > 0)
return getCliente(id_cliente);
else {
if(clientes == null)
throw new Exception("ERROR: el cliente " + username + " no existe");
else{
Iterable<Cliente> cli_iter = clientes.values();
for (Cliente cliente : cli_iter) {
if(cliente.getUserName().equalsIgnoreCase(username))
return cliente;
}
}
}
return null;
}
}