martedì 2 dicembre 2014

SQL DOCUMENTATION GENERATOR - VERSIONE 1.1.1.0

Dopo l'aggiornamento del software alla versione 1.1 del progetto SQL Documentation Generator ci siamo trovati davanti una piccola rivoluzione nel nostro progetto. Come ogni "grande aggiornamento" che si rispetti, sono stati segnalati dei piccoli errori e consigli dalla comunità di Programmazione Applicata.

Vi ricordo che potete trovare il file Jar di distribuzione nella sezione Downloads, i sorgenti per ora sono disponibili gratuitamente previa richiesta tramite messaggio o email.

Codifica per Bugs & Features

I titoli delle sezioni rispettano la seguente struttura:


NNNN - [X] - TTTTT


Dove NNNN è il numero univoco del bug o feature segnalato, X può essere B(bug) oppure F(nuova feature), TTTT è l'argomento della modifica.


0008 - [B] - Parsing TableColumn SQL 2005

Sembrerebbe che MS SQL Server 2005 non riesca a processare correttamente la query di estrazione delle colonne in base alla tabella. L'errore è dato dal fatto che nella query veniva utilizzata la funzione SQL IIF non presente di default nella versione Express di Microsoft SQL Server 2005. Detto questo, per risolvere il problema è stata semplificata la query di estrazione e modificato il metodo di parsing dell'oggetto TableColumn:
public static TableColumn parse(ResultSet result) throws Exception {
    TableColumn output;
    String typelen;
    output = new TableColumn();
    output.setId(result.getInt("column_id"));
    output.setName(result.getString("name"));
    output.setType(result.getString("typename"));
    typelen = result.getString("typelen");
    if (typelen != null) {
        output.setType(output.getType() + " (" + (typelen.equals("-1") ? "max" : typelen) + ")");
    }
    return output;
}


0009 - [F] - Prima lettera maiuscola

Adesso ogni commento inserito avrà la prima lettera maiuscola. Per fare questo, grazie all'ereditarietà degli oggetti, è stato sufficiente modificare il metodo setComment della classe astratta org.dgl.sqldocgen.Commentable come segue:
public void setComment(String comment) {
    this.comment = comment.length() > 1 ? Character.toUpperCase(comment.charAt(0)) + comment.substring(1) : comment;
}



0010 - [B] - VARCHAR(MAX)

L'implementazione di questa modifica è già stata mostrata in 0008[B]. Se la lunghezza di un tipo è impostata a (-1) allora significa che è un MAX, molto semplice.


0011 - [F] - Sicuro di uscire?

Che mancanza! Non mi ero MAI accorto di questa brutta cosa. Il software non chiede conferma di uscire facendo perdere tutte le modifiche non salvate in un attimo. Per fare questo ho deciso di crearmi un WindowListener personalizzato chiamato FormClosingPreventer (in realtà a livello implementativo estendo un WindowAdapter):


package org.dgl.sqldocgen;

import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JOptionPane;
import org.dgl.manager.LangManager;

public class FormClosingPreventer extends WindowAdapter {

    LangManager langManager;

    public FormClosingPreventer(LangManager langManager) {
        this.langManager = langManager;
    }

    public void preventFormClosing(Window window) {
        String dialogMessage;
        int userChoice;
        dialogMessage = langManager.get("SQLDOCGENERATORFRAME_CONFIRMEXIT");
        userChoice = JOptionPane.showConfirmDialog(window, dialogMessage, "", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if (userChoice == JOptionPane.NO_OPTION) {
            return;
        }
        window.dispose();
    }

    @Override
    public void windowClosing(WindowEvent e) {
        preventFormClosing(e.getWindow());
    }

}

Nessun commento:

Posta un commento