Continua la parte di scrittura delle classi fondamentali del progetto SqlDocGenerator. Vediamo insieme i metodi per il salvataggio e caricamento del file.
Ho scelto di creare un formato proprietario binario SDGF (SqlDocGenFile), strettamente legato al codice, invece che utilizzare più comuni metodi di serializzazione XML. (Possibile futuro aggiornamento).
public static SqlDocGenerator loadSqlDocGenerator(String where) throws Exception {
ObjectInputStream input;
SqlDocGenerator what;
String driver, url, username, password;
int howmany;
input = new ObjectInputStream(new FileInputStream(where));
driver = (String) input.readObject();
url = (String) input.readObject();
username = (String) input.readObject();
password = (String) input.readObject();
what = new SqlDocGenerator(new DBManager(driver, url, username, password));
howmany = (int) input.readInt();
for (int i = 0; i < howmany; i++) {
what.getTables().add((Table) input.readObject());
}
howmany = (int) input.readInt();
for (int i = 0; i < howmany; i++) {
what.getViews().add((View) input.readObject());
}
howmany = (int) input.readInt();
for (int i = 0; i < howmany; i++) {
what.getStoredProcedures().add((StoredProcedure) input.readObject());
}
input.close();
return what;
}
public static void saveSqlDocGenerator(SqlDocGenerator what, String where) throws Exception {
ObjectOutputStream output;
output = new ObjectOutputStream(new FileOutputStream(where));
output.writeObject(what.getDatabaseManager().getDriver());
output.writeObject(what.getDatabaseManager().getUrl());
output.writeObject(what.getDatabaseManager().getUsername());
output.writeObject(what.getDatabaseManager().getPassword());
output.writeInt(what.getTables().size());
for (Table t : what.getTables()) {
output.writeObject(t);
}
output.writeInt(what.getViews().size());
for (View v : what.getViews()) {
output.writeObject(v);
}
output.writeInt(what.getStoredProcedures().size());
for (StoredProcedure sp : what.getStoredProcedures()) {
output.writeObject(sp);
}
output.flush();
output.close();
}
public static final void importComments(SqlDocGenerator from, SqlDocGenerator to) {
for (Table t : from.getTables()) {
if (to.getTables().contains(t)) {
Table aux = to.getTables().get(to.getTables().indexOf(t));
aux.setComment(t.getComment());
for (TableColumn tc : t.getColumns()) {
if (aux.getColumns().contains(tc)) {
aux.getColumns().get(aux.getColumns().indexOf(tc)).setComment(tc.getComment());
}
}
for (TableTrigger tr : t.getTriggers()) {
if (aux.getTriggers().contains(tr)) {
aux.getTriggers().get(aux.getTriggers().indexOf(tr)).setComment(tr.getComment());
}
}
}
}
for (View v : from.getViews()) {
if (to.getViews().contains(v)) {
to.getViews().get(to.getViews().indexOf(v)).setComment(v.getComment());
}
}
for (StoredProcedure sp : from.getStoredProcedures()) {
if (to.getStoredProcedures().contains(sp)) {
to.getStoredProcedures().get(to.getStoredProcedures().indexOf(sp)).setComment(sp.getComment());
}
}
}
Analizziamo il codice sopra proposto:
saveSqlDocGenerator
il metodo riceve in ingresso il path completo del file SDGF da generare; viene istanziato un oggetto di tipo ObjectOutputStream per la scrittura di oggetti in un file di "binario". Vengono scritti in successione: i dati della connessione con il database SQL e gli array delle tabelle, viste e storedProcedure. Per facilitare la lettura di questi oggetti viene inserito, prima di ogni array, la quantità di elementi da scrivere.
loadSqlDocGenerator
il metodo riceve in ingresso il path completo del file SDGF da caricare; viene istanziato un oggetto di tipo ObjectInputStream per la lettura di oggetti in un file "binario". Vengono letti in successione: i dati della connessione con il database SQL e gli array delle tabelle, viste e storedProcedure. Prima della lettura di ciascun array viene letta la quantità di elementi da leggere.
importComments
questo è un metodo accessorio da eseguire subito dopo aver chiamato loadSqlDocGenerator e serve per importare i commenti presenti nel file caricato. Nel caso in cui il database corrente avesse più o meno tabelle/colonne/trigger/viste/procedure, vengono importati solo i commenti agli elementi effettivamente presenti.
Conclusione
Nel prossimo appuntamento vedremo insieme il mastodontico form SqlDocGeneratorFrame.
Nessun commento:
Posta un commento