File System
Sviluppare le classi che rappresentano un file-system di un computer.
Tutte le classi devono essere nel package "files".
Si parta dal progetto Eclipse. (Istruzioni)
R1: Hard disk
Ad un computer deve essere possibile aggiungere nuovi hard disk.
Gli hard disk sono identificati da una lettera ed hanno una
capacità massima (size) ed una capacità residua
(available). La lettera viene assegnata agli HD dal computer a partire
da 'C', nell’ordine in cui vengono aggiunti al computer. Inizialmente
gli HD sono vuoti.
Il computer è rappresentato dalla classe Computer. Gli hard disk dalla classe
HardDisk. Per aggiungere un hd
ad un computer si utilizza il metodo add()
che riceve come parametro un
oggetto di tipi HardDisk. La dimensione totale di un hd viene
specificata come parametro del costruttore.
L'elenco dei dischi montati su un PC è dato dal metodo elencoDischi() che restituisce una
collezione di oggetti HardDisk. Per ottenere un hd specifico è
possibile usare il metodo getDisk()
che riceve come parametro la lettera del disco.
Dato un hd è possibile sapere la sua lettera con il metodo getId(). La dimensione totale di un
hd viene data dal metodo getSize().
In ogni istante è possibile sapere la dimensione residua di un
hd tramite il metodo getAvailable().
R2: Folder
I folder possono contenere dei file e altri folder e sono
caratterizzati da un nome. I nomi dei folder contenuti nello stesso
folder devono essere unici.
Un folder occupa 5KB di spazio sull’HD.
A partire da un hd è possibile ottenere il folder o file
corrispondente ad un path, specificato utilizzando il carattere "/"
come separatore.
I folder vengono rappresentati dall'interfaccia Folder.
Gli hd vengono formattati tramite il metodo format(). Quando un hd viene
formattato viene creato un folder iniziale identificato con il nome "/".
Dato un folder è possibile aggiungere dei folder in esso tramite
il metodo addFolder() che
riceve come parametro un oggetto Folder.
Se si cerca di aggiungere un folder con un nome già esistente
all'interno del folder contenitore, viene generata un'eccezione di FolderAlreadyExisting.
Dato un hd è possibile ottenere un folder tramite il metodo getFolder() che riceve come
parametro il path del folder.
Dato un folder è possibile ottenere uno dei folder contenuti
tramite il metodo getSubFolder()
che riceve come nome il nome del sotto-folder.
Il metodo getFathet()
restituisce il folder contenitore.
R3: File
I file sono caratterizzati da un nome e da una dimensione. I nomi dei
file contenuti in un folder devono essere unici.
Dato un folder è possibile ottenere l'elenco dei file contenuti
in ordine alfabetico o di dimensione.
Le dimensioni degli HD, folder, e file possono essere definiti usando
delle costanti dichiarate nella classe HardDisk.
I file vengono rappresentati dalla classe File. Per aggiungere un file ad un
folder si può utilizzare il metodo addFile() della classe Folder.
Dato un folder è possibile recuperare un file contenuto tramite
il metodo getFile(), che
riceve come parametro il nome del file.
Dato un file è possibile sapere il nome tramite il metodo getName() e la dimensione tramite il
metodo getSize().
E' possibile dato un hd ottenere un file tramite il metodo getFile() che riceve come parametro
il path del file.
R4: Elenco file
Dato un forlder è possibile ottenere l'elenco dei file in due
modi diversi.
L'elenco alfabetico dei file è dato dal metodo elencoAlfabeticoFile() che
restituisce una Collection.
Il metodo elencoSizeFile()
restituisce i file in ordine crescente di dimensione.
R5: Interfaccia Grafica
Realizzare l'interfaccia grafica per gestire gli hard disk simile alla
seguente:

E' possibile inserire la dimensione, scegliere l'unità di misura
e premere il pulsante "Add disk" per aggiungere un hd al computer.
Quando viene aggiunto un HD viene aggiornata la lista degli hd (in alto
a sinistra).
Selezionando un elemento nella lista le informazioni relative all'HD
vengono mostrate nei campi sottostanti.
Il pulsante "Format" formatta l'hd selezionato e le cui informazioni
sono mostrate a sinistra del pulsante.
N.B. usare gli attributi forniti per
rendere la classe testabile.
Suggerimenti
Per la scelta dell'unità di misura di usi un JComboBox ed il suo costruttore JComboBox(Object[]).
Per la lista si usi un JList.
Per aggiornare l'elenco si sfrutti il metodo setListData(Object[]).
La selezione di un elemento dalla lista scatena un evento da ricevere
con un ListSelectionListener,
l'elemento selezionato in una lista può essere ottenuto con il
metodo getSelectedValue().