/
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;


import net.sourceforge.pain.*;
import net.sourceforge.pain.data.*;
import net.sourceforge.pain.db.*;
import net.sourceforge.pain.tinylib.data.*;
import net.sourceforge.pain.util.*;

import java.io.*;


public class TinyLibInitializer implements MudlibInitializer {
    String configDir;
    File plugins_config;

    public void readSetting(PropertiesReader props) {
        configDir = props.get("tinylib.etc_dir");
        final String plugFile = configDir + "/plugins.cfg";
        plugins_config = new File(plugFile);
        if (!plugins_config.exists() || plugins_config.isDirectory() || !plugins_config.canRead()) {
            throw new RuntimeException("plugins startup file not found:" + plugFile);
        }

    }

    public void init() throws Exception {
        Mudlib.CONFIG_DIR = configDir;
        loadWorld();
        checkSafeShutdown();
        Codebase.getPluginManager().loadPluginsFromFile(plugins_config);
    }


    private static void loadWorld() throws Exception {
        PainDB db = Codebase.getDB();
        CodebaseData data = Codebase.getCodebaseData();
        Log.info("loading World");
        World world = (World) data.getMudLibRoot();
        if (world == null) {
            Log.debug("Non inited database detected!, creating world!");
            world = new World(db);
            data.setMudLibRoot(world);
            Mudlib.setWorld(world);
            Codebase.processEvent("deploy.CreateInitialWorldEvent", null);
            Log.debug("World Created!");
        } else {
            Log.info("World instance found");
            Mudlib.setWorld(world);
        }


        Log.info("flushing all startup fixes");
        db.flush();
        Log.info("Flushed OK!");
    }


    private static void checkSafeShutdown() throws Exception {
        Codebase.processEvent("CheckSafeShutdown", null);
    }
}