Files
HeidiSQL/extra/jheidi/schemaTreeEvents.ajl
2008-11-17 11:33:15 +00:00

179 lines
4.9 KiB
Plaintext

NodeInfo node = argObj("node");
final WindowContext context = argObj("windowContext");
Tabs tabs = context.get("/mainTabs");
String selectedTab = tabs.selected();
String nodeType = node.getType();
boolean dbChanged = false;
boolean tableChanged = false;
log.debug("node type = " + nodeType);
log.debug("selected tab = " + selectedTab);
if ( nodeType == null )
{
tabs.select("Host");
args().put("selectedTab", "Host");
context.put("currentDB", null);
thread("resetTabs", args(), true);
}
else if ( "db" == nodeType )
{
Panel tab = tabs.select("Database");
if ( !node.getText().equals(context.get("currentDB")) )
{
dbChanged = true;
}
}
else if ( "table" == nodeType )
{
String dbName = node.getParent().getText();
Panel tab = tabs.get("Table");
if ("Host" == selectedTab || "Database" == selectedTab)
{
tabs.select("Table");
}
if (!node.getParent().getText().equals(context.get("currentDB")))
{
dbChanged = true;
}
if ( !node.getText().equals(context.get("currentTable")) || dbChanged )
{
tableChanged = true;
}
}
if (dbChanged)
{
final String dbName = tabs.selected() == "Database"?node.getText():node.getParent().getText();
log.debug("selectedTab: " + selectedTab + " dbName: " + dbName);
context.put("currentDB", dbName);
context.remove("currentTable");
Runnable preloadIfLazy = new Runnable() {
public void run() {
if ( dbName.equals((String)context.get("currentDB")))
{
Toolbar tb = context.get("/mainTabs/Database/toolbar");
Text banner = context.get("/mainTabs/Database/toolbar/banner");
banner.setText("Database " + dbName + ": (loading)");
banner = context.get("/mainTabs/Query/toolbar/banner");
banner.setText("SQL query on database: " + dbName);
Table table = context.get("/mainTabs/Database/table");
table.clear();
tb.updateUI();
}
}
};
Runnable postCancelUpdate = new Runnable() {
public void run() {
if (dbName.equals((String)context.get("currentDB")) )
{
Text banner = context.get("/mainTabs/Database/toolbar/banner");
banner.setText("Database " + dbName + ": (load canceled)");
}
}
};
args().put("selectedTab", "Database");
thread("resetTabs", args(), true);
args().put("dbName", dbName);
args().put("preloadIfLazy", preloadIfLazy);
args().put("postCancel", postCancelUpdate);
args().put("waitOperation", "show table status from `" + dbName + "`");
args().put("workerKey", dbName);
Worker w = worker("showTableStatusWorker", args(), Worker.RunOption.LET_FINISH_IF_RUNNING);
//explain: the worker was already running but the state change needs to happen anyway
//no need to run detection thread
if ( w.isCancelled() )
{
preloadIfLazy.run();
return;
}
args().put("worker", w);
LongRunningTask.detect(dbName, "progressWaiter", args(), w , 250);
}
if (tableChanged)
{
final String dbName = node.getParent().getText();
final String tableName = node.getText();
context.put("currentTable", tableName);
Runnable preloadIfLazy = new Runnable() {
public void run() {
if ( tableName.equals((String)context.get("currentTable")) &&
dbName.equals((String)context.get("currentDB")))
{
Toolbar tb = context.get("/mainTabs/Table/toolbar");
Text banner = context.get("/mainTabs/Table/toolbar/banner");
banner.setText("Table properties for " + arg("dbName") + "." + arg("tableName") + " (loading)");
Table table = context.get("/mainTabs/Table/table");
table.clear();
tb.updateUI();
}
}
};
Runnable postCancelUpdate = new Runnable() {
public void run() {
if ( tableName.equals((String)context.get("currentTable")) &&
dbName.equals((String)context.get("currentDB")))
{
Text banner = context.get("/mainTabs/Table/toolbar/banner");
banner.setText("Table properties for " + arg("dbName") + "." + arg("tableName") + " (load canceled)");
}
}
};
args().put("dbName", dbName);
args().put("tableName", tableName);
args().put("preloadIfLazy", preloadIfLazy);
args().put("postCancel", postCancelUpdate);
args().put("waitOperation", "show full columns from `" + dbName + "`.`" + tableName + "`");
args().put("workerKey", dbName+tableName);
Worker w = worker("loadTableInfoWorker", args(), Worker.RunOption.LET_FINISH_IF_RUNNING);
//worker was already running
if ( w.isCancelled() )
{
preloadIfLazy.run();
return;
}
args().put("worker", w);
LongRunningTask.detect(dbName+tableName, "progressWaiter", args(), w , 250);
thread("loadTableData", args(), true);
}