import java.util.*;
import java.io.*;

/** 
 *  Esta classe permite representar o estado de um
 *  diretorio em termos dos seus elementos em um
 *  determinado momento.  
 *
 *  @author  <nome 1>
 *  @author  <nome 2>
 */
public class HistDir implements Serializable {
    // Propriedades particulares (private) da classe aqui:
    private Date dataRegistro;
    private Collection membrosDiretorio;
    
    /**
     *  Recebe uma String que deve 
     *  representar um diretorio.  As informacoes sobre
     *  esse diretorio devem ser gravadas em um arquivo no 
     *  diretorio corrente.  Diferentes invocacoes a build 
     *  devem gerar diferentes arquivos de informacao do 
     *  estado do diretorio.
     *
     *  @param  dir  Nome do diretorio
     *  @throws IllegalArgumentException Argumento nao e um diretorio.
     */
    public HistDir(String dir) throws IllegalArgumentException {
    }

    /**
     *  O construtor sem argumentos assume o diretorio corrente
     *  como diretorio a ser registrado.
     */
    public HistDir() {
    }

    /**
     *  Recebe o nome de um arquivo que deve
     *  representar o estado de um diretorio previamente
     *  gravado e retornar um objeto HistDir com esse estado.
     *
     *  @param arqest  Arquivo com estado do diretorio.
     *  @return Objeto HistDir com dados sobre o diretorio.
     *  @throws IllegalArgumentException parametro nao corresponde
     *           a um arquivo previamente gravado.
     */
    public static HistDir getState(String arqest) 
	throws IllegalArgumentException {
    }

    /** 
     *  Permite apresentar dados sobre o estado do diretorio 
     *  e seus membros na forma de uma String.
     *
     *  @return String que descreve estado do diretorio.
     */
    public String toString() {
    }

    /** 
     *  Como toString(), mas se argumento for true apresenta
     *  os membros em ordem alfabetica; se false, ordem de 
     *  apresentacao eh irrelevante.
     *  
     *  @param orden  Se true, lista de membros ordenada.
     *  @return String que descreve estado do diretorio.
     */
    public String toString(boolean orden) {
    }

    /**
     *  Lista a diferenca entre este objeto e o objeto especificado
     *  no argumento.
     *
     *  @param estado Objeto HistDir que representa outro objeto
     *           de estado de diretorio.
     *  @return  String com a lista de diferencas entre os estados
     *           ou a frase "Estado do diretorio ... nao alterado desde ..."
     */
    public String listChanges(HistDir estado) {
    }

    // metodo para teste da classe HistDir
    public static void main(String[] args) {
	HistDir corrente = null, passado = null;

	try {
	    // verificacao e inicializacao dos argumentos
	    switch(args.length) {
	    case 0:  
		corrente = new HistDir();
		break;
	    case 2:
		passado = HistDir.getState(args[1]);
	    case 1:
		corrente = new HistDir(args[0]);
		break;
	    default:
		System.out.println("Forma de uso: java HistDir [diretorio [estado]]");
		System.exit(1);
	    }
	    
	    // apresenta estado do diretorio indicado
	    System.out.println(corrente.toString());
	    System.out.println("Em ordem:");
	    System.out.println(corrente.toString(true));
	    
	    // se especificado, compara com passado
	    if (passado != null )
		System.out.println(corrente.listChanges(passado));
	}
	catch (Exception e) {
	    e.printStackTrace();
	}
    }
}