package com.mysema.rdfbean.jena;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import org.junit.Test;
import com.mysema.commons.lang.IteratorAdapter;
import com.mysema.rdfbean.TEST;
import com.mysema.rdfbean.model.*;
public class JenaConnectionTest extends AbstractConnectionTest {
private static final UID context = new UID(TEST.NS);
@Test
public void Update_with_nulls() {
connection.update(Collections.<STMT> emptySet(), null);
connection.update(null, Collections.<STMT> emptySet());
connection.update(null, null);
}
@Test
public void Exists() {
UID context = new UID(TEST.NS);
assertFalse(connection.exists(null, null, null, context, false));
connection.update(null, Collections.singleton(new STMT(new BID(), RDF.type, RDFS.Class, context)));
assertTrue(connection.exists(null, null, null, context, false));
}
@Test
public void Exists2() {
ID sub = new UID(TEST.NS, "e" + System.currentTimeMillis());
ID type = new UID(TEST.NS, "TestType" + System.currentTimeMillis());
assertNotExists(sub, null, null, null);
repository.execute(new Addition(new STMT(sub, RDF.type, type)));
assertExists(new STMT(sub, RDF.type, type));
}
@Test
public void FindStatements() {
ID sub = new UID(TEST.NS, UUID.randomUUID().toString());
assertTrue(IteratorAdapter.asList(connection.findStatements(sub, null, null, null, false)).isEmpty());
repository.execute(new Addition(new STMT(sub, RDF.type, RDFS.Class)));
assertFalse(findStatements(sub, null, null, null).isEmpty());
assertFalse(findStatements(sub, RDF.type, null, null).isEmpty());
assertFalse(findStatements(null, RDF.type, RDFS.Class, null).isEmpty());
}
@Test
public void FindStatements_from_Context() {
UID sub = new UID(TEST.NS, UUID.randomUUID().toString());
assertTrue(findStatements(sub, null, null, null).isEmpty());
repository.execute(new Addition(new STMT(sub, RDF.type, RDFS.Class, context)));
assertFalse(findStatements(sub, null, null, null).isEmpty());
assertFalse(findStatements(sub, null, null, context).isEmpty());
assertFalse(findStatements(null, null, null, context).isEmpty());
}
@Test
public void Resources() {
ID sub = new UID(TEST.NS, "e" + System.currentTimeMillis());
List<STMT> stmts = Arrays.asList(new STMT(sub, RDFS.label, sub));
connection.update(null, stmts);
List<STMT> found = findStatements(sub, null, null, null);
assertEquals(new HashSet<STMT>(stmts), new HashSet<STMT>(found));
assertExists(stmts.get(0));
}
@Test
public void Literals() {
ID sub = new UID(TEST.NS, "e" + System.currentTimeMillis());
List<STMT> stmts = Arrays.asList(
new STMT(sub, RDFS.label, new LIT(sub.getId())),
new STMT(sub, RDFS.label, new LIT("X")),
new STMT(sub, RDFS.label, new LIT(sub.getId(), Locale.ENGLISH)),
new STMT(sub, RDFS.label, new LIT("1", XSD.intType))
);
connection.update(null, stmts);
List<STMT> found = findStatements(sub, null, null, null);
assertEquals(new HashSet<STMT>(stmts), new HashSet<STMT>(found));
// find int literal
assertExists(new STMT(sub, RDFS.label, new LIT("1", XSD.intType)));
// find string literal
assertExists(new STMT(sub, RDFS.label, new LIT("X")));
// find string literal
assertExists(new STMT(sub, RDFS.label, new LIT(sub.getId())));
}
@Test
public void BlankNodes() {
ID sub = new BID();
ID obj = new BID();
List<STMT> stmts = Collections.singletonList(new STMT(sub, RDF.type, obj));
connection.update(null, stmts);
List<STMT> found = findStatements(sub, null, null, null);
assertEquals(new HashSet<STMT>(stmts), new HashSet<STMT>(found));
assertExists(stmts.get(0));
}
@Test
public void Remove_subject_and_object_given() {
// FIXME: this is too slow
ID sub = new UID(TEST.NS, "s" + System.currentTimeMillis());
ID obj = new UID(TEST.NS, "o" + System.currentTimeMillis());
STMT stmt = new STMT(sub, RDF.type, obj);
List<STMT> stmts = Collections.singletonList(stmt);
connection.update(null, stmts);
assertExists(stmt.getSubject(), null, null, null);
connection.remove(sub, null, obj, null);
assertNotExists(stmt.getSubject(), null, null, null);
}
@Test
public void Remove_subject_and_literal_object_given() {
ID sub = new UID(TEST.NS, "s" + System.currentTimeMillis());
NODE obj = new LIT(TEST.NS + "o" + System.currentTimeMillis());
STMT stmt = new STMT(sub, RDF.type, obj);
List<STMT> stmts = Collections.singletonList(stmt);
connection.update(null, stmts);
assertExists(stmt.getSubject(), null, null, null);
connection.remove(sub, null, obj, null);
assertNotExists(stmt.getSubject(), null, null, null);
}
@Test
public void Remove_subject_and_predicate_given() {
ID sub = new UID(TEST.NS, "s" + System.currentTimeMillis());
ID obj = new UID(TEST.NS, "o" + System.currentTimeMillis());
List<STMT> stmts = Arrays.asList(
new STMT(sub, RDF.type, obj),
new STMT(sub, RDFS.label, new LIT("X"))
);
connection.update(null, stmts);
assertExists(sub, null, null, null);
connection.remove(sub, RDF.type, null, null);
assertNotExists(sub, RDF.type, null, null);
assertExists(sub, RDFS.label, null, null);
}
@Test
public void Remove_none_given_from_default() {
ID sub = new UID(TEST.NS, "s" + System.currentTimeMillis());
ID obj = new UID(TEST.NS, "o" + System.currentTimeMillis());
STMT stmt = new STMT(sub, RDF.type, obj);
List<STMT> stmts = Collections.singletonList(stmt);
connection.update(null, stmts);
assertExists(stmt.getSubject(), null, null, null);
connection.remove(null, null, null, null);
assertNotExists(stmt.getSubject(), null, null, null);
}
@Test
public void Remove_none_given_from_named() {
ID sub = new UID(TEST.NS, "s" + System.currentTimeMillis());
ID obj = new UID(TEST.NS, "o" + System.currentTimeMillis());
STMT stmt = new STMT(sub, RDF.type, obj, context);
List<STMT> stmts = Collections.singletonList(stmt);
connection.update(null, stmts);
assertExists(stmt.getSubject(), null, null, null);
connection.remove(null, null, null, null);
assertNotExists(stmt.getSubject(), null, null, null);
}
@Test
public void Remove_all_given_from_default() {
ID sub = new UID(TEST.NS, "s" + System.currentTimeMillis());
ID obj = new UID(TEST.NS, "o" + System.currentTimeMillis());
STMT stmt = new STMT(sub, RDF.type, obj);
List<STMT> stmts = Collections.singletonList(stmt);
connection.update(null, stmts);
assertExists(stmt.getSubject(), null, null, null);
connection.remove(stmt.getSubject(), stmt.getPredicate(), stmt.getObject(), stmt.getContext());
assertNotExists(stmt.getSubject(), null, null, null);
}
@Test
public void Remove_all_given_from_named() {
ID sub = new UID(TEST.NS, "s" + System.currentTimeMillis());
ID obj = new UID(TEST.NS, "o" + System.currentTimeMillis());
STMT stmt = new STMT(sub, RDF.type, obj, context);
List<STMT> stmts = Collections.singletonList(stmt);
connection.update(null, stmts);
assertExists(stmt.getSubject(), null, null, null);
connection.remove(stmt.getSubject(), stmt.getPredicate(), stmt.getObject(), stmt.getContext());
assertNotExists(stmt.getSubject(), null, null, null);
}
@Test
public void Remove_subject_given() {
ID sub = new UID(TEST.NS, "s" + System.currentTimeMillis());
ID obj = new UID(TEST.NS, "o" + System.currentTimeMillis());
STMT stmt = new STMT(sub, RDF.type, obj);
List<STMT> stmts = Collections.singletonList(stmt);
connection.update(null, stmts);
assertExists(stmt.getSubject(), null, null, null);
connection.remove(stmt.getSubject(), null, null, null);
assertNotExists(stmt.getSubject(), null, null, null);
}
@Test
public void Remove_Literals_from_named() {
ID sub = new UID(TEST.NS, "el" + System.currentTimeMillis());
List<STMT> stmts = Arrays.asList(
// new STMT(sub, RDFS.label, new LIT(sub.getId(), new
// UID(TEST.NS)), context),
new STMT(sub, RDFS.label, new LIT(sub.getId()), context),
new STMT(sub, RDFS.label, new LIT(sub.getId(), Locale.ENGLISH), context),
new STMT(sub, RDFS.label, new LIT("1", XSD.intType), context),
new STMT(sub, RDFS.label, new LIT("20011010", XSD.date), context)
);
connection.update(null, stmts);
for (STMT stmt : stmts) {
connection.remove(stmt.getSubject(), stmt.getPredicate(), stmt.getObject(), stmt.getContext());
assertFalse(stmt.toString(), connection.exists(stmt.getSubject(), stmt.getPredicate(), stmt.getObject(), stmt.getContext(), false));
}
assertNotExists(sub, null, null, null);
}
@Test
public void Remove_Literals_from_default() {
ID sub = new UID(TEST.NS, "el" + System.currentTimeMillis());
List<STMT> stmts = Arrays.asList(
// new STMT(sub, new UID(TEST.NS), new LIT("x", new
// UID(TEST.NS))),
// new STMT(sub, new UID(TEST.NS), new LIT("1", new
// UID(TEST.NS))),
// new STMT(sub, RDFS.label, new LIT(sub.getId(), new
// UID(TEST.NS))),
new STMT(sub, RDFS.label, new LIT(sub.getId())),
new STMT(sub, RDFS.label, new LIT(sub.getId(), Locale.ENGLISH)),
new STMT(sub, RDFS.label, new LIT("1", XSD.intType)),
new STMT(sub, new UID(TEST.NS), new LIT("1", XSD.intType)),
new STMT(sub, RDFS.label, new LIT("20011010", XSD.date)),
new STMT(sub, new UID(TEST.NS), new LIT("20011010", XSD.date))
);
connection.update(null, stmts);
for (STMT stmt : stmts) {
connection.remove(stmt.getSubject(), stmt.getPredicate(), stmt.getObject(), stmt.getContext());
assertFalse(stmt.toString(), connection.exists(stmt.getSubject(), stmt.getPredicate(), stmt.getObject(), stmt.getContext(), false));
}
for (STMT stmt : findStatements(sub, null, null, null)) {
System.err.println(stmt);
}
assertNotExists(sub, null, null, null);
}
@Test
public void Update() {
ID sub = new UID(TEST.NS, "s" + System.currentTimeMillis());
ID type = new UID(TEST.NS, "TestType" + System.currentTimeMillis());
Collection<STMT> stmts = Collections.singleton(new STMT(sub, RDF.type, type));
// add
connection.update(null, stmts);
assertExists(sub, RDF.type, type, null);
// remove
connection.update(stmts, null);
assertNotExists(sub, RDF.type, type, null);
}
@Test
public void Update_named() {
ID sub = new UID(TEST.NS, "s" + System.currentTimeMillis());
ID type = new UID(TEST.NS, "TestType" + System.currentTimeMillis());
Collection<STMT> stmts = Collections.singleton(new STMT(sub, RDF.type, type, context));
// add
connection.update(null, stmts);
assertExists(sub, RDF.type, type, null);
// remove
connection.update(stmts, null);
assertNotExists(sub, RDF.type, type, null);
}
}