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);
}
}
}