Package org.exist.performance

Source Code of org.exist.performance.Runner

/*
*  eXist Open Source Native XML Database
*  Copyright (C) 2001-06 The eXist Project
*  http://exist-db.org
*  This program 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
*  of the License, or (at your option) any later version.
*  This program 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 program; if not, write to the Free Software
*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*  $Id$
*/
package org.exist.performance;

import org.exist.EXistException;
import org.exist.Namespaces;
import org.exist.performance.actions.Action;
import org.exist.xmldb.CollectionImpl;
import org.exist.xmldb.DatabaseInstanceManager;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Database;
import org.xmldb.api.base.XMLDBException;

import java.util.HashMap;
import java.util.Map;

public class Runner {

    private Map<String, Connection> connections = new HashMap<String, Connection>();
    private Connection firstConnection = null;
   
    private Map<String, Class<Action>> classes = new HashMap<String, Class<Action>>();

    private Map<String, Group> groups = new HashMap<String, Group>();

    private TestResultWriter resultWriter;

    private int nextId = 0;

    @SuppressWarnings("unchecked")
  public Runner(Element root, TestResultWriter reporter) throws EXistException, XMLDBException {
        this.resultWriter = reporter;
        initDb();

        NodeList nl = root.getElementsByTagNameNS(Namespaces.EXIST_NS, "configuration");
        if (nl.getLength() == 0)
            throw new EXistException("no configuration element found");
        if (nl.getLength() > 1)
            throw new EXistException("found more than one configuration element");
        Element config = (Element) nl.item(0);

        nl = config.getElementsByTagNameNS(Namespaces.EXIST_NS, "action");
        for (int i = 0; i < nl.getLength(); i++) {
            Element elem = (Element) nl.item(i);
            try {
                Class<Action> clazz = (Class<Action>) Class.forName(elem.getAttribute("class"));
                classes.put(elem.getAttribute("name"), clazz);
            } catch (ClassNotFoundException e) {
                throw new EXistException("Class not found: " + elem.getAttribute("class"));
            }
        }

        nl = config.getElementsByTagNameNS(Namespaces.EXIST_NS, "connection");
        for (int i = 0; i < nl.getLength(); i++) {
            Element elem = (Element) nl.item(i);
            Connection con = new Connection(elem);
            connections.put(con.getId(), con);
            if (firstConnection == null)
                firstConnection = con;
        }

        nl = root.getElementsByTagNameNS(Namespaces.EXIST_NS, "group");
        for (int i = 0; i < nl.getLength(); i++) {
            Element elem = (Element) nl.item(i);
            Group group = new Group(this, elem);
            groups.put(group.getName(), group);
        }
    }

    public void run(String groupToRun) throws XMLDBException, EXistException {
        if (groupToRun == null) {
            for (Group group : groups.values()) {
                group.run();
            }
        } else {
            Group group = groups.get(groupToRun);
            if (group == null)
                throw new EXistException("Test group not found: " + groupToRun);
            group.run();
        }
    }

    public Connection getConnection(String connection) {
        return connections.get(connection);
    }

    public Connection getConnection() {
        return firstConnection;
    }
   
    public Class<Action> getClassForAction(String action) {
        return classes.get(action);
    }

    public TestResultWriter getResults() {
        return resultWriter;
    }

    public int getNextId() {
        return ++nextId;
    }

    public void shutdown() {
        if (resultWriter != null)
            resultWriter.close();
        try {
            shutdownDb();
        } catch (XMLDBException e) {
            e.printStackTrace();
        }
    }

    private void initDb() throws EXistException {
        try {
            Class<?> clazz = Class.forName("org.exist.xmldb.DatabaseImpl");
            Database database = (Database)clazz.newInstance();
            database.setProperty("create-database", "true");
            DatabaseManager.registerDatabase(database);
        } catch (Exception e) {
            throw new EXistException(e.getMessage(), e);
        }
    }

    private void shutdownDb() throws XMLDBException {
        for (Connection connection : connections.values()) {
            CollectionImpl collection = (CollectionImpl) connection.getCollection("/db");
            if (!collection.isRemoteCollection()) {
                DatabaseInstanceManager mgr = (DatabaseInstanceManager)
                        collection.getService("DatabaseInstanceManager", "1.0");
                mgr.shutdown();
            }
        }
    }
}
TOP

Related Classes of org.exist.performance.Runner

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.