mercoledì 16 luglio 2014

SQL DOCUMENTATION GENERATOR - PARTE VII

La luce in fondo al tunnel del progetto SqlDocGen sta per giungere. Dopo aver analizzato il problema ed aver proposto qualche soluzione, è necessario implementare l'interfaccia grafica prevista. 
Tuttavia "l'appetito vien mangiando" quindi alcuni aspetti dell'interfaccia grafica sono stati sviluppati deviando un po' dal progetto originale.


Layout


Avevamo previsto che il form SqlDocGeneratorFrame fosse strutturato come mostrato in figura 1:


Figura 1
Tuttavia è stata implementata in un modo leggermente differente. Com'è possibile notare nelle figure successive, al posto del pannello dei bottoni in basso, è stato utilizzato un comodo menu in alto.

Partiamo dal Frame principale, sfruttando il BorderLayout è stato posizionato il menu in alto e il TabbedPane al centro. (figura 2).

Figura 2
Tutte le tab sono divise tramite un BorderLayout formato dalla lista degli elementi sulla sinistra e il contenuto al centro. (figura 3) 

Figura 3
Nello specifico la tab delle tabelle è divisa tramite GridLayout in tre sezioni equivalenti: zona commento, lista delle colonne e lista dei trigger.

Figura 4

Le altre tab (Viste e Stored Procedure) sono strutturate tramite GridBagLayout in due sezioni 30%, zona commento, e 70%, zona codice sql.


Figura 5

Codice Sorgente

Per quanto riguarda il codice sorgente completo fare riferimento al seguente link (la versione release potrebbe differire leggermente).

Il codice è strutturato in questo modo: nel metodo costruttore vengono chiamate le funzioni gui() e translate(), la prima effettua la costruzione dei layout e l'inserimento dei controlli, la seconda si occupa dell'inserimento dei testi tradotti nella lingua corrente. l'oggetto di tipo LangManager utilizzato non è altro che una estensione del ConfigurationManager affrontato nel post dedicato, il funzionamento è elementare: se in application.properties c'è scritto che la lingua impostata è ITA, il LangManager ricerca il file ITA.properties contenente tutti i testi tradotti.

Singolare invece è l'approccio con cui viene tenuta traccia delle modifiche effettuate; Ogni volta che l'utente effettua una selezione, viene aggiornata la variabile "selectedObject" di tipo Commentable, al termine delle modifiche, selezionando un altro elemento, viene salvato il commento inserito tramite il metodo setComment() applicabile sia agli oggetti di tipo Tabella, Vista o StoredProcedure (in quanto eredi di Commentable).

Facendo doppio click su una colonna o su un trigger viene aperto il form di dialogo specifico per l'inserimento del commento. Passando per riferimento gli oggetti saranno i form di dialogo ad applicare il metodo setComment() agli oggetti di tipo TableColumn e TableTrigger.

Conclusione

Ammetto che questo post possa essere leggermente corposo e dispersivo, sono a disposizione per eventuali chiarimenti riguardo il codice. Nel prossimo appuntamento andiamo in dirittura d'arrivo con il metodo di generazione dell'output HTML/PDF. L'adottare questi due formati di salvataggio si rivela utile in quanto vedremo che, dopo aver scritto l'algoritmo che genera HTML, quello per PDF sarà immediato (naturalmente utilizzando una classe-utility particolare).

Nessun commento:

Posta un commento