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:

Finestra

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().