Package org.fcrepo.server.utilities.rebuild

Source Code of org.fcrepo.server.utilities.rebuild.RebuildServer

/* The contents of this file are subject to the license and copyright terms
* detailed in the license directory at the root of the source tree (also
* available online at http://fedora-commons.org/license/).
*/
package org.fcrepo.server.utilities.rebuild;

import java.io.File;
import java.io.IOException;

import java.text.MessageFormat;

import org.trippi.TriplestoreConnector;

import org.w3c.dom.Element;

import org.fcrepo.server.Server;
import org.fcrepo.server.config.DatastoreConfiguration;
import org.fcrepo.server.config.ModuleConfiguration;
import org.fcrepo.server.config.ServerConfiguration;
import org.fcrepo.server.errors.ModuleInitializationException;
import org.fcrepo.server.errors.ServerInitializationException;
import org.fcrepo.server.resourceIndex.ResourceIndex;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.GenericBeanDefinition;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.annotation.ScannedGenericBeanDefinition;
import org.springframework.core.io.FileSystemResource;

import org.fcrepo.common.Constants;


/**
* @author Robert Haschart
*/
public class RebuildServer
        extends Server {

    /**
     * Default Rebuilders that the rebuild utility knows about.
     */
    public static String[] REBUILDERS =
        new String[] {"org.fcrepo.server.resourceIndex.ResourceIndexRebuilder",
    "org.fcrepo.server.utilities.rebuild.SQLRebuilder"};

    /**
     * @param rootConfigElement
     * @param homeDir
     * @throws ServerInitializationException
     * @throws ModuleInitializationException
     */
    public RebuildServer(Element rootConfigElement, File homeDir)
            throws ServerInitializationException, ModuleInitializationException {
        super(rootConfigElement, homeDir);
    }

    protected RebuildServer(File homeDir)
    throws ServerInitializationException, ModuleInitializationException {
        super(homeDir);
    }

    @Override
    protected void registerBeanDefinitions()
            throws ServerInitializationException{
        ServerConfiguration sc = getConfig();
        ModuleConfiguration rim = sc.getModuleConfiguration(ResourceIndex.class.getName());
        if (rim != null){
            String ds = rim.getParameter("datastore");
            if (ds != null){
                DatastoreConfiguration dsConfig = sc.getDatastoreConfiguration(ds);
                if (dsConfig != null){
                    try{
                        String name = TriplestoreConnector.class.getName();
                        GenericBeanDefinition beanDefinition = Server.getTriplestoreConnectorBeanDefinition(dsConfig);
                        beanDefinition.setAttribute("name", name);
                        beanDefinition.setAttribute("id", name);
                        registerBeanDefinition(name, beanDefinition);
                    }
                    catch (IOException e){
                        throw new ServerInitializationException(e.toString(),e);
                    }
                }
            }
        }
        for (String rebuilder:REBUILDERS){
            try{
                ScannedGenericBeanDefinition beanDefinition = Server.getScannedBeanDefinition(rebuilder);
                beanDefinition.setAutowireCandidate(true);
                beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_NAME);
                beanDefinition.setAttribute("id", rebuilder);
                beanDefinition.setAttribute("name", rebuilder);
                beanDefinition.setInitMethodName("init");
                beanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);
                beanDefinition.setDependencyCheck(AbstractBeanDefinition.DEPENDENCY_CHECK_NONE);
                registerBeanDefinition(rebuilder, beanDefinition);
            }
            catch (IOException e){
                throw new ServerInitializationException(e.toString(),e);
            }
        }
        File fedoraHome = new File(Constants.FEDORA_HOME);
        File springWeb = new File(fedoraHome, "server/config/spring/web");
        String policyIndexName = System.getProperty("FEDORA_POLICY_INDEX_CONFIG");
        File policyIndex;
        if (policyIndexName == null) {
            policyIndex = new File(springWeb,"config-policy-index.xml");
        } else {
            policyIndex = new File(policyIndexName);
            if (!policyIndex.getAbsolutePath().equals(policyIndexName)){
                policyIndex = new File(springWeb,policyIndexName);
            }
        }
        if (policyIndex.exists()){
            XmlBeanDefinitionReader beanReader = new XmlBeanDefinitionReader(this);
            FileSystemResource beanConfig = new FileSystemResource(policyIndex);
            beanReader.loadBeanDefinitions(beanConfig);
        }
    }

    @Override
    protected boolean overrideModuleRole(String moduleRole) {
        if ("org.fcrepo.server.security.Authorization".equals(moduleRole)
                || "org.fcrepo.server.access.Access".equals(moduleRole)
                || "org.fcrepo.server.access.DynamicAccess".equals(moduleRole)
                || "org.fcrepo.oai.OAIProvider".equals(moduleRole)
                || "org.fcrepo.oai.OAIProvider".equals(moduleRole)
                || "org.fcrepo.server.management.Management".equals(moduleRole)
                || "org.fcrepo.server.management.ManagementDelegate".equals(moduleRole)
                || "org.fcrepo.server.resourceIndex.ResourceIndex".equals(moduleRole)) {
            return true;
        }
        return false;
    }

    @Override
    protected String overrideModuleClass(String moduleClass) {
        if (moduleClass != null && moduleClass.endsWith("DOManager")) {
            return "org.fcrepo.server.utilities.rebuild.RebuildDOManager";
        }
        return null;
    }

    /**
     * Provides an instance of the server specified in the configuration file at
     * homeDir/CONFIG_DIR/CONFIG_FILE, or DEFAULT_SERVER_CLASS if unspecified.
     *
     * @param homeDir
     *        The base directory for the server.
     * @return The instance.
     * @throws ServerInitializationException
     *         If there was an error starting the server.
     * @throws ModuleInitializationException
     *         If there was an error starting a module.
     */
    public final static Server getRebuildInstance(File homeDir)
            throws ServerInitializationException, ModuleInitializationException {
        // instantiate a new special purpose server for rebuilding
        // SQL databases given the class provided in the root element
        // in the config file and return it

            String className = "org.fcrepo.server.utilities.rebuild.RebuildServer";
            try {
                Server inst = new RebuildServer(homeDir);
                s_instances.put(homeDir, inst);
                inst.init();
                return inst;
            } catch (IllegalArgumentException iae) {
                // improbable
                throw new ServerInitializationException(MessageFormat
                        .format(INIT_SERVER_SEVERE_BADARGS,
                                new Object[] {className}));
            }
    }

}
TOP

Related Classes of org.fcrepo.server.utilities.rebuild.RebuildServer

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.