/**
* PODD is an OWL ontology database used for scientific project management
*
* Copyright (C) 2009-2013 The University Of Queensland
*
* This program is free software: you can redistribute it and/or modify it under the terms of the
* GNU Affero General Public License as published by the Free Software Foundation, either version 3
* 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
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License along with this program.
* If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.podd.utils;
import org.openrdf.model.URI;
import com.github.podd.api.PoddRdfProcessor;
import com.github.podd.api.PoddRdfProcessorFactory;
/**
* Utility class containing helper methods for handling RDF content.
*
* @author kutila
*
*/
public class PoddRdfProcessorUtils
{
/**
* Builds a SPARQL "construct" query using the given <code>PoddRdfProcessorFactory</code>.
*
* @param rdfProcessorFactory
* The Factory from which SPARQL query parts are obtained
* @return A SPARQL query String
*/
public static String buildSparqlConstructQuery(
final PoddRdfProcessorFactory<? extends PoddRdfProcessor> rdfProcessorFactory)
{
return PoddRdfProcessorUtils.buildSparqlConstructQuery(rdfProcessorFactory, null);
}
/**
* Builds a SPARQL "construct" query using the given <code>PoddRdfProcessorFactory</code> and
* Subject URI.
*
* @param rdfProcessorFactory
* The Factory from which SPARQL query parts are obtained
* @param subject
* A URI of interest that should be used to build the SPARQL query
* @return A SPARQL query String
*/
public static String buildSparqlConstructQuery(
final PoddRdfProcessorFactory<? extends PoddRdfProcessor> rdfProcessorFactory, final URI subject)
{
final StringBuilder sparqlBuilder = new StringBuilder();
sparqlBuilder.append("CONSTRUCT { ");
sparqlBuilder.append(rdfProcessorFactory.getSPARQLConstructBGP());
sparqlBuilder.append(" } WHERE { ");
sparqlBuilder.append(rdfProcessorFactory.getSPARQLConstructWhere());
sparqlBuilder.append(" }");
if(subject != null)
{
sparqlBuilder.append(" VALUES (?");
sparqlBuilder.append(rdfProcessorFactory.getSPARQLVariable());
sparqlBuilder.append(") { (<");
sparqlBuilder.append(subject.stringValue());
sparqlBuilder.append("> ) }");
}
if(!rdfProcessorFactory.getSPARQLGroupBy().isEmpty())
{
sparqlBuilder.append(" GROUP BY ");
sparqlBuilder.append(rdfProcessorFactory.getSPARQLGroupBy());
}
return sparqlBuilder.toString();
}
}