package versao3.persistencia.impl.xml;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import versao3.dominio.Cliente;
import versao3.persistencia.ClienteDAO;
import versao3.persistencia.DAO;
import versao3.persistencia.DAOFactory;
import versao3.persistencia.PedidoDAO;
import versao3.persistencia.PersistanceException;

/**
 *  Implementacao do objeto de acesso a de clientes para base XML.
 *
 *  @see  versao3.persistencia.ClienteDAO
 */
public final class XMLClienteDAO implements ClienteDAO{

  private static long currentId = 0;

  private static XMLClienteDAO instance;

  static{
    instance = new XMLClienteDAO();
  }

  protected static XMLClienteDAO getInstance(){
    return instance;
  }

  private XMLClienteDAO(){}

  public List buscarTodos() throws PersistanceException {
    List result = new ArrayList();
    try {
    List fileNames = XMLUtil.findByClassName(Cliente.class.getName());
      for (Iterator iter = fileNames.iterator(); iter.hasNext(); ) {
        String file = (String) iter.next();
        result.add(XMLUtil.load(file));
      }
    }catch(FileNotFoundException ex){
      throw new PersistanceException(ex);
    }
    return result;
  }

  public void remove(Cliente cliente) throws PersistanceException {
    PedidoDAO pedidoDAO = DAOFactory.getDAOFactory().createPedidoDAO();
    cliente.setClienteId(UNSAVED);
    pedidoDAO.removerPorCliente(cliente);
    XMLUtil.remove(cliente);
  }

  public void removerTodos(){
    XMLUtil.removeAll();
  }

  public void save(Cliente cliente) throws PersistanceException {
    try {
      if (cliente.getClienteId() == UNSAVED){
        cliente.setClienteId(XMLClienteDAO.currentId++);
      }
      XMLUtil.save(cliente);

    }
    catch (FileNotFoundException ex) {
      throw new PersistanceException(ex);
    }
  }

}
