package jeql.workbench; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.JFileChooser; import javax.swing.Timer; import jeql.api.JeqlRunner; import jeql.monitor.Monitor; import jeql.monitor.MonitorItem; import jeql.util.ImageUtil; import jeql.util.SwingUtil; import jeql.workbench.model.ScriptSource; import jeql.workbench.ui.assist.CodeSnippet; import jeql.workbench.ui.geomview.GeometryList; import jeql.workbench.ui.geomview.Layer; import jeql.workbench.ui.geomview.LayerList; public class WorkbenchController { public WorkbenchController() { } public void scriptAdd() { Workbench.view().scriptAdd(); } public void scriptClose() { Workbench.view().scriptClose(); } public void scriptLoad() { String scriptFile = Workbench.view().getSelectedScriptFile(); int tabIndex = Workbench.view().scriptTabIndex(scriptFile); if (tabIndex >= 0) { Workbench.view().showTab(tabIndex); return; } ScriptSource src = ScriptSource.createFile(scriptFile); src.loadText(); Workbench.view().scriptLoad(src); } public void scriptSave() { Workbench.view().scriptSave(); } public void scriptCopy() { String text = Workbench.view().getCurrentScriptText(); Workbench.view().scriptAdd(text); } public void inspect(String text) { Workbench.view().inspectText(text); } public void insertCodeSnippet(CodeSnippet code) { Workbench.view().insertCodeSnippet(code); } public void updateFileList() { Workbench.model().updateFileList(); Workbench.view().updateScript(); } public void run() { run(false); } public void debug() { run(true); } public void run(boolean isDebug) { /* * Set up run for immediate script or script file */ JeqlRunnable proc = new JeqlRunnable(new JeqlRunnable.RunListener() { public void end(JeqlRunner runner) { runEnd(runner); } }); setRunData(proc, isDebug); // clear monitor data for new run Monitor.clear(); // enable monitor first to ensure it is initialized and ready to read from Monitor.enableWorkbench(isDebug); // reload script from file //Workbench.model().load(); Workbench.view().clearOutput(); Workbench.view().run(Monitor.model()); startTimer(); new Thread(proc).start(); } private void setRunData(JeqlRunnable proc, boolean isDebug) { if (Workbench.view().isInternalScript()) { proc.setScript(Workbench.view().getCurrentScriptText()); } else { proc.setScriptFile(Workbench.view().getCurrentScriptSource().getFilename()); } proc.setKeepData(isDebug); } private void runEnd(JeqlRunner runner) { //updateTimer.stop(); stopTimer = true; stop(); //Workbench.view().stop(); Workbench.view().reportOutput(); if (! runner.getReturnCode()) { Workbench.view().reportScriptError(runner.getErrorMessage()); } } public void pause() { Monitor.setPaused(true); Workbench.view().pause(); } public void stop() { Monitor.end(); Workbench.view().stop(); } private Timer updateTimer; //private long runMillis = 0; private static final int TIMER_DELAY_IN_MILLIS = 200; private static boolean stopTimer = false; private void startTimer() { stopTimer = false; // System.out.println("timer started"); updateTimer = new Timer(TIMER_DELAY_IN_MILLIS, new ActionListener() { public void actionPerformed(ActionEvent e) { //runMillis += TIMER_DELAY_IN_MILLIS; // System.out.println("timer: " + runMillis); Monitor.model().update(); Workbench.view().updateMonitor(); if (stopTimer) updateTimer.stop(); } }); updateTimer.setInitialDelay(0); updateTimer.start(); } /* private void stopTimer() { updateTimer.stop(); } */ public void help() { Workbench.view().helpDlg.loadContent(); Workbench.view().helpDlg.setVisible(true); } public void viewGeoms(MonitorItem monitorItem) { LayerList lyrList = new LayerList(); if (monitorItem != null) { GeometryList geomCont = new RowListGeometryList(monitorItem.getRowList()); Layer lyr = new Layer(monitorItem.getName()); lyr.setSource(geomCont); lyrList.add(lyr); } Workbench.geomView().setSource(lyrList); Workbench.view().geomView.setVisible(true); } public void displaySettings() { Workbench.view().settingsDlg.setVisible(true); } public void applySettings() { Workbench.view().monitorDataPanel.showSpaces(Workbench.model().getSettings().showSpaces); Workbench.view().monitorDataPanel.update(); } }