Package org.jnode.test.support

Source Code of org.jnode.test.support.ContextManager

/*
* $Id$
*
* Copyright (C) 2003-2014 JNode.org
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; If not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jnode.test.support;

import java.net.URL;
import javax.naming.NameAlreadyBoundException;
import javax.naming.NamingException;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.jmock.MockObjectTestCase;
import org.jnode.driver.DeviceManager;
import org.jnode.driver.block.floppy.support.FloppyDeviceFactory;
import org.jnode.driver.bus.ide.IDEDeviceFactory;
import org.jnode.naming.InitialNaming;
import org.jnode.naming.NameSpace;
import org.jnode.plugin.PluginException;
import org.jnode.test.fs.driver.factories.MockFloppyDeviceFactory;
import org.jnode.test.fs.driver.factories.MockIDEDeviceFactory;
import org.jnode.test.fs.driver.stubs.StubDeviceManager;
import org.jnode.test.fs.filesystem.config.OsType;
import org.jnode.emu.naming.BasicNameSpace;


public class ContextManager {
    private static final Logger log = Logger.getLogger(ContextManager.class);
    private static ContextManager instance;

    private boolean initialized = false;
    private Context context;

    public static ContextManager getInstance() {
        if (instance == null) {
            instance = new ContextManager();
        }

        return instance;
    }

    public void init() {
        if (!initialized) {
            try {
                initLog4j();
                initNaming();
            } catch (PluginException e) {
                log.fatal("error in initNaming", e);
            }

            initialized = true;
        }
    }

    protected void initLog4j() {
        if (OsType.OTHER_OS.isCurrentOS()) {
            // configure Log4j only if outside of JNode
            // (because JNode has its own config for Log4j)

            // name must be of max 8 characters !!!
            // but extension can be larger that 3 characters !!!!!
            // (probably only under windows)
            String configLog4j = "log4jCfg.properties";

            URL url = ContextManager.class.getResource(configLog4j);
            if (url == null) {
                System.err.println("can't find resource " + configLog4j);
            } else {
                PropertyConfigurator.configure(url);
            }
        }
    }

    protected void initNaming() throws PluginException {
        if (OsType.OTHER_OS.isCurrentOS()) {
            NameSpace namespace = new BasicNameSpace();
            InitialNaming.setNameSpace(namespace);
            populateNameSpace(namespace);

            //StubDeviceManager.INSTANCE.start();
        }
    }

    protected void populateNameSpace(NameSpace namespace) {
        try {
            namespace.bind(FloppyDeviceFactory.NAME, new MockFloppyDeviceFactory());
            namespace.bind(IDEDeviceFactory.NAME, new MockIDEDeviceFactory());
            namespace.bind(DeviceManager.NAME, StubDeviceManager.INSTANCE);

//            CMOSService cmos = new CMOSService()
//            {
//                public int getRegister(int regnr)
//                {
//                    switch(regnr)
//                    {
//                    case CMOSConstants.CMOS_FLOPPY_DRIVES: return 0x11;
//                    default: return 0;
//                    }
//                }
//               
//            };
//            namespace.bind(CMOSService.NAME, cmos);                       
        } catch (NameAlreadyBoundException e) {
            log.fatal("can't register stub services", e);
        } catch (NamingException e) {
            log.fatal("can't register stub services", e);
        }
    }

    private ContextManager() {
        initLog4j();
    }

    public Context getContext() {
        log.debug("getContext: " + context);
        return context;
    }

    public void setContext(Class<?> contextClass, TestConfig config, MockObjectTestCase testCase) throws Exception {
        // first remove previous context
        clearContext();

        // create a new context from the test config
        context = (Context) contextClass.newInstance();
        context.init(config, testCase);
        log.debug("setContext: " + context);
    }

    public void clearContext() throws Exception {
        if (context != null) {
            context.destroy();
            context = null;
            log.debug("clearContext");
        }
    }
}
TOP

Related Classes of org.jnode.test.support.ContextManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.