/*
* Copyright (c) 2010 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.rdfbean.object;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Locale;
import java.util.Set;
import org.junit.Test;
import com.mysema.query.types.path.PathBuilder;
import com.mysema.query.types.path.PathBuilderFactory;
import com.mysema.rdfbean.TEST;
import com.mysema.rdfbean.annotations.ContainerType;
import com.mysema.rdfbean.model.MiniRepository;
import com.mysema.rdfbean.model.RDFS;
import com.mysema.rdfbean.model.UID;
public class ConfigurationBuilderTest {
public static class Person {
Labeled labeled;
String id;
String firstName, lastName;
Person superior;
Department department;
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
public static class Department {
String id;
String name;
Company company;
}
public static class Company {
String id;
String name;
Set<Department> departments;
}
public static class Labeled {
String label;
String comment;
}
@Test
public void UID_availability() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addClass(Person.class);
builder.addClass(Department.class);
builder.addClass(Company.class);
builder.addClass(Labeled.class);
Configuration configuration = builder.build();
for (MappedClass mc : configuration.getMappedClasses()) {
assertNotNull(mc.getUID());
}
}
@Test
public void Path() {
// TODO
}
@Test
public void Mixin() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addClass(TEST.NS, Person.class)
.addMixin("labeled");
Configuration configuration = builder.build();
// labeled
MappedClass person = configuration.getMappedClass(Person.class);
MappedPath person_labeled = person.getMappedPath("labeled");
assertTrue(person_labeled.getMappedProperty().isMixin());
}
@Test
public void Without_namespace() {
ConfigurationBuilder builder = new ConfigurationBuilder();
for (Class<?> cl : Arrays.<Class<?>> asList(Person.class, Department.class, Company.class, Labeled.class)) {
builder.addClass(cl).addProperties();
}
Configuration configuration = builder.build();
MappedClass person = configuration.getMappedClass(Person.class);
String ns = "java:com.mysema.rdfbean.object.ConfigurationBuilderTest.Person#";
assertEquals(new UID(ns, "Person"), person.getUID());
assertEquals(new UID(ns, "labeled"), person.getMappedPath("labeled").getPredicatePath().get(0).getUID());
}
@Test
public void Container() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addClass(TEST.NS, Company.class)
.addId("id")
.addProperty("departments", new UID(TEST.NS, "company"), ContainerType.SEQ)
.addProperties();
Configuration configuration = builder.build();
// company
MappedClass company = configuration.getMappedClass(Company.class);
MappedPath company_departments = company.getMappedPath("departments");
assertEquals(TEST.NS, company_departments.getPredicatePath().get(0).getUID().ns());
assertEquals("company", company_departments.getPredicatePath().get(0).getUID().ln());
assertEquals(ContainerType.SEQ, company_departments.getMappedProperty().getContainerType());
}
@Test
public void Localized() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addClass(TEST.NS, Labeled.class)
.addLocalized("label", RDFS.label)
.addProperty("comment", RDFS.comment);
Configuration configuration = builder.build();
// labeled
MappedClass labeled = configuration.getMappedClass(Labeled.class);
MappedPath labeled_label = labeled.getMappedPath("label");
assertTrue(labeled_label.getMappedProperty().isLocalized());
assertEquals(RDFS.label, labeled_label.getPredicatePath().get(0).getUID());
MappedPath labeled_comment = labeled.getMappedPath("comment");
assertFalse(labeled_comment.getMappedProperty().isLocalized());
assertEquals(RDFS.comment, labeled_comment.getPredicatePath().get(0).getUID());
}
@Test
public void Namespaces() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addClass(TEST.NS, Labeled.class)
.addProperty("label", RDFS.label)
.addProperty("comment", RDFS.comment);
Configuration configuration = builder.build();
// labeled
MappedClass labeled = configuration.getMappedClass(Labeled.class);
MappedPath labeled_label = labeled.getMappedPath("label");
assertEquals(RDFS.label, labeled_label.getPredicatePath().get(0).getUID());
MappedPath labeled_comment = labeled.getMappedPath("comment");
assertEquals(RDFS.comment, labeled_comment.getPredicatePath().get(0).getUID());
}
@Test
public void Inverse() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addClass(TEST.NS, Company.class)
.addId("id")
.addProperty("departments", new UID(TEST.NS, "company"), true)
.addProperties();
Configuration configuration = builder.build();
// company
MappedClass company = configuration.getMappedClass(Company.class);
MappedPath company_departments = company.getMappedPath("departments");
assertEquals(TEST.NS, company_departments.getPredicatePath().get(0).getUID().ns());
assertEquals("company", company_departments.getPredicatePath().get(0).getUID().ln());
assertTrue(company_departments.getPredicatePath().get(0).inv());
}
@Test
public void AddProperty() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addClass(TEST.NS, Person.class)
.addId("id")
.addProperty("firstName")
.addProperty("lastName", new UID(TEST.NS, "surName"))
.addProperty("superior")
.addProperty("department");
Configuration configuration = builder.build();
// person
MappedClass person = configuration.getMappedClass(Person.class);
MappedPath person_id = person.getMappedPath("id");
assertTrue(person_id.getPredicatePath().isEmpty());
MappedPath person_firstName = person.getMappedPath("firstName");
assertEquals(TEST.NS, person_firstName.getPredicatePath().get(0).getUID().ns());
assertEquals("firstName", person_firstName.getPredicatePath().get(0).getUID().ln());
MappedPath person_lastName = person.getMappedPath("lastName");
assertEquals("surName", person_lastName.getPredicatePath().get(0).getUID().ln());
MappedPath person_superior = person.getMappedPath("superior");
assertEquals("superior", person_superior.getPredicatePath().get(0).getUID().ln());
MappedPath person_department = person.getMappedPath("department");
assertEquals("department", person_department.getPredicatePath().get(0).getUID().ln());
}
@Test
public void AddProperties() {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addClass(TEST.NS, Person.class).addId("id").addProperties();
builder.addClass(new UID(TEST.NS, "Dept"), Department.class).addId("id").addProperties();
builder.addClass(TEST.NS, Company.class).addId("id").addProperties();
Configuration configuration = builder.build();
// person
MappedClass person = configuration.getMappedClass(Person.class);
MappedPath person_id = person.getMappedPath("id");
assertTrue(person_id.getPredicatePath().isEmpty());
MappedPath person_firstName = person.getMappedPath("firstName");
assertEquals("firstName", person_firstName.getPredicatePath().get(0).getUID().ln());
MappedPath person_lastName = person.getMappedPath("lastName");
assertEquals("lastName", person_lastName.getPredicatePath().get(0).getUID().ln());
MappedPath person_superior = person.getMappedPath("superior");
assertEquals("superior", person_superior.getPredicatePath().get(0).getUID().ln());
MappedPath person_department = person.getMappedPath("department");
assertEquals("department", person_department.getPredicatePath().get(0).getUID().ln());
// department
MappedClass department = configuration.getMappedClass(Department.class);
MappedPath department_id = department.getMappedPath("id");
assertTrue(department_id.getPredicatePath().isEmpty());
MappedPath department_name = department.getMappedPath("name");
assertEquals("name", department_name.getPredicatePath().get(0).getUID().ln());
MappedPath department_company = department.getMappedPath("company");
assertEquals("company", department_company.getPredicatePath().get(0).getUID().ln());
// company
MappedClass company = configuration.getMappedClass(Company.class);
MappedPath company_id = company.getMappedPath("id");
assertTrue(company_id.getPredicatePath().isEmpty());
MappedPath company_name = company.getMappedPath("name");
assertEquals("name", company_name.getPredicatePath().get(0).getUID().ln());
}
@Test
public void Query() throws IOException {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addClass(TEST.NS, Person.class).addId("id").addProperties();
builder.addClass(new UID(TEST.NS, "Dept"), Department.class).addId("id").addProperties();
builder.addClass(TEST.NS, Company.class).addId("id").addProperties();
Configuration configuration = builder.build();
Session session = SessionUtil.openSession(new MiniRepository(), Collections.<Locale> emptySet(), configuration);
Person person = new Person();
person.firstName = "Bob";
person.lastName = "Smith";
session.save(person);
session.clear();
// getById
Person other = session.getById(person.id, Person.class);
assertNotNull(other.id);
assertEquals(person.firstName, other.firstName);
assertEquals(person.lastName, other.lastName);
// query
PathBuilder<Person> personPath = new PathBuilderFactory().create(Person.class);
assertEquals(other, session.from(personPath).where(personPath.getString("firstName").eq("Bob")).uniqueResult(personPath));
assertEquals(other, session.from(personPath).where(personPath.getString("lastName").eq("Smith")).uniqueResult(personPath));
// list
assertEquals(1, session.from(personPath).list(personPath).size());
// findInstances
assertEquals(1, session.findInstances(Person.class).size());
session.close();
}
}