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); script("resetTabsMySQL", args()); } 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) { String dbName = tabs.selected() == "Database"?node.getText():node.getParent().getText(); log.debug("selectedTab: " + selectedTab + " dbName: " + dbName); context.put("currentDB", dbName); context.remove("currentTable"); args().put("selectedTab", "Database"); script("resetTabsMySQL", args()); args().put("dbName", dbName); args().put("workerKey", dbName); Worker w = worker("showTableStatusMySQLWorker", args(), Worker.RunOption.LET_FINISH_IF_RUNNING); //in case its already running dont run the detector if (!w.isCancelled()) LongRunningTask.detect(dbName, "progressWaiter", args(), w , 250); //superficiality just to keep the pbar stack in order //since we cant guarantee which one of the threads will be detected long //in the "right" order" if ( tableChanged ) { try { Thread.sleep(25); } catch (Exception e) {} } } if (tableChanged) { String dbName = node.getParent().getText(); String tableName = node.getText(); context.put("currentTable", tableName); args().put("dbName", dbName); args().put("tableName", tableName); args().put("workerKey", dbName+tableName); Worker w = worker("loadTableInfoMySQLWorker", args(), Worker.RunOption.LET_FINISH_IF_RUNNING); //in case its already running dont run the detector if ( !w.isCancelled() ) LongRunningTask.detect(dbName+tableName, "progressWaiter", args(), w , 250); //superficial for the gui try { Thread.sleep(25); } catch (Exception e) {} args().put("workerKey", "loadTableDataMySQLWorker" + dbName + tableName); w = worker("loadTableDataMySQLWorker", args(), Worker.RunOption.LET_FINISH_IF_RUNNING); if ( !w.isCancelled() ) LongRunningTask.detect("loadTableDataMySQLWorker" + dbName+tableName, "progressWaiter", args(), w , 250); }