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

/**
 * Esta classe simula o comportamento de um diretório do sistema unix.
 */
public class Diretorio{

    // O nome do diretório.
    private String nome;

    // Os arquivos deste diretório.
    private ListaArquivos arquivos;

    // Os subdiretórios criados abaixo deste.
    private ListaDiretorios subdiretorios;

    /**
     * Construtor da classe Diretorio.
     * Cria um novo diretório, a partir de seu nome.
     * 
     * @param nome          Nome do diretorio.
     */
    public Diretorio(String nome){
        this.nome = nome;
        arquivos = new ListaArquivos();
        subdiretorios = new ListaDiretorios();
    }

    /**
     * Retorna o nome do diretório.
     * 
     * @return              Nome do Diretorio.
     */
    public String getNome() {
        return nome;
    }

    /**
     * Insere um novo arquivo neste diretório.
     * 
     * @param           Arquivo a ser inserido.
     */
    public void inserirArquivo(Arquivo arquivo){
        arquivos.inserirArquivo(arquivo);
    }

    /**
     * Exclui um dado arquivo deste diretório.
     * 
     * @param           Arquivo a ser excluido.
     */
    public void removerArquivo(Arquivo arquivo) {
        arquivos.excluirArquivo(arquivo);
    }

    /**
     * Gera uma listagem deste diretório.
     */
    public void ls(){
        arquivos.listarArquivos();
        subdiretorios.listarDiretorios();
    }

    /**
     * Verifica se um dado arquivo pertence a este diretório.
     * 
     * @param            Arquivo a ser procurado.
     *
     * @return           Resposta se arquivo existe.
     */
    public boolean pertenceArquivo(Arquivo arquivo) {
        return arquivos.existeArquivo(arquivo);
    }

    /**
     * Cria um novo subdiretório.
     * 
     * @param           Diretorio a ser criado.
     */
    public void mkdir(Diretorio diretorio) {
        subdiretorios.inserirDiretorio(diretorio);
    }

    /**
     * Apaga um subdiretório.
     * 
     * @param           Diretorio a ser excluido.
     */
    public void rmdir(Diretorio diretorio) {
        subdiretorios.excluirDiretorio(diretorio);
    }

}
