/
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.admin.console.command;

import net.sourceforge.pain.*;
import net.sourceforge.pain.admin.console.*;
import net.sourceforge.pain.plugin.*;

import java.util.*;

/**
 * User: fmike  Date: Jun 2, 2004  Time: 2:15:15 AM
 */
public class ReloadCodeAdminCommand extends AdminCommandHandler {

    public static final int RELOAD = 1;
    public static final int LOAD = 2;
    public static final int UNLOAD = 3;

    private int actionType;

    public ReloadCodeAdminCommand(int actionType) {
        this.actionType = actionType;
    }

    public void processCommand(String params) throws Exception {
        if (params == null || params.length() == 0) {
            showHelp();
            return;
        }
        if (actionType == RELOAD && params.equalsIgnoreCase("LOGIC")) {
            Codebase.getLogicLoader().reload();
            console.out("new classloader for logic classes setted up\n");
        } else if (!params.startsWith("plugin:")) {
            showHelp();
        } else {
            reloadPlugin(params.substring("plugin:".length()));
        }
    }

    private void reloadPlugin(String pluginName) throws Exception {
        PluginManager plm = Codebase.getPluginManager();
        Plugin p = plm.getPlugin(pluginName);
        if (actionType == UNLOAD || actionType == RELOAD) {
            if (p == null) {
                console.out("Plugin:{W'" + pluginName + "'{x was not loaded!\n");
            } else {
                for (Iterator it = p.getDependedPlugins().iterator(); it.hasNext();) {
                    String childName = (String) it.next();
                    console.out("Direct depended plugins to unload:{W'" + childName + "'{x\n");
                }
                console.out("Unloading plugin:{W'" + pluginName + "'{x\n");
                plm.unloadPlugin(p);
            }
        }
        if (actionType == RELOAD || actionType == LOAD) {
            if (plm.getPlugin(pluginName) != null) {
                console.out("Plugin:{W'" + pluginName + "'{x is already loaded\n");
            } else {
                console.out("Loading plugin:'{W" + pluginName + "'{x\n");
                plm.loadPlugin(pluginName);
            }
        }
    }

    public void showHelp() {
        switch (actionType) {
            case RELOAD:
                console.out("Command : " + commandName + " - allows to reload logic classes or plugins\n");
                console.out("Usage: " + commandName + " <logic> or plugin:<name>\n");
                break;
            case LOAD:
                console.out("Command : " + commandName + " - loads plugins\n");
                console.out("Usage: " + commandName + " plugin:<name>\n");
                break;
            case UNLOAD:
                console.out("Command : " + commandName + " - unloads plugins\n");
                console.out("Usage: " + commandName + " plugin:<name>\n");
                break;
        }
    }
}