package LayoutMain;
import Common.ErrorConsoleManager;
import BugAnalyzer.Indexer;
import FileBugManager.BugUpdater;
import BugAnalyzer.StartAnalyze;
import DatabaseManager.SqliteDb;
import Test.Test;
import java.io.File;
import java.util.Hashtable;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.SwingWorker;
import XmlManager.ScriptClassification;
/**
* Classe Richiamata dal Layout la quale gestisce
* tutte le azioni da effettuare (Analisi, crazione
* database, ecc).
* Le azioni più onerose vengono avviate in un
* nuovo thread.
* @author Fabrizio Faustinoni, Giuseppe Falco
*/
public class ActionManager {
public static final ActionManager ISTANCE = new ActionManager();
private Layout layout = null;
public static int ACTION_UPDATE_BUG = 1;
public static int ACTION_START_ANALYZE = 2;
public static int ACTION_CREATE_QUERY = 3;
public static int ACTION_SAVE_SQL_FILE = 4;
public static int ACTION_CREATE_DB = 5;
public static int ACTION_DO_TEST = 6;
public static int ACTION_ERROR_MODALITY = 7;
public static int ACTION_DEFAULT_MODALITY = 8;
private static Timer timer;
/**
* Richiamando questa funzione si effettuano
* le azioni richieste in base al parametro
* passato.
* I possibili valori di tale parametro sono
* memorizzati nelle varibili statiche di
* tale classe:
* ACTION_UPDATE_BUG
* ACTION_START_ANALYZE
* ACTION_CREATE_QUERY
* ACTION_SAVE_SQL_FILE
* ACTION_CREATE_DB
* @param Action
*/
public void doAction(int Action) {
switch (Action) {
case 1: {
// Aggiono i file dei bug
if (layout != null) {
layout.disableAll();
layout.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
}
// Avvio thread
SwingWorker worker = new SwingWorker() {
@Override
protected String doInBackground() throws InterruptedException {
BugUpdater bugUpdater = new BugUpdater();
bugUpdater.update(true);
return null;
}
@Override
protected void done() {
layout.enableAll();
layout.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
}
};
worker.execute();
break;
}
case 2: {
// Inizio l'analisi
if (layout != null) {
layout.disableAll();
layout.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
}
SwingWorker worker = new SwingWorker() {
@Override
protected String doInBackground() throws InterruptedException {
StartAnalyze analyzer = new StartAnalyze();
analyzer.start(false);
return null;
}
@Override
protected void done() {
layout.enableAll();
layout.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
}
};
worker.execute();
break;
}
case 3: {
// Creo la query sql per creare il database
if (layout != null) {
layout.disableAll();
layout.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
}
SwingWorker worker = new SwingWorker() {
@Override
protected String doInBackground() throws InterruptedException {
// Verifico l'esisteza di almeno un file da indicizzare
File f = new File(Indexer.path_for_data);
if ((!f.exists()) || (f.listFiles().length == 0)) {
Layout.log("Cartella da indicizzare " + f.getPath() + " vuota, aggiorno i file!!");
// Aggiorno i file di bug
BugUpdater bugUpdater = new BugUpdater();
bugUpdater.update(false);
}
// Se non avevo clacolato le priorità statiche lo faccio ora
if (StartAnalyze.finalPriority == null) {
StartAnalyze s = new StartAnalyze();
s.start(false);
}
Layout.clearLogger();
// Recupero le classificazioni degli script
ScriptClassification scriptClass = new ScriptClassification();
Hashtable classification = scriptClass.getClassification();
// Creo il database
SqliteDb db = new SqliteDb(false);
if (Layout.staticPriority.isSelected()) {
// Uso priorità statiche
db.createDbScript(StartAnalyze.finalPriority, classification);
} else {
// Inizializzo le priorità a 1
SqliteDb.setUseDefaultPriority(false);
db.createDbScript(StartAnalyze.finalPriority, classification);
}
return null;
}
@Override
protected void done() {
layout.enableAll();
layout.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
}
};
worker.execute();
break;
}
case 4: {
// Salvo il file Sql (forced)
if (SqliteDb.query != null) {
if (Layout.staticPriority.isSelected()) {
// Uso priorità statiche
SqliteDb.saveQueryToFile(true);
} else {
SqliteDb.setUseDefaultPriority(false);
// Creo database con priorità a 1
SqliteDb.saveQueryToFile(true);
}
}
break;
}
case 5: {
// Creo il database sql
if (layout != null) {
layout.disableAll();
layout.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
}
// Se lo avvio come thread da un eccezzione: Database locked
//SwingWorker worker = new SwingWorker() {
// @Override
// protected String doInBackground() throws InterruptedException {
try {
if (Layout.staticPriority.isSelected()) {
// Priorità statiche
SqliteDb.createSqliteDb();
} else {
// Inizializzo a 1
SqliteDb.setUseDefaultPriority(false);
SqliteDb.createSqliteDb();
}
} catch (Exception ex) {
ex.printStackTrace();
}
// return null;
// }
// @Override
// protected void done() {
layout.enableAll();
layout.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
// }
// };
// worker.execute();
break;
}
case 6: {
// Rieffetto i test
// Effettuo tutti i test per verificare il corretto funzionamento
// del programma
Layout.clearLogger();
Test test = new Test();
test.doAllTest();
break;
}
case 7: {
// Setto la modalità errore del layout
// Eseguo le istruzioni che mi permettono di settare
// il layout in modalità "errore"
if (timer == null) {
if (layout != null) {
timer = new Timer();
TimerTask task = new ErrorConsoleManager(layout);
timer.schedule(task, 0, 500);
layout.disableAll();
}
}
break;
}
case 8: {
// Setto la modalità default del layout
if (timer != null) {
timer.cancel();
Layout.setModalityConsole(true);
timer = null;
layout.enableAll();
}
break;
}
default: {
System.out.println("Errore Action Manager code");
}
}
}
public void setLayout(Layout layout) {
this.layout = layout;
}
/**
* Effettua le stesse operazioni di doLayout in modalità test
* Non posso effetture le operazioni in nuovi thread perchè
* deve essere tutto sinronizzato
* @return
*/
public static Object doActionTest(int Action, Object params) {
switch (Action) {
case 1: {
// Aggiono i file dei bug
BugUpdater bugUpdater = new BugUpdater();
bugUpdater.updateTest();
break;
}
case 2: {
// Analizzo i file
StartAnalyze analyzer = new StartAnalyze();
analyzer.start(true);
break;
}
case 3: {
// Creo il database
// Creo la query sql per creare il database
// Recupero le classificazioni degli script
ScriptClassification scriptClass = new ScriptClassification();
Hashtable classification = scriptClass.getClassification();
// Creo il database
SqliteDb db = new SqliteDb(true);
Boolean staticPriority = (Boolean) params;
// Inizializzo le priorità a 1
SqliteDb.setUseDefaultPriority(staticPriority);
db.createDbScript(StartAnalyze.finalPriority, classification);
return null;
}
case 4: {
// Slavo il file sql
SqliteDb.saveQueryToFile(true);
break;
}
case 5: {
//Creao il database
try {
SqliteDb.createSqliteDb();
} catch (Exception ex) {
ex.printStackTrace();
}
break;
}
default: {
return null;
}
}
return null;
}
}