/
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.tinylib.logic.event.console.command;

import net.sourceforge.pain.*;
import net.sourceforge.pain.plugin.*;
import net.sourceforge.pain.tinylib.logic.fn.*;
import net.sourceforge.pain.tinylib.plugin.shutdown.*;
import net.sourceforge.pain.util.*;


public final class Shutdown extends GrantedCommand {

    final static String SHUTDOWN_PLUGIN_NAME = "shutdown.ShutdownTimer";

    public void processCommand() throws Exception {
        if (commandParams == null) {
            showUsage();
            return;
        }
        if ("EMERGENCY".equals(commandParams)) { // if there are some problems with plugins or code..
            Codebase.getPulse().stopPulse();
        } else {
            PluginManager plm = Codebase.getPluginManager();
            ShutdownTimer shutTimer = (ShutdownTimer) plm.getPlugin(SHUTDOWN_PLUGIN_NAME);

            if (shutTimer == null) {
                MessageOutFn.outln(console, "ShutdownTimer plugin is not loaded!");
                return;
            }

            commandParams = commandParams.toUpperCase();
            final boolean wasRunned = shutTimer.isShutdownInProcess();
            Log.debug("shutdown was runned:" + wasRunned);
            if ("STOP".equals(commandParams) || "CANCEL".equals(commandParams)) {
                if (wasRunned) {
                    shutTimer.cancel(true);
                } else {
                    MessageOutFn.outln(console, "Shutdown was not runned!");
                    return;
                }
            } else if ("NOW".equals(commandParams)) {
                shutTimer.now();
            } else if ("PULSE".equals(commandParams)) {
                if (!wasRunned) {
                    MessageOutFn.outln(console, "Shutdown was not runned!");
                    return;
                }
                MessageOutFn.outln(console, "Shutdown time " + shutTimer.getTimeBeforeShutdown() + " sec.");
            } else {
                int minutes;
                try {
                    minutes = Integer.parseInt(commandParams);
                } catch (Exception e) {
                    showUsage();
                    return;
                }
                minutes = Math.max(minutes, 0);
                shutTimer.reset(minutes * 60, !wasRunned);
                if (wasRunned) {
                    MessageOutFn.outln(console, "Shutdown time changed");
                }
            }

        }
    }

    private void showUsage() {
        MessageOutFn.outln(console, command.name + ": specify time in minutes to shutdown, 'NOW' for instant shutdown or 'CANCEL' to stop");
    }
}