package org.weso.wesearch.steps;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.lang.reflect.Field;
import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
import org.jbehave.core.steps.Steps;
import org.weso.utils.OntoModelException;
import org.weso.utils.QueryBuilderException;
import org.weso.utils.WesearchException;
import org.weso.wesearch.Wesearch;
import org.weso.wesearch.domain.Matter;
import org.weso.wesearch.domain.Property;
import org.weso.wesearch.domain.Query;
import org.weso.wesearch.domain.SPARQLQueryBuilder;
import org.weso.wesearch.domain.ValueSelector;
import org.weso.wesearch.domain.impl.JenaPropertyImpl;
import org.weso.wesearch.domain.impl.MatterImpl;
import org.weso.wesearch.domain.impl.SPARQLQuery;
import org.weso.wesearch.domain.impl.ValueSelectorImpl;
import org.weso.wesearch.domain.impl.values.StringValue;
import org.weso.wesearch.factories.WesearchFactory;
import org.weso.wesearch.factories.impl.JenaWesearchFactory;
import org.weso.wesearch.model.OntoModelWrapper;
import org.weso.wesearch.model.impl.FileOntologyLoader;
import org.weso.wesearch.model.impl.JenaOntoModelWrapper;
public class CombineQuery extends Steps {
private Matter matter;
private Property property;
private ValueSelector selector;
private Query query;
private Wesearch wesearch;
private Query resultQuery;
@Given("a matter $m, property $p, value selector $selector, value $value " +
"and clauses query $clause1 and $clause2")
public void loadQueryAndParameters(String m, String p, String selector,
String value,
String clause1, String clause2) throws
IOException, WesearchException, OntoModelException,
QueryBuilderException,
NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
Field nextVar = SPARQLQuery.class.getDeclaredField("nextVar");
nextVar.setAccessible(true);
Matter aux = new MatterImpl("",
"http://datos.bcn.cl/ontologies/bcn-biographies#Ministro",
"");
String[] ontologies = {"src/test/resources/ontoTest2.owl"};
WesearchFactory factory = new JenaWesearchFactory();
OntoModelWrapper modelWrapper = new JenaOntoModelWrapper(
new FileOntologyLoader(ontologies));
wesearch = factory.createWesearch(modelWrapper);
matter = new MatterImpl("País", m, "Define un país");
property = new JenaPropertyImpl(p, "Nombre",
"Define el nombre de un país");
this.selector = new ValueSelectorImpl(selector);
this.selector.setValue(new StringValue(value));
query = new SPARQLQuery();
query.addClause(clause1);
query.addClause(clause2);
query.addFilters("a", SPARQLQueryBuilder.getClassFilter("a", aux,
modelWrapper));
query.addFilter("b", null);
nextVar.setInt(query, 1);
}
@When("I ask for a combined query")
public void askForCombinedQuery() throws WesearchException {
resultQuery = wesearch.combineQuery(query, matter, property, selector);
assertNotNull(resultQuery);
}
@Then("I get combined query $query")
public void getCombinedQuery(String query) {
assertEquals(query, resultQuery.obtainQuery());
}
}