/*******************************************************************************
* Copyright (c) 2007 Cambridge Semantics Incorporated.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* File: $Source$
* Created by: Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com </a>)
* Created on: Sep 6, 2007
* Revision: $Id$
*
* Contributors:
* Cambridge Semantics Incorporated - initial API and implementation
*******************************************************************************/
package org.openanzo.rdf;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import junit.framework.TestCase;
import org.openanzo.exceptions.AnzoRuntimeException;
import org.openanzo.glitter.query.PatternSolution;
import org.openanzo.glitter.query.QueryResults;
import org.openanzo.rdf.vocabulary.Anzo;
/**
* @author Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com </a>)
*
*/
public class DatasetTest extends TestCase {
static final URI ng1 = Constants.valueFactory.createURI("http://test/1");
static final URI ng2 = Constants.valueFactory.createURI("http://test/2");
static final URI ng3 = Constants.valueFactory.createURI("http://test/3");
/**
* Coverage test for Dataset
*
* @throws Exception
*/
public void testDataset() throws Exception {
Dataset dataset = new Dataset();
datasetTest(dataset);
dataset.addNamedGraph(ng1);
assertEquals(0, dataset.size());
dataset.addNamedGraph(ng2);
dataset.addDefaultGraph(ng2);
assertEquals(1, dataset.getDefaultGraphUris().size());
assertNotNull(dataset.getNamedGraph(ng1));
assertNotNull(dataset.getNamedGraph(ng2));
assertTrue(!dataset.getDefaultGraphUris().isEmpty());
assertTrue(!dataset.getNamedGraphUris().isEmpty());
assertTrue(dataset.containsNamedGraph(ng1));
assertTrue(dataset.containsDefaultGraph(ng2));
assertTrue(dataset.containsNamedGraph(ng2));
assertFalse(dataset.containsDefaultGraph(ng1));
dataset.addDefaultGraph(ng1);
INamedGraph graph = dataset.getDefaultGraph(ng1);
graph.add(Constants.valueFactory.createStatement(ng1, ng2, ng3));
assertTrue(graph.contains(Constants.valueFactory.createStatement(ng1, ng2, ng3)));
graph.remove(Constants.valueFactory.createStatement(ng1, ng2, ng3));
dataset.removeNamedGraph(ng1);
dataset.removeNamedGraph(ng2);
assertEquals(0, dataset.size());
assertEquals(2, dataset.getDefaultGraphUris().size());
dataset.clear();
Set<URI> dg = Collections.singleton(ng3);
dataset.addNamedGraph(ng1);
dataset.addNamedGraph(ng3);
dataset.setDefaultGraphs(dg);
assertEquals(0, dataset.size());
dataset.addDefaultGraph(ng1);
graph = dataset.getDefaultGraph(ng1);
graph.add(Constants.valueFactory.createStatement(ng1, ng2, ng3));
assertEquals(2, dataset.getDefaultGraphUris().size());
QueryResults qr = dataset.executeQuery("SELECT ?s ?p ?o WHERE {?s ?p ?o.}");
Iterator<PatternSolution> result = qr.getSelectResults().iterator();
while (result.hasNext()) {
PatternSolution ps = result.next();
assertEquals(ng1.toString(), ps.getBinding("s").toString());
assertEquals(ng2.toString(), ps.getBinding("p").toString());
assertEquals(ng3.toString(), ps.getBinding("o").toString());
}
final int[] counts = new int[2];
dataset.registerListener(new IStatementListener<IDataset>() {
public void statementsAdded(IDataset source, Statement... statements) {
counts[0]++;
}
public void statementsRemoved(IDataset source, Statement... statements) {
counts[1]++;
}
});
graph.remove(Constants.valueFactory.createStatement(ng1, ng2, ng3));
graph.add(Constants.valueFactory.createStatement(ng1, ng2, ng3));
assertEquals(1, counts[0]);
assertEquals(1, counts[1]);
dataset.close();
}
void datasetTest(IDataset dataset) throws Exception {
assertEquals(0, dataset.size());
assertEquals(0, dataset.size());
assertEquals(0, dataset.getDefaultGraphUris().size());
}
/**
* Test null params to dataset
*
* @throws Exception
*/
public void testNullParamsToDataset() throws Exception {
IDataset dataset = new Dataset();
boolean exp = false;
try {
dataset.addNamedGraph(null);
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.addNamedGraph((URI) null);
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.removeNamedGraph((URI) null);
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.addDefaultGraph((URI) null);
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
}
/**
* Test dataset graph methods
*
* @throws Exception
*/
public void testDatasetGraphMethods() throws Exception {
Dataset dataset = new Dataset(null);
assertNull(dataset.getURI());
dataset = new Dataset(ng1);
dataset.addNamedGraph(ng1);
Set<URI> ngs = dataset.getNamedGraphUris();
assertTrue(ngs.contains(ng1));
INamedGraph graph = dataset.getNamedGraph(ng1);
assertNotNull(graph);
dataset.removeNamedGraph(ng1);
Set<URI> graphsSet = new HashSet<URI>();
graphsSet.add(ng1);
dataset = new Dataset();
dataset.setNamedGraphs(graphsSet);
boolean exp = false;
try {
dataset.add(null, null, null, null);
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.add(null, null, null, ng1);
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.add(ng1, null, null, ng1);
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.add(ng1, ng1, null, ng1);
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
dataset.add(ng1, ng1, ng1, ng1);
exp = false;
try {
dataset.add(ng1, ng1, ng1, ng2);
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.add(Constants.valueFactory.createStatement(null, null, null, null));
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.add(Constants.valueFactory.createStatement(null, null, null, ng1));
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.add(Constants.valueFactory.createStatement(ng1, null, null, ng1));
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.add(Constants.valueFactory.createStatement(ng1, ng1, null, ng1));
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
dataset.add(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1));
dataset.add(Collections.<Statement> singleton(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1)));
dataset.remove(Collections.<Statement> singleton(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1)));
exp = false;
try {
dataset.add(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng2));
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
dataset.add(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1));
dataset.remove(null, null, null, (URI[]) null);
dataset.add(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1));
dataset.remove(null, null, null, ng1);
dataset.add(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1));
dataset.remove(ng1, null, null, ng1);
dataset.add(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1));
dataset.remove(ng1, ng1, null, ng1);
dataset.add(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1));
dataset.remove(ng1, ng1, ng1, ng1);
exp = false;
try {
dataset.remove(ng1, ng1, ng1, ng2);
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
exp = false;
try {
dataset.remove(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng2));
} catch (AnzoRuntimeException are) {
exp = true;
}
assertEquals(true, exp);
dataset.clear();
assertTrue(dataset.isEmpty());
assertEquals(0, dataset.size());
Collection<Statement> statements = dataset.find(null, null, null);
assertTrue(statements.size() == 0);
dataset.addNamedGraph(ng1);
assertFalse(dataset.contains(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1)));
dataset.add(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1));
assertFalse(dataset.isEmpty());
assertEquals(1, dataset.size(ng1));
assertTrue(dataset.contains(Constants.valueFactory.createStatement(ng1, ng1, ng1, ng1)));
statements = dataset.find(false, null, null, null);
assertTrue(statements.size() > 0);
statements = dataset.find(false, null, null, null, ng1);
assertTrue(statements.size() > 0);
statements = dataset.find(false, null, null, null, ng2);
assertFalse(statements.size() > 0);
statements = dataset.find(false, null, null, null, ng1, ng2);
assertTrue(statements.size() > 0);
statements = dataset.find(false, null, null, null, ng2, ng3);
assertFalse(statements.size() > 0);
statements = dataset.find(true, null, null, null, ng2, ng3);
assertTrue(statements.size() > 0);
statements = dataset.find(true, null, null, null, ng1);
assertTrue(statements.size() > 0);
statements = dataset.find(true, null, null, null);
assertTrue(statements.size() > 0);
Collection<Statement> stmts = dataset.getStatements();
assertTrue(stmts.size() > 0);
assertFalse(dataset.isClosed());
dataset.close();
assertTrue(dataset.isClosed());
assertNull(dataset.getURI());
}
/**
* Test dataset graph
*/
public void testDatasetGraph() {
URI datasetURI = Constants.valueFactory.createURI("http://testDataset");
IDataset dataset = new Dataset(datasetURI);
dataset.addNamedGraph(ng1);
dataset.addNamedGraph(ng2);
dataset.addNamedGraph(ng3);
dataset.addDefaultGraph(ng1);
dataset.addDefaultGraph(ng2);
INamedGraph datasetGraph = dataset.getDatasetGraph();
assertEquals(6, datasetGraph.size());
assertEquals(3, datasetGraph.find(datasetURI, Anzo.NAMEDGRAPH, null).size());
assertEquals(2, datasetGraph.find(datasetURI, Anzo.DEFAULTGRAPH, null).size());
assertFalse(dataset.containsDefaultGraph(ng3));
datasetGraph.add(datasetURI, Anzo.DEFAULTGRAPH, ng3);
// the add will fire an event that
assertTrue(dataset.containsDefaultGraph(ng3));
}
}