/*
 * Copyright (c) 1997-1999 Departamento de Informática - UFPE
 */

/**
 * Esta classe modela um conjunto (lista) de diretórios do padrão unix.
 */
public class ListaDiretorios{

    // O diretório deste nó da lista.
    private Diretorio diretorioAtual;

    // Uma referência ao próximo elemento da lista.
    private ListaDiretorios diretorioProximo;

    /**
     * Insere um novo diretório na lista.
     * 
     * @param          Um diretorio a ser inserido.
     */
    public void inserirDiretorio(Diretorio diretorio){
        if (this.diretorioAtual == null) {
            this.diretorioAtual = diretorio;
            diretorioProximo = new ListaDiretorios();
        } else
            diretorioProximo.inserirDiretorio(diretorio);
    }

    /**
     * Exclui um diretório da lista.
     * 
     * @param          Um diretorio a ser excluido.
     */
    public void excluirDiretorio(Diretorio diretorio) {
        if (this.diretorioAtual == null)
            System.out.println("Diretorio inexistente\n");
        else {
            if (this.diretorioAtual == diretorio) {
                this.diretorioAtual = diretorioProximo.diretorioAtual;
                this.diretorioProximo = diretorioProximo.diretorioProximo;
            } else
                diretorioProximo.excluirDiretorio(diretorio);
        }
    }

    /**
     * Imprime os diretórios da lista.
     */
    public void listarDiretorios(){
        if (this.diretorioAtual != null) {
            System.out.println(diretorioAtual.getNome());
            diretorioProximo.listarDiretorios();
        }
    }

    /**
     * Verifica se um dado arquivo pertence à lista.
     * 
     * @param          Um diretorio a ser procurado.
     * 
     * @return         Resposta se o diretorio existe.
     */
    public boolean existeDiretorio(Diretorio diretorio){
        boolean resultado;
        if (this.diretorioAtual == null)
            resultado = false;
        else
            if (this.diretorioAtual == diretorio)
                resultado =  true;
            else
                resultado = diretorioProximo.existeDiretorio(diretorio);

        return resultado;
    }
 
}
