Package de.fuberlin.wiwiss.d2rq.map

Source Code of de.fuberlin.wiwiss.d2rq.map.CompileTest

package de.fuberlin.wiwiss.d2rq.map;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import junit.framework.TestCase;

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.vocabulary.RDF;

import de.fuberlin.wiwiss.d2rq.algebra.AliasMap;
import de.fuberlin.wiwiss.d2rq.algebra.AliasMap.Alias;
import de.fuberlin.wiwiss.d2rq.algebra.Join;
import de.fuberlin.wiwiss.d2rq.algebra.TripleRelation;
import de.fuberlin.wiwiss.d2rq.sql.DummyDB;
import de.fuberlin.wiwiss.d2rq.sql.SQL;

public class CompileTest extends TestCase {
  private Model model;
  private Mapping mapping;
  private Database database;
  private ClassMap employees;
  private PropertyBridge managerBridge;
  private ClassMap cities;
  private PropertyBridge citiesTypeBridge;
  private PropertyBridge citiesNameBridge;
  private ClassMap countries;
  private PropertyBridge countriesTypeBridge;
 
  public void setUp() {
    this.model = ModelFactory.createDefaultModel();
    this.mapping = new Mapping();
    this.database = new Database(this.model.createResource());
    database.useConnectedDB(new DummyDB());
    this.mapping.addDatabase(this.database);

    employees = createClassMap("http://test/employee@@e.ID@@");
    employees.addAlias("employees AS e");
    employees.addJoin("e.ID = foo.bar");
    employees.addCondition("e.status = 'active'");
    managerBridge = createPropertyBridge(employees, "http://terms.example.org/manager");
    managerBridge.addAlias("e AS m");
    managerBridge.setRefersToClassMap(this.employees);
    managerBridge.addJoin("e.manager = m.ID");
   
    cities = createClassMap("http://test/city@@c.ID@@");
    citiesTypeBridge = createPropertyBridge(cities, RDF.type.getURI());
    citiesTypeBridge.setConstantValue(model.createResource("http://terms.example.org/City"));
    citiesNameBridge = createPropertyBridge(cities, "http://terms.example.org/name");
    citiesNameBridge.setColumn("c.name");
    countries = createClassMap("http://test/countries/@@c.country@@");
    countries.setContainsDuplicates(true);
    countriesTypeBridge = createPropertyBridge(countries, RDF.type.getURI());
    countriesTypeBridge.setConstantValue(model.createResource("http://terms.example.org/Country"));
  }

  private ClassMap createClassMap(String uriPattern) {
    ClassMap result = new ClassMap(this.model.createResource());
    result.setDatabase(this.database);
    result.setURIPattern(uriPattern);
    this.mapping.addClassMap(result);
    return result;
  }

  private PropertyBridge createPropertyBridge(ClassMap classMap, String propertyURI) {
    PropertyBridge result = new PropertyBridge(this.model.createResource());
    result.setBelongsToClassMap(classMap);
    result.addProperty(this.model.createProperty(propertyURI));
    classMap.addPropertyBridge(result);
    return result;
  }
 
  public void testAttributesInRefersToClassMapAreRenamed() {
    TripleRelation relation = (TripleRelation) this.managerBridge.toTripleRelations().iterator().next();
    assertEquals("URI(Pattern(http://test/employee@@e.ID@@))",
        relation.nodeMaker(TripleRelation.SUBJECT).toString());
    assertEquals("URI(Pattern(http://test/employee@@m.ID@@))",
        relation.nodeMaker(TripleRelation.OBJECT).toString());
  }
 
  public void testJoinConditionsInRefersToClassMapAreRenamed() {
    TripleRelation relation = (TripleRelation) this.managerBridge.toTripleRelations().iterator().next();
    Set<String> joinsToString = new HashSet<String>();
    for (Join join: relation.baseRelation().joinConditions()) {
      joinsToString.add(join.toString());
    }
    assertEquals(new HashSet<String>(Arrays.asList(new String[]{
        "Join(e.manager <=> m.ID)",
        "Join(m.ID <=> foo.bar)",
        "Join(e.ID <=> foo.bar)"})),
        joinsToString);
  }
 
  public void testConditionInRefersToClassMapIsRenamed() {
    TripleRelation relation = (TripleRelation) this.managerBridge.toTripleRelations().iterator().next();
    assertEquals("Conjunction(SQL(e.status = 'active'), SQL(m.status = 'active'))",
        relation.baseRelation().condition().toString());
  }

  public void testAliasesInRefersToClassMapAreRenamed() {
    TripleRelation relation = (TripleRelation) this.managerBridge.toTripleRelations().iterator().next();
    assertEquals(
        new AliasMap(Arrays.asList(new Alias[]{
            SQL.parseAlias("employees AS e"),
            SQL.parseAlias("employees AS m")})),
        relation.baseRelation().aliases());
  }
 
  public void testSimpleTypeBridgeContainsNoDuplicates() {
    assertTrue(this.citiesTypeBridge.buildRelation().isUnique());
  }
 
  public void testSimpleColumnBridgeContainsNoDuplicates() {
    assertTrue(this.citiesNameBridge.buildRelation().isUnique());
  }
 
  public void testBridgeWithDuplicateClassMapContainsDuplicates() {
    assertFalse(this.countriesTypeBridge.buildRelation().isUnique());
  }
}
TOP

Related Classes of de.fuberlin.wiwiss.d2rq.map.CompileTest

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.