Search and replace Progetto d’esame per il corso di Programmazione a Oggetti Prof. Giacomo Cabri Traccia di progetto REGOLE PER LO SVOLGIMENTO Il progetto deve essere svolto usando il linguaggio Java e possedere i seguenti requisiti implementativi: • Essere dotato di interfaccia grafica tramite cui interagire con il programma stesso. • Sfruttare i meccanismi di incapsulamento, ereditarietà e polimorfismo. • Per l’ereditarietà è possibile sfruttare classi astratte e interfacce; si considerano escluse le relazioni di ereditarietà diretta da classi di libreria Java. • Sfruttare le classi di sistema Java per la gestione dell'input/output. • Utilizzare i generics. • Il programma deve essere eseguibile da linea di comando. Il software deve essere accompagnato da pagine di documentazione HTML (ivi incluse le pagine generate tramite Javadoc) che descrivano le scelte di progetto effettuate e la struttura del sistema software. Nel seguito del testo, i paragrafi evidenziati in azzurro sono facoltativi, e servono per differenziare il voto. Lo svolgimento della parte obbligatoria contribuisce al voto per 20 punti. Il contributo delle parti facoltative è riportato nelle rispettive descrizioni. DESCRIZIONE DEL PROGETTO La possibilità di fare sostituzioni testuali in modo automatico all’interno di un file o in più file contemporaneamente risulta molto utile in diverse situazioni, ad esempio quando si devono gestire diversi file di configurazione, o diversi file sorgenti, o anche semplici documenti. Una ulteriore utilità è quella di poter specificare un pattern invece di una stringa costante, cioè descrivere la struttura del testo che si vuole sostituire. Il presente progetto si propone di descrivere e sviluppare una applicazione che abbia le seguenti funzionalità (dettagliate nei paragrafi successivi): • Scelta dei file in cui operare le modifiche; • Specifica delle modifiche; • Ricerca in sotto directory; • Visualizzazione delle modifiche effettuate in formato tabellare; • Ricerca di informazioni nel risultato; • Stampa dei risultati. 1 Scelta dei file in cui operare le modifiche Come primo passo l’utente deve selezionare i file da modificare. Può essere un singolo file, oppure un insieme di file. Opzionalmente, si deve dare la possibilità all’utente di selezionare tutti i file di una directory che hanno una data estensione [3 punti]. Specifica delle modifiche L’utente deve specificare due stringhe, una è quella che viene cercata, e l’altra è quella che va a sostituire la stringa trovata. Si dia la possibilità di specificare un pattern, cioè uno schema della stringa da cercare. Ad esempio, il pattern può prevedere che il carattere ‘.’ rappresenti qualsiasi carattere, quindi cercando la stringa “ca.a” si può trovare “casa”, “cava”, “cala”, ecc. La definizione della sintassi dei pattern è lasciata allo studente. Opzionalmente, si sfruttino le espressioni regolari per la ricerca di pattern all’interno del testo [5 punti]. Per implementare questa funzionalità si suggerisce di utilizzare il polimorfismo in Java. Ricerca in sotto directory Nel caso in cui il programma dia la possibilità all’utente di selezionare tutti i file di una directory che hanno una data estensione, deve permettere anche di eseguire le modifiche nei file che si trovano nelle sottodirectory di quella specificata [4 punti]. Per implementare questa funzionalità si suggerisce di utilizzare il polimorfismo in Java. Visualizzazione delle modifiche effettuate in formato tabellare Le modifiche apportate devono essere riportate all’utente in una tabella che elenca, una riga per ogni modifica effettuata: • Nome del file • Directory del file (se disponibile la ricerca in sottodirectory) • Stringa trovata • Stringa sostituita • Posizione dall’inizio del file Se la stringa cercata compare più volte nel file, si avranno più righe con lo stesso nome di file, la stessa stringa ma posizioni diverse. Si dia la possibilità di salvare i risultati ottenuti e di aprire risultati salvati in precedenza. Nel caso in cui si tenti di salvare dei risultati in un file che esiste già, deve essere chiesto all’utente se desidera sovrascrivere il file esistente [2 punti]. Si offra all’utente, inoltre, la possibilità di ordinare le righe dei risultati in base ai valori di una colonna scelta [2 punti]. Ricerca di informazioni nei risultati L’utente deve avere la possibilità di effettuare delle ricerche nei risultati correnti. La ricerca si basa su testo libero che può essere una parte del testo contenuto in una cella della tabella dei risultati. 2 La ricerca deve evidenziare la prima cella che contiene il testo cercato; l’applicazione deve permettere all’utente di continuare la ricerca per evidenziare man mano le celle successive che rispondono ai requisiti (ad esempio, tramite un bottone “successivo”). Stampa dei risultati Si dia all’utente la possibilità di stampare i risultati correnti. Si sfruttino le classi di libreria Java per stampare tramite una delle stampanti configurate dal sistema operativo [2 punti]. MATERIALE UTILE • • Package java.util.regex per la gestione delle espressioni regolari. Sono disponibili diversi tutorial online sulle espressioni regolari. Interfaccia Java java.awt.print.Printable e classe Java java.awt.print.PrinterJob per stampare su stampante. Si possono trovare tutorial online. 3