/*
 * Copyright (c) 1997-2001 Centro de Informática - UFPE
 */

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

    /* O repositorio de Registros que contém Arquivos e/ou Diretorios
     * pertencentes a este Diretorio. */
    private RepositorioRegistros registros;


    /**
     * Cria um novo Diretório, a partir de seu nome e propietário e instancia o
     * atributo registros com um novo Repositorio de registros.
     *
     * @param nome         Nome do Diretório.
     * @param proprietario Proprietário do Diretório.
     */
    public Diretorio(String nome, Usuario proprietario) {

        super(nome, proprietario);
        registros = new RepositorioRegistros();
    }


    /**
     * Retorna true informando que o Registro é um Diretório.
     *
     * @return true.
     */
    public  boolean isdir() {
        return true;
    }

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


    /**
     * Exclui um dado Arquivo deste Diretorio.
     *
     * @param arquivo Arquivo a ser removido do diretório.
     */
    public void removerArquivo(Arquivo arquivo) {
        registros.excluir(arquivo);
    }


    /**
     * Retorna uma listagem deste Diretório.
     *
     * @return Uma listagem deste diretório.
     */
    public String ls() {
        return registros.listar();
    }


    /**
     * Verifica se um dado Registro pertence a este Diretorio.
     *
     * @param registro Registro a ser procurado no diretório.
     *
     * @return true se o registro pertencer ao repositorio de registros deste
     *         diretório, false caso contrário.
     */
    public boolean pertence(Registro registro) {
        return registros.existe(registro);
    }


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


    /**
     * Apaga um subdiretório.
     *
     * @param diretorio Diretório a ser removido.
     */
    public void rmdir(Diretorio diretorio) {
        registros.excluir(diretorio);
    }


    /**
     * Compara um Registro a este diretório.
     *
     * @return true se são iguais, false se são diferentes.
     */
    public boolean equals(Registro registro) {

        boolean retorno = false;

        if (registro != null && registro.isdir() == true) { // se for diretório
            if (this.registros.equals(((Diretorio) registro).registros)
                    && this.getNome().equals(registro.getNome())
                    && this.getProprietario().equals(registro.getProprietario())
                    && this.getPermissao() == registro.getPermissao()) {

                retorno = true;
            }
        }
        return retorno;
    }

}