Package org.dspace.rdf.conversion

Source Code of org.dspace.rdf.conversion.RDFConverterImpl

/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/

package org.dspace.rdf.conversion;

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import java.sql.SQLException;
import java.util.List;
import java.util.ArrayList;
import org.apache.log4j.Logger;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.DSpaceObject;
import org.dspace.core.Context;
import org.dspace.rdf.RDFConfiguration;
import org.dspace.services.ConfigurationService;
import org.dspace.utils.DSpace;

/**
*
* @author Pascal-Nicolas Becker (dspace -at- pascal -hyphen- becker -dot- de)
*/
public class RDFConverterImpl implements RDFConverter
{
    protected ConfigurationService configurationService;
    protected List<ConverterPlugin> plugins;
    private static final Logger log = Logger.getLogger(RDFConverterImpl.class);
   
    public RDFConverterImpl()
    {
        this.configurationService = new DSpace().getConfigurationService();
        this.plugins = new ArrayList<ConverterPlugin>();
       
        String pluginNames[] = RDFConfiguration.getConverterPlugins();
       
        if (pluginNames == null || pluginNames.length == 0)
        {
            log.error("Cannot load RDF converter plugins!");
            throw new RuntimeException("Cannot load rdf converter plugins!");
        }
       
        for (String plugin : pluginNames)
        {
            try
            {
                Class pluginClass = Class.forName(plugin);
                ConverterPlugin pluginInstance =
                        (ConverterPlugin) pluginClass.newInstance();
                pluginInstance.setConfigurationService(this.configurationService);
                this.plugins.add(pluginInstance);
            }
            catch (ClassNotFoundException ex)
            {
                log.warn("Cannot load plugin '" + plugin
                        + "': class not found!", ex);
                // if we would ignore a plugin, we would generate incomplete RDF data.
                throw new RuntimeException(ex.getMessage(), ex);
            }
            catch (IllegalAccessException ex)
            {
                log.warn("Cannot load plugin '" + plugin
                        + "': illegal access!", ex);
                // if we would ignore a plugin, we would generate incomplete RDF data.
                throw new RuntimeException(ex.getMessage(), ex);
            }
            catch (InstantiationException ex)
            {
                log.warn("Cannot load plugin '" + plugin
                        + "': cannot instantiate the module!", ex);
                // if we would ignore a plugin, we would generate incomplete RDF data.
                throw new RuntimeException(ex.getMessage(), ex);
            }
            log.debug("Successfully loaded RDFConverterPlugin "
                    + plugin + ".");
        }
    }
   
    public List<ConverterPlugin> getConverterPlugins()
    {
        return this.plugins;
    }
   
    @Override
    public Model convert(Context context, DSpaceObject dso)
            throws SQLException, AuthorizeException
    {
        if (this.plugins.isEmpty())
        {
            log.warn("No RDFConverterPlugins were loaded, cannot convert any data!");
            return null;
        }
        Model model = ModelFactory.createDefaultModel();
       
        for (ConverterPlugin plugin : this.plugins)
        {
            if (plugin.supports(dso.getType()))
            {
                Model convertedData = plugin.convert(context, dso);
                if (convertedData != null)
                {
                    model.setNsPrefixes(convertedData);
                    model.add(convertedData);
                    convertedData.close();
                }
            }
        }
       
        if (model.isEmpty())
        {
            model.close();
            return null;
        } else {
            return model;
        }
    }
}
TOP

Related Classes of org.dspace.rdf.conversion.RDFConverterImpl

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.