/
codebase/src/net/sourceforge/pain/admin/console/command/
codebase/src/net/sourceforge/pain/data/role/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/util/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
mudlibs/tinylib/
mudlibs/tinylib/area/
mudlibs/tinylib/etc/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/prototype/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/deploy/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/fn/util/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/impl/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/command/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/reset/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/shutdown/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/social/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/util/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
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);
        }
    }

}