C. Recanati
InHM Java 
Master 1, 2007-2008

TP 2

Exercice 1 Le but de cet exercice est de créer l’architecture nécessaire pour la mise en place d’un logiciel de dessin (intitulé « Sketcher », pour croquis) que nous implanterons au fur et à mesure des TP. 
1) Reprendre les lignes de code données dans le cours (pp. 84 et 87) pour commencer l’implémentation  du logiciel Sketcher en définissant l’interface Constants dans un fichier séparé. 

Architecture : on prévoit une classe SketcherFrame (ou Cadre) qui introduira les éléments nécessaires à la gestion de la fenêtre dans laquelle sera affiché le contenu du croquis, et une classe SketcherModel (ou Modele) qui définira les éléments nécessaires à la gestion du modèle de données de la feuille de dessin. L’application elle-même sera implémentée par une classe autonome (intitulée Sketcher), qui sera instanciée dans le main par un new. La classe de l’application  « mémorisera » dans deux variables privées une instance de la classe cadre et une instance de la classe modèle. 

2) Dans un premier temps, le cadre ne sera utilisé que pour mémoriser le titre de la fenêtre et le type de l’élément (courant) à dessiner. Cette classe aura donc trois membres privés : un membre elementType de type int, un membre elementColor de type Color, et un membre title de type String. Ecrire les différents membres de cette classe, et utiliser l’interface Constants pour en initialiser les valeurs (avec les constantes par défaut). Ecrire également un constructeur de la classe qui initialise  le champ title.

3) Ecrire le squelette de la classe Sketcher.

4) Ecrire le squelette de la classe SketcherModel. Le modèle d’un dessin sera implémenté avec une LinkedList intilulée ListeElements et comportera une méthode add et une méthode remove. La méthode add permettra d’ajouter un élément à la liste, et la méthode remove, qui retournera un booléen indiquant si l’élément existait dans la liste et a donc bien pu en être supprimé.

Exercice 2 le but de cet exercice est de tester et vérifier des objets de classe File.
1) Ecrire une classe Test  
- qui crée un objet  File monRep  avec l’instruction
File monRep = new File («/usr/java/jdk/src/java/io») ;
- puis teste et imprime s’il s’agit ou non d’un répertoire.
Ensuite  cette classe crée un nouvel objet de type File avec
	File monFichier = new File (monRep,«File.java») ;
imprime  si ce fichier existe, si on peut le lire, et si on peut écrire dedans.
2) Ecrire une classe permettant d’obtenir la liste de tous les fichiers d’un répertoire donné et de consigner la date de leur dernière modification.
3) Modifier le code précédent pour que l’application lise le nom du répertoire et celui du fichier à vérifier en argument au programme.
  Utiliser les méthodes getAbsolutePath, getName et getParent pour imprimer les informations sur le répertoire initial. Récupérer ensuite un tableau contents de File avec la méthode listFiles  et  imprimer les éléments de ce tableau en indiquant à chaque fois s’il s’agit ou non d’un répertoire, et en donnant la date de leur dernière modification (créer un objet Date à partir de contents[i].lastModified() ).

// (Eléments de correction) squelette de SketcherFrame.java

public class SketcherFrame implements Constants {
	// type et couleur de l'element courant  
	private int elementType = ...;
	private Color elementColor = ... ;
	// titre de la fenetre
	private String title ;

// constructeur
	public SketcherFrame(String  titre) {
		...
	}
}

//  squelette de Sketcher.java 

public class Sketcher {
	private SketcherModel model;
	private static SketcherFrame window;
	private static Sketcher  theApp; 
	
	public SketcherFrame getWindow() {
		return window;
	}
	public SketcherModel getModel() {
		return model;
	}
	public void init() {
		window = new SketcherFrame("Dessin");
		model = new SketcherModel() ;
	}
	public static void main(String[] args) {
		theApp = new Sketcher();
		theApp.init();
	}

}

//  squelette de SketcherModel.java  

class SketcherModel {
	protected LinkedList ListeElements = new LinkedList();
        
        public boolean remove(Element element) {
            boolean removed = ListeElements.remove(element);
            return removed;
        }
        
        public void add(Element element) {
            ListeElements.add(element);
        }

}