package net.sourceforge.pain.tools.guitool.action.admin; import net.sourceforge.pain.network.guitool.*; import net.sourceforge.pain.tools.guitool.*; import net.sourceforge.pain.tools.guitool.action.*; import net.sourceforge.pain.tools.guitool.dialog.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.text.html.*; import java.awt.*; import java.util.*; import java.util.Map; public class ServerStatusExplorerAction implements GTAction { private static JEditorPane instance; private boolean infoRead = false; public void executeAction() { try { final Component component = getComponent(); if (!infoRead) { refresh(); } GuiTool.appFrame.workspacePanel.setActiveComponent(component); } catch (Exception e) { e.printStackTrace(); } } private Component getComponent() throws Exception { if (instance == null) { instance = HtmlComponentRegistry.get(getClass()); instance.addHyperlinkListener(new MyHyperlinkListenerImpl()); } return instance; } private class MyHyperlinkListenerImpl extends DefaultHyperlinkListenerImpl { public void hyperlinkUpdate(HyperlinkEvent ev) { if (ev.getEventType() != HyperlinkEvent.EventType.ACTIVATED) { return; } final WorkspacePanel workspacePanel = GuiTool.appFrame.getWorkspacePanel(); try { if (ev.getURL().toString().endsWith("/update")) { GlobalPerformer.ensureConnected(); refresh(); } else if (ev.getURL().toString().endsWith("/reload")) { try { if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(workspacePanel, "Reload logic code?", "Select an option:" ,JOptionPane.YES_NO_OPTION)) { GuiTool.log("ReloadCode: start"); GTNetPacket p = GlobalPerformer.getConnection().sendBlocking(new GTNetPacket("ReloadLogicGTEvent", new String[]{"reload"})); GuiTool.log("ReloadCode: "+p.data); JOptionPane.showMessageDialog(workspacePanel, "Code reloading status:"+(String) p.data); } } catch (Exception e) { GuiTool.showFailInfo(e); } } else if (ev.getURL().toString().endsWith("/shutdown")) { try { if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(workspacePanel, "Shutdown Server? (Server could not be started from GuiTool)", "Select an option:" ,JOptionPane.YES_NO_OPTION)) { GuiTool.log("ShutdownServer: start"); GTNetPacket p = GlobalPerformer.getConnection().sendBlocking(new GTNetPacket("RestartGTEvent", new String[]{"shutdown"})); GuiTool.log("ShutdownServer: "+p.data); JOptionPane.showMessageDialog(workspacePanel, "ServerShutdown status:"+(String) p.data); } } catch (Exception e) { GuiTool.showFailInfo(e); } } else { super.hyperlinkUpdate(ev); } } catch (IllegalStateException e) { GuiTool.showFailInfo(e); } } } private void refresh() { GuiTool.log("refreshing server status info"); try { GTNetPacket response = GlobalPerformer.getConnection().sendBlocking(new GTNetPacket("ServerStatus", "")); Map map = (Map) response.data; HTMLDocument doc = (HTMLDocument) instance.getDocument(); for (Iterator it = map.keySet().iterator(); it.hasNext();) { String key = (String) it.next(); String value = (String) map.get(key); javax.swing.text.Element e = doc.getElement(key); if (e == null) { GuiTool.log("unknown status property:" + key); } else { doc.setInnerHTML(e, value); } } infoRead = true; } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(instance, "Error:" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } }