/
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.plugin.social;

import net.sourceforge.pain.plugin.*;
import net.sourceforge.pain.tinylib.*;
import net.sourceforge.pain.tinylib.plugin.command.*;
import net.sourceforge.pain.util.*;
import net.sourceforge.pain.*;

import java.io.*;
import java.util.*;

/**
 * this plugin adds socials to game. Socials area registered after commands so have a lower priority
 * net.sourceforge.pain.logic.event.Social is used with this plugin
 */

public final class SocialPlugin extends Plugin {

    Map socials = new HashMap();
    CommandMapper commandMapper;

    protected void init() throws Exception {
        Log.debug("Socials Plug INIT");
        commandMapper = (CommandMapper) Codebase.getPluginManager().getPlugin("command.CommandMapper"); //dependency will be added automatically
        if (commandMapper == null) {
            throw new RuntimeException("CommandMapper plugin is not loaded!");
        }
        loadSocials();
        Log.debug("Socials Plug INIT OK");
    }

    protected void deinit() {
        Log.debug("Socials Plug DEINIT");
        removeCommandMapping();
        Log.debug("Socials Plug DEINIT OK");
    }

    public SocialEntry getSocial(String name) {
        return (SocialEntry) socials.get(name);
    }

    private void loadSocials() throws Exception {
        socials = new HashMap();
        String fileName = Mudlib.CONFIG_DIR + "/socials.cfg";
        BufferedReader reader = new BufferedReader(new FileReader(fileName));
        SocialParser parser = new SocialParser();

        try {
            Collection c = parser.parseSocials(reader);
            Log.debug("Socials parsed OK");
            for (Iterator it = c.iterator(); it.hasNext();) {
                SocialEntry entry = (SocialEntry) it.next();
                commandMapper.registerCommand(entry.tag, "SocialHandler", entry.tag);
                socials.put(entry.tag, entry);
            }
        } finally {
            reader.close();
        }
    }

    private void removeCommandMapping() {
        for (Iterator it = socials.values().iterator(); it.hasNext();) {
            commandMapper.unregisterCommand(((SocialEntry) it.next()).tag);
        }
        socials.clear();
    }

}