http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/query/strategy/wholerow/PoWholeRowTriplePatternStrategyTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/query/strategy/wholerow/PoWholeRowTriplePatternStrategyTest.java b/common/rya.api/src/test/java/org/apache/rya/api/query/strategy/wholerow/PoWholeRowTriplePatternStrategyTest.java new file mode 100644 index 0000000..1079bf8 --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/query/strategy/wholerow/PoWholeRowTriplePatternStrategyTest.java @@ -0,0 +1,159 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +//package mvm.rya.api.query.strategy.wholerow; + +// +//import junit.framework.TestCase; +//import mvm.rya.api.RdfCloudTripleStoreConstants; +//import mvm.rya.api.domain.*; +//import mvm.rya.api.resolver.RyaContext; +//import mvm.rya.api.resolver.triple.TripleRow; +//import org.apache.accumulo.core.data.Key; +//import org.apache.accumulo.core.data.Range; +//import org.apache.hadoop.io.Text; +//import org.openrdf.model.impl.URIImpl; +// +//import java.util.Map; +// +///** +// * Date: 7/14/12 +// * Time: 11:46 AM +// */ +//public class PoWholeRowTriplePatternStrategyTest extends TestCase { +// +// RyaURI uri = new RyaURI("urn:test#1234"); +// RyaURI uri2 = new RyaURI("urn:test#1235"); +// RyaURIRange rangeURI = new RyaURIRange(uri, uri2); +// RyaURIRange rangeURI2 = new RyaURIRange(new RyaURI("urn:test#1235"), new RyaURI("urn:test#1236")); +// PoWholeRowTriplePatternStrategy strategy = new PoWholeRowTriplePatternStrategy(); +// RyaContext ryaContext = RyaContext.getInstance(); +// +// RyaType customType1 = new RyaType(new URIImpl("urn:custom#type"), "1234"); +// RyaType customType2 = new RyaType(new URIImpl("urn:custom#type"), "1235"); +// RyaType customType3 = new RyaType(new URIImpl("urn:custom#type"), "1236"); +// RyaTypeRange customTypeRange1 = new RyaTypeRange(customType1, customType2); +// RyaTypeRange customTypeRange2 = new RyaTypeRange(customType2, customType3); +// +// public void testPoRange() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(null, uri, rangeURI, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(null, uri, rangeURI2, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testPoRangeCustomType() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, customType1, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(null, uri, customTypeRange1, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(null, uri, customTypeRange2, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testPo() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(null, uri, uri, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(null, uri, uri2, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testPoCustomType() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, customType1, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(null, uri, customType1, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(null, uri, customType2, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testPosRange() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(rangeURI, uri, uri, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(rangeURI2, uri, uri, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testPRange() throws Exception { +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(null, rangeURI, null, null, null); +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple(new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO); +// Key key = new Key(new Text(tripleRow.getRow())); +// assertTrue(entry.getValue().contains(key)); +// } +// +// public void testP() throws Exception { +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(null, uri, null, null, null); +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO); +// Key key = new Key(new Text(tripleRow.getRow())); +// assertTrue(entry.getValue().contains(key)); +// } +// +// public void testHandles() throws Exception { +// //po(ng) +// assertTrue(strategy.handles(null, uri, uri, null)); +// assertTrue(strategy.handles(null, uri, uri, uri)); +// //po_r(s)(ng) +// assertTrue(strategy.handles(rangeURI, uri, uri, null)); +// assertTrue(strategy.handles(rangeURI, uri, uri, uri)); +// //p(ng) +// assertTrue(strategy.handles(null, uri, null, null)); +// assertTrue(strategy.handles(null, uri, null, uri)); +// //p_r(o)(ng) +// assertTrue(strategy.handles(null, uri, rangeURI, null)); +// assertTrue(strategy.handles(null, uri, rangeURI, uri)); +// //r(p)(ng) +// assertTrue(strategy.handles(null, rangeURI, null, null)); +// assertTrue(strategy.handles(null, rangeURI, null, uri)); +// +// //false cases +// //sp.. +// assertFalse(strategy.handles(uri, uri, null, null)); +// //r(s)_p +// assertFalse(strategy.handles(rangeURI, uri, null, null)); +// } +//}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/query/strategy/wholerow/SpoWholeRowTriplePatternStrategyTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/query/strategy/wholerow/SpoWholeRowTriplePatternStrategyTest.java b/common/rya.api/src/test/java/org/apache/rya/api/query/strategy/wholerow/SpoWholeRowTriplePatternStrategyTest.java new file mode 100644 index 0000000..019a3aa --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/query/strategy/wholerow/SpoWholeRowTriplePatternStrategyTest.java @@ -0,0 +1,185 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +//package mvm.rya.api.query.strategy.wholerow; + +// +//import junit.framework.TestCase; +//import mvm.rya.api.RdfCloudTripleStoreConstants; +//import mvm.rya.api.domain.*; +//import mvm.rya.api.resolver.RyaContext; +//import mvm.rya.api.resolver.triple.TripleRow; +//import org.apache.accumulo.core.data.Key; +//import org.apache.accumulo.core.data.Range; +//import org.apache.hadoop.io.Text; +//import org.openrdf.model.impl.URIImpl; +// +//import java.util.Map; +// +///** +// * Date: 7/14/12 +// * Time: 7:47 AM +// */ +//public class SpoWholeRowTriplePatternStrategyTest extends TestCase { +// +// RyaURI uri = new RyaURI("urn:test#1234"); +// RyaURI uri2 = new RyaURI("urn:test#1235"); +// RyaURIRange rangeURI = new RyaURIRange(uri, uri2); +// RyaURIRange rangeURI2 = new RyaURIRange(new RyaURI("urn:test#1235"), new RyaURI("urn:test#1236")); +// SpoWholeRowTriplePatternStrategy strategy = new SpoWholeRowTriplePatternStrategy(); +// RyaContext ryaContext = RyaContext.getInstance(); +// +// RyaType customType1 = new RyaType(new URIImpl("urn:custom#type"), "1234"); +// RyaType customType2 = new RyaType(new URIImpl("urn:custom#type"), "1235"); +// RyaType customType3 = new RyaType(new URIImpl("urn:custom#type"), "1236"); +// RyaTypeRange customTypeRange1 = new RyaTypeRange(customType1, customType2); +// RyaTypeRange customTypeRange2 = new RyaTypeRange(customType2, customType3); +// +// public void testSpo() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(uri, uri, uri, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(uri, uri, uri2, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testSpoCustomType() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, customType1, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(uri, uri, customType1, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(uri, uri, customType2, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testSpoRange() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(uri, uri, rangeURI, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(uri, uri, rangeURI2, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testSpoRangeCustomType() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, customType1, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(uri, uri, customTypeRange1, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(uri, uri, customTypeRange2, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testSp() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(uri, uri, null, null, null); +// assertTrue(entry.getValue().contains(key)); +// entry = strategy.defineRange(uri, uri2, null, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testSpRange() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(uri, rangeURI, null, null, null); +// assertTrue(entry.getValue().contains(key)); +// entry = strategy.defineRange(uri, rangeURI2, null, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testS() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(uri, null, null, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(uri2, null, null, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testSRange() throws Exception { +// Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = ryaContext.serializeTriple( +// new RyaStatement(uri, uri, uri, null)); +// TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); +// Key key = new Key(new Text(tripleRow.getRow())); +// +// Map.Entry<RdfCloudTripleStoreConstants.TABLE_LAYOUT, Range> entry = strategy.defineRange(rangeURI, null, null, null, null); +// assertTrue(entry.getValue().contains(key)); +// +// entry = strategy.defineRange(rangeURI2, null, null, null, null); +// assertFalse(entry.getValue().contains(key)); +// } +// +// public void testHandles() throws Exception { +// //spo(ng) +// assertTrue(strategy.handles(uri, uri, uri, null)); +// assertTrue(strategy.handles(uri, uri, uri, uri)); +// //sp(ng) +// assertTrue(strategy.handles(uri, uri, null, null)); +// assertTrue(strategy.handles(uri, uri, null, uri)); +// //s(ng) +// assertTrue(strategy.handles(uri, null, null, null)); +// assertTrue(strategy.handles(uri, null, null, uri)); +// //sp_r(o)(ng) +// assertTrue(strategy.handles(uri, uri, rangeURI, null)); +// assertTrue(strategy.handles(uri, uri, rangeURI, uri)); +// //s_r(p)(ng) +// assertTrue(strategy.handles(uri, rangeURI, null, null)); +// assertTrue(strategy.handles(uri, rangeURI, null, uri)); +// //r(s) +// assertTrue(strategy.handles(rangeURI, null, null, null)); +// +// //fail +// //s_r(p)_r(o) +// assertFalse(strategy.handles(uri, rangeURI, rangeURI, null)); +// +// //s==null +// assertFalse(strategy.handles(null, uri, uri, null)); +// +// //s_r(o) +// assertFalse(strategy.handles(uri, null, rangeURI, null)); +// } +//} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/resolver/RyaContextTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/resolver/RyaContextTest.java b/common/rya.api/src/test/java/org/apache/rya/api/resolver/RyaContextTest.java new file mode 100644 index 0000000..4363fd3 --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/resolver/RyaContextTest.java @@ -0,0 +1,86 @@ +package mvm.rya.api.resolver; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import java.util.Map; + +import junit.framework.TestCase; +import mvm.rya.api.RdfCloudTripleStoreConstants.TABLE_LAYOUT; +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.domain.RyaType; +import mvm.rya.api.domain.RyaURI; +import mvm.rya.api.query.strategy.AbstractTriplePatternStrategyTest.MockRdfConfiguration; +import mvm.rya.api.query.strategy.wholerow.MockRdfCloudConfiguration; +import mvm.rya.api.resolver.triple.TripleRow; + +import org.openrdf.model.impl.URIImpl; + +/** + */ +public class RyaContextTest extends TestCase { + + public void testDefaultSerialization() throws Exception { + RyaContext instance = RyaContext.getInstance(); + //plain string + RyaType ryaType = new RyaType("mydata"); + byte[] serialize = instance.serialize(ryaType); + assertEquals(ryaType, instance.deserialize(serialize)); + + //uri + RyaURI ryaURI = new RyaURI("urn:test#1234"); + serialize = instance.serialize(ryaURI); + RyaType deserialize = instance.deserialize(serialize); + assertEquals(ryaURI, deserialize); + + //custom type + ryaType = new RyaType(new URIImpl("urn:test#customDataType"), "mydata"); + serialize = instance.serialize(ryaType); + assertEquals(ryaType, instance.deserialize(serialize)); + } + + public void testTripleRowSerialization() throws Exception { + RyaURI subj = new RyaURI("urn:test#subj"); + RyaURI pred = new RyaURI("urn:test#pred"); + RyaType obj = new RyaType("mydata"); + RyaStatement statement = new RyaStatement(subj, pred, obj); + RyaTripleContext instance = RyaTripleContext.getInstance(new MockRdfCloudConfiguration()); + + Map<TABLE_LAYOUT, TripleRow> map = instance.serializeTriple(statement); + TripleRow tripleRow = map.get(TABLE_LAYOUT.SPO); + assertEquals(statement, instance.deserializeTriple(TABLE_LAYOUT.SPO, tripleRow)); + } + + public void testHashedTripleRowSerialization() throws Exception { + RyaURI subj = new RyaURI("urn:test#subj"); + RyaURI pred = new RyaURI("urn:test#pred"); + RyaType obj = new RyaType("mydata"); + RyaStatement statement = new RyaStatement(subj, pred, obj); + MockRdfCloudConfiguration config = new MockRdfCloudConfiguration(); + config.set(MockRdfCloudConfiguration.CONF_PREFIX_ROW_WITH_HASH, Boolean.TRUE.toString()); + RyaTripleContext instance = RyaTripleContext.getInstance(config); + + Map<TABLE_LAYOUT, TripleRow> map = instance.serializeTriple(statement); + TripleRow tripleRow = map.get(TABLE_LAYOUT.SPO); + assertEquals(statement, instance.deserializeTriple(TABLE_LAYOUT.SPO, tripleRow)); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/CustomDatatypeResolverTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/CustomDatatypeResolverTest.java b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/CustomDatatypeResolverTest.java new file mode 100644 index 0000000..0126414 --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/CustomDatatypeResolverTest.java @@ -0,0 +1,40 @@ +package mvm.rya.api.resolver.impl; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import junit.framework.TestCase; +import mvm.rya.api.domain.RyaType; +import org.openrdf.model.impl.URIImpl; + +/** + * Date: 7/16/12 + * Time: 2:47 PM + */ +public class CustomDatatypeResolverTest extends TestCase { + + public void testCustomDataTypeSerialization() throws Exception { + RyaType ryaType = new RyaType(new URIImpl("urn:test#datatype"), "testdata"); + byte[] serialize = new CustomDatatypeResolver().serialize(ryaType); + RyaType deserialize = new CustomDatatypeResolver().deserialize(serialize); + assertEquals(ryaType, deserialize); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/DateTimeRyaTypeResolverTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/DateTimeRyaTypeResolverTest.java b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/DateTimeRyaTypeResolverTest.java new file mode 100644 index 0000000..899bbcf --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/DateTimeRyaTypeResolverTest.java @@ -0,0 +1,177 @@ +package mvm.rya.api.resolver.impl; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import static org.junit.Assert.*; + +import java.util.Date; +import java.util.GregorianCalendar; + +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; + +import mvm.rya.api.domain.RyaType; +import mvm.rya.api.resolver.RdfToRyaConversions; +import mvm.rya.api.resolver.RyaTypeResolverException; + +import org.junit.Ignore; +import org.junit.Test; +import org.openrdf.model.impl.CalendarLiteralImpl; +import org.openrdf.model.vocabulary.XMLSchema; + +/** + * Test serializing and deserializing. + * Notes: + * The serialization, deserialization fills in some information: + * If preserving uncertainty, or preserving the source timezone, then don't use XML type tag. + * - uncertainty: missing time hh:mm:ss becomes 00:00:00 + * - uncertainty: missing milliseconds (.123) become .000. + * - uncertainty: missing timezone becomes the system local timezone. + * - timezone: converted to the equivalent Z timezone. + * - a type XMLSchema.DATE become XMLSchema.DATETIME after deserialized + * + * ex: run in timezone eastern time (GMT-5:00): + * before= 2000-02-02 type = XMLSchema.DATE + * deserialized= 2000-02-02T05:00:00.000Z type = XMLSchema.DATETIME + */ +public class DateTimeRyaTypeResolverTest { + @Test + public void testDateTime() throws Exception { + long currentTime = 1342182689285l; + Date date = new Date(currentTime); + GregorianCalendar gc = new GregorianCalendar(); + gc.setTimeInMillis(date.getTime()); + XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc); + CalendarLiteralImpl literal = new CalendarLiteralImpl(xmlGregorianCalendar); + byte[] serialize = new DateTimeRyaTypeResolver().serialize(RdfToRyaConversions.convertLiteral(literal)); + RyaType deserialize = new DateTimeRyaTypeResolver().deserialize(serialize); + assertEquals("2012-07-13T12:31:29.285Z", deserialize.getData()); + assertEquals(XMLSchema.DATETIME, deserialize.getDataType()); + } + @Test + public void testFull() throws Exception { + String currentTime = "2000-01-01T00:00:01.111Z"; + assertSerializeAndDesDateTime("2000-01-01T00:00:01.111Z"); + + } + @Test + public void testNoMilliSeconds() throws Exception { + assertSerializeAndDesDateTime("2000-01-01T00:00:01Z","2000-01-01T00:00:01.000Z"); + + } + @Test + public void testDateNoTimeNoZone() throws Exception { + String beforeDate = "2000-02-02"; + String afterDate="2000-02-0(1|2|3)T\\d\\d:\\d\\d:00\\.000Z"; + RyaType deserialize = serializeAndDeserialize(beforeDate, XMLSchema.DATE); + final String afterActual = deserialize.getData(); + assertTrue("Before='"+beforeDate+"'; Expected should match actual regex after='"+afterDate+"' deserialized:"+afterActual, afterActual.matches(afterDate)); + assertEquals(XMLSchema.DATETIME, deserialize.getDataType()); + } + @Test + public void testDateZoneNoTime() throws Exception { + // if you see this: + //java.lang.IllegalArgumentException: Invalid format: "2000-02-02Z" is malformed at "Z" + // use this: "2000-02-02TZ"; + String currentTime = "2000-02-02TZ"; + RyaType deserialize = serializeAndDeserialize(currentTime, XMLSchema.DATE); + assertEquals("Before expected should match after actual deserialized:","2000-02-02T00:00:00.000Z", deserialize.getData()); + assertEquals(XMLSchema.DATETIME, deserialize.getDataType()); + } + @Test + public void testNoZone() throws Exception { + String beforeDate = "2000-01-02T00:00:01"; + String afterDate="2000-01-0(1|2|3)T\\d\\d:\\d\\d:01\\.000Z"; + RyaType deserialize = serializeAndDeserialize(beforeDate, XMLSchema.DATE); + final String afterActual = deserialize.getData(); + assertTrue("Before='"+beforeDate+"'; Expected should match actual regex after='"+afterDate+"' deserialized:"+afterActual, afterActual.matches(afterDate)); + assertEquals(XMLSchema.DATETIME, deserialize.getDataType()); + + } + @Test + public void testMilliSecondsNoZone() throws Exception { + String beforeDate="2002-02-02T02:02:02.222"; + String afterDate="2002-02-0(1|2|3)T\\d\\d:\\d\\d:02\\.222.*"; + RyaType deserialize = serializeAndDeserialize(beforeDate, XMLSchema.DATETIME); + final String afterActual = deserialize.getData(); + assertTrue("Before='"+beforeDate+"'; Expected should match actual regex after='"+afterDate+"' deserialized:"+afterActual, afterActual.matches(afterDate)); + assertEquals(XMLSchema.DATETIME, deserialize.getDataType()); + + } + @Test + public void testHistoryAndFuture() throws Exception { + assertSerializeAndDesDateTime("-2000-01-01T00:00:01Z","-2000-01-01T00:00:01.000Z"); + assertSerializeAndDesDateTime("111-01-01T00:00:01Z","0111-01-01T00:00:01.000Z"); + assertSerializeAndDesDateTime("12345-01-01T00:00:01Z","12345-01-01T00:00:01.000Z"); + } + + @Test + public void testTimeZone() throws Exception { + assertSerializeAndDesDateTime( "2000-01-01T00:00:01+01:00", "1999-12-31T23:00:01.000Z"); + assertSerializeAndDesDateTime( "2000-01-01T00:00:01+02:30", "1999-12-31T21:30:01.000Z"); + assertSerializeAndDesDateTime("2000-01-01T00:00:01.123-02:00", "2000-01-01T02:00:01.123Z"); + assertSerializeAndDesDateTime( "111-01-01T00:00:01+14:00", "0110-12-31T10:00:01.000Z" ); + assertSerializeAndDesDateTime( "12345-01-01T00:00:01-14:00","12345-01-01T14:00:01.000Z"); + assertSerializeAndDesDateTime( "1-01-01T00:00:01+14:00", "0000-12-31T10:00:01.000Z" ); + } + + @Test + public void testGarbageIn() throws Exception { + String currentTime = "Blablabla"; + RyaType ryaType = new RyaType(XMLSchema.DATETIME, currentTime ); + Throwable threw=null; + try { + new DateTimeRyaTypeResolver().serialize(ryaType); + } catch (java.lang.IllegalArgumentException exception) { + threw = exception; + } + assertNotNull("Expected to catch bad format message.",threw); + assertEquals("Caught bad format message.","Invalid format: \"Blablabla\"", threw.getMessage()); + } + /** + * Do the test on the DateTime + * @param dateTimeString + * @throws RyaTypeResolverException + */ + private void assertSerializeAndDesDateTime(String dateTimeString) throws RyaTypeResolverException { + assertSerializeAndDesDateTime(dateTimeString, dateTimeString); + } + private void assertSerializeAndDesDateTime(String beforeDate, String afterDate ) throws RyaTypeResolverException { + RyaType deserialize = serializeAndDeserialize(beforeDate, XMLSchema.DATETIME); + assertEquals("Before='"+beforeDate+"'; Expected should match actual after deserialized:",afterDate, deserialize.getData()); + assertEquals(XMLSchema.DATETIME, deserialize.getDataType()); + } + /** + * Serialize a datetime string, then deserialize as a ryaType. + * @param dateTimeString + * @param type if null , use default: XMLSchema.DATETIME + * @return + * @throws RyaTypeResolverException + */ + private RyaType serializeAndDeserialize(String dateTimeString, org.openrdf.model.URI type ) throws RyaTypeResolverException { + if (type == null) + type = XMLSchema.DATETIME; + RyaType ryaType = new RyaType(type, dateTimeString ); + byte[] serialize = new DateTimeRyaTypeResolver().serialize(ryaType); + return new DateTimeRyaTypeResolver().deserialize(serialize); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/DoubleRyaTypeResolverTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/DoubleRyaTypeResolverTest.java b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/DoubleRyaTypeResolverTest.java new file mode 100644 index 0000000..2c5f43d --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/DoubleRyaTypeResolverTest.java @@ -0,0 +1,46 @@ +package mvm.rya.api.resolver.impl; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import junit.framework.TestCase; +import mvm.rya.api.domain.RyaType; +import org.openrdf.model.vocabulary.XMLSchema; + +import java.util.Random; + +/** + * Date: 7/20/12 + * Time: 9:43 AM + */ +public class DoubleRyaTypeResolverTest extends TestCase { + + public void testDoubleSerialization() throws Exception { + Double d = randomDouble(); + RyaType ryaType = new RyaType(XMLSchema.DOUBLE, d.toString()); + byte[] serialize = new DoubleRyaTypeResolver().serialize(ryaType); + assertEquals(d, Double.parseDouble(new DoubleRyaTypeResolver().deserialize(serialize).getData())); + } + + private double randomDouble() { + return new Random(System.currentTimeMillis()).nextDouble(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/IntegerRyaTypeResolverTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/IntegerRyaTypeResolverTest.java b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/IntegerRyaTypeResolverTest.java new file mode 100644 index 0000000..60cded0 --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/IntegerRyaTypeResolverTest.java @@ -0,0 +1,44 @@ +package mvm.rya.api.resolver.impl; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import junit.framework.TestCase; +import mvm.rya.api.domain.RyaType; +import org.openrdf.model.vocabulary.XMLSchema; + +import java.util.Random; + +/** + * Date: 7/20/12 + * Time: 10:17 AM + */ +public class IntegerRyaTypeResolverTest extends TestCase { + public void testIntegerSerialization() throws Exception { + Integer i = randomInt(); + byte[] serialize = new IntegerRyaTypeResolver().serialize(new RyaType(XMLSchema.INTEGER, i.toString())); + assertEquals(i, new Integer(new IntegerRyaTypeResolver().deserialize(serialize).getData())); + } + + private int randomInt() { + return new Random(System.currentTimeMillis()).nextInt(Integer.MAX_VALUE); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/LongRyaTypeResolverTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/LongRyaTypeResolverTest.java b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/LongRyaTypeResolverTest.java new file mode 100644 index 0000000..3dfb9c4 --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/LongRyaTypeResolverTest.java @@ -0,0 +1,49 @@ +package mvm.rya.api.resolver.impl; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import mvm.rya.api.domain.RyaType; +import org.junit.Test; +import org.openrdf.model.vocabulary.XMLSchema; + +import java.util.Random; + +import static junit.framework.Assert.assertEquals; + +/** + * Date: 9/7/12 + * Time: 2:53 PM + */ +public class LongRyaTypeResolverTest { + + @Test + public void testSerialization() throws Exception { + Long i = randomLong(); + byte[] serialize = new LongRyaTypeResolver().serialize(new RyaType(XMLSchema.LONG, i.toString())); + assertEquals(i, new Long(new LongRyaTypeResolver().deserialize(serialize).getData())); + } + + private long randomLong() { + return new Random(System.currentTimeMillis()).nextLong(); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/RyaURIResolverTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/RyaURIResolverTest.java b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/RyaURIResolverTest.java new file mode 100644 index 0000000..f962b88 --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/resolver/impl/RyaURIResolverTest.java @@ -0,0 +1,40 @@ +package mvm.rya.api.resolver.impl; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import junit.framework.TestCase; +import mvm.rya.api.domain.RyaType; +import mvm.rya.api.domain.RyaURI; + +/** + * Date: 7/16/12 + * Time: 2:51 PM + */ +public class RyaURIResolverTest extends TestCase { + + public void testSerialization() throws Exception { + RyaURI ryaURI = new RyaURI("urn:testdata#data"); + byte[] serialize = new RyaURIResolver().serialize(ryaURI); + RyaType deserialize = new RyaURIResolver().deserialize(serialize); + assertEquals(ryaURI, deserialize); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/resolver/triple/impl/HashedWholeRowTripleResolverTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/resolver/triple/impl/HashedWholeRowTripleResolverTest.java b/common/rya.api/src/test/java/org/apache/rya/api/resolver/triple/impl/HashedWholeRowTripleResolverTest.java new file mode 100644 index 0000000..2baa92d --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/resolver/triple/impl/HashedWholeRowTripleResolverTest.java @@ -0,0 +1,124 @@ +package mvm.rya.api.resolver.triple.impl; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import java.util.Map; + +import junit.framework.TestCase; +import mvm.rya.api.RdfCloudTripleStoreConstants; +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.domain.RyaURI; +import mvm.rya.api.resolver.triple.TripleRow; + +/** + * Date: 7/25/12 + * Time: 10:52 AM + */ +public class HashedWholeRowTripleResolverTest extends TestCase { + + WholeRowHashedTripleResolver tripleResolver = new WholeRowHashedTripleResolver(); + + public void testSerialize() throws Exception { + //no context + RyaURI subj = new RyaURI("urn:test#1234"); + RyaURI pred = new RyaURI("urn:test#pred"); + RyaURI obj = new RyaURI("urn:test#obj"); + RyaURI cntxt = new RyaURI("urn:test#cntxt"); + final RyaStatement stmt = new RyaStatement(subj, pred, obj, null, null, null, null, 100l); + final RyaStatement stmtContext = new RyaStatement(subj, pred, obj, cntxt, null, null, null, 100l); + + Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = tripleResolver.serialize(stmt); + TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); + RyaStatement deserialize = tripleResolver.deserialize(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO, tripleRow); + assertEquals(stmt, deserialize); + + //context + serialize = tripleResolver.serialize(stmtContext); + tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); + deserialize = tripleResolver.deserialize(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO, tripleRow); + assertEquals(stmtContext, deserialize); + } + + public void testSerializePO() throws Exception { + RdfCloudTripleStoreConstants.TABLE_LAYOUT po = RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO; + //no context + RyaURI subj = new RyaURI("urn:test#1234"); + RyaURI pred = new RyaURI("urn:test#pred"); + RyaURI obj = new RyaURI("urn:test#obj"); + RyaURI cntxt = new RyaURI("urn:test#cntxt"); + final RyaStatement stmt = new RyaStatement(subj, pred, obj, null, null, null, null, 100l); + final RyaStatement stmtContext = new RyaStatement(subj, pred, obj, cntxt, null, null, null, 100l); + Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = tripleResolver.serialize(stmt); + TripleRow tripleRow = serialize.get(po); + RyaStatement deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmt, deserialize); + + //context + serialize = tripleResolver.serialize(stmtContext); + tripleRow = serialize.get(po); + deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmtContext, deserialize); + } + + public void testSerializeOSP() throws Exception { + RdfCloudTripleStoreConstants.TABLE_LAYOUT po = RdfCloudTripleStoreConstants.TABLE_LAYOUT.OSP; + //no context + RyaURI subj = new RyaURI("urn:test#1234"); + RyaURI pred = new RyaURI("urn:test#pred"); + RyaURI obj = new RyaURI("urn:test#obj"); + RyaURI cntxt = new RyaURI("urn:test#cntxt"); + final RyaStatement stmt = new RyaStatement(subj, pred, obj, null, null, null, null, 100l); + final RyaStatement stmtContext = new RyaStatement(subj, pred, obj, cntxt, null, null, null, 100l); + Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = tripleResolver.serialize(stmt); + TripleRow tripleRow = serialize.get(po); + RyaStatement deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmt, deserialize); + + //context + serialize = tripleResolver.serialize(stmtContext); + tripleRow = serialize.get(po); + deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmtContext, deserialize); + } + + public void testSerializeOSPCustomType() throws Exception { + RdfCloudTripleStoreConstants.TABLE_LAYOUT po = RdfCloudTripleStoreConstants.TABLE_LAYOUT.OSP; + //no context + RyaURI subj = new RyaURI("urn:test#1234"); + RyaURI pred = new RyaURI("urn:test#pred"); + RyaURI obj = new RyaURI("urn:test#obj"); + RyaURI cntxt = new RyaURI("urn:test#cntxt"); + final RyaStatement stmt = new RyaStatement(subj, pred, obj, null, null, null, null, 100l); + final RyaStatement stmtContext = new RyaStatement(subj, pred, obj, cntxt, null, null, null, 100l); + Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = tripleResolver.serialize(stmt); + TripleRow tripleRow = serialize.get(po); + RyaStatement deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmt, deserialize); + + //context + serialize = tripleResolver.serialize(stmtContext); + tripleRow = serialize.get(po); + deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmtContext, deserialize); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/resolver/triple/impl/WholeRowTripleResolverTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/resolver/triple/impl/WholeRowTripleResolverTest.java b/common/rya.api/src/test/java/org/apache/rya/api/resolver/triple/impl/WholeRowTripleResolverTest.java new file mode 100644 index 0000000..30409ff --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/resolver/triple/impl/WholeRowTripleResolverTest.java @@ -0,0 +1,127 @@ +package mvm.rya.api.resolver.triple.impl; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import junit.framework.TestCase; +import mvm.rya.api.RdfCloudTripleStoreConstants; +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.domain.RyaURI; +import mvm.rya.api.resolver.triple.TripleRow; +import mvm.rya.api.resolver.triple.TripleRowRegex; + +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Date: 7/25/12 + * Time: 10:52 AM + */ +public class WholeRowTripleResolverTest extends TestCase { + + WholeRowTripleResolver tripleResolver = new WholeRowTripleResolver(); + + public void testSerialize() throws Exception { + //no context + RyaURI subj = new RyaURI("urn:test#1234"); + RyaURI pred = new RyaURI("urn:test#pred"); + RyaURI obj = new RyaURI("urn:test#obj"); + RyaURI cntxt = new RyaURI("urn:test#cntxt"); + final RyaStatement stmt = new RyaStatement(subj, pred, obj, null, null, null, null, 100l); + final RyaStatement stmtContext = new RyaStatement(subj, pred, obj, cntxt, null, null, null, 100l); + + Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = tripleResolver.serialize(stmt); + TripleRow tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); + RyaStatement deserialize = tripleResolver.deserialize(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO, tripleRow); + assertEquals(stmt, deserialize); + + //context + serialize = tripleResolver.serialize(stmtContext); + tripleRow = serialize.get(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO); + deserialize = tripleResolver.deserialize(RdfCloudTripleStoreConstants.TABLE_LAYOUT.SPO, tripleRow); + assertEquals(stmtContext, deserialize); + } + + public void testSerializePO() throws Exception { + RdfCloudTripleStoreConstants.TABLE_LAYOUT po = RdfCloudTripleStoreConstants.TABLE_LAYOUT.PO; + //no context + RyaURI subj = new RyaURI("urn:test#1234"); + RyaURI pred = new RyaURI("urn:test#pred"); + RyaURI obj = new RyaURI("urn:test#obj"); + RyaURI cntxt = new RyaURI("urn:test#cntxt"); + final RyaStatement stmt = new RyaStatement(subj, pred, obj, null, null, null, null, 100l); + final RyaStatement stmtContext = new RyaStatement(subj, pred, obj, cntxt, null, null, null, 100l); + Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = tripleResolver.serialize(stmt); + TripleRow tripleRow = serialize.get(po); + RyaStatement deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmt, deserialize); + + //context + serialize = tripleResolver.serialize(stmtContext); + tripleRow = serialize.get(po); + deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmtContext, deserialize); + } + + public void testSerializeOSP() throws Exception { + RdfCloudTripleStoreConstants.TABLE_LAYOUT po = RdfCloudTripleStoreConstants.TABLE_LAYOUT.OSP; + //no context + RyaURI subj = new RyaURI("urn:test#1234"); + RyaURI pred = new RyaURI("urn:test#pred"); + RyaURI obj = new RyaURI("urn:test#obj"); + RyaURI cntxt = new RyaURI("urn:test#cntxt"); + final RyaStatement stmt = new RyaStatement(subj, pred, obj, null, null, null, null, 100l); + final RyaStatement stmtContext = new RyaStatement(subj, pred, obj, cntxt, null, null, null, 100l); + Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = tripleResolver.serialize(stmt); + TripleRow tripleRow = serialize.get(po); + RyaStatement deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmt, deserialize); + + //context + serialize = tripleResolver.serialize(stmtContext); + tripleRow = serialize.get(po); + deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmtContext, deserialize); + } + + public void testSerializeOSPCustomType() throws Exception { + RdfCloudTripleStoreConstants.TABLE_LAYOUT po = RdfCloudTripleStoreConstants.TABLE_LAYOUT.OSP; + //no context + RyaURI subj = new RyaURI("urn:test#1234"); + RyaURI pred = new RyaURI("urn:test#pred"); + RyaURI obj = new RyaURI("urn:test#obj"); + RyaURI cntxt = new RyaURI("urn:test#cntxt"); + final RyaStatement stmt = new RyaStatement(subj, pred, obj, null, null, null, null, 100l); + final RyaStatement stmtContext = new RyaStatement(subj, pred, obj, cntxt, null, null, null, 100l); + Map<RdfCloudTripleStoreConstants.TABLE_LAYOUT, TripleRow> serialize = tripleResolver.serialize(stmt); + TripleRow tripleRow = serialize.get(po); + RyaStatement deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmt, deserialize); + + //context + serialize = tripleResolver.serialize(stmtContext); + tripleRow = serialize.get(po); + deserialize = tripleResolver.deserialize(po, tripleRow); + assertEquals(stmtContext, deserialize); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/test/java/org/apache/rya/api/utils/RdfIOTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/org/apache/rya/api/utils/RdfIOTest.java b/common/rya.api/src/test/java/org/apache/rya/api/utils/RdfIOTest.java new file mode 100644 index 0000000..db377e1 --- /dev/null +++ b/common/rya.api/src/test/java/org/apache/rya/api/utils/RdfIOTest.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +//package mvm.rya.api.utils; + +// +//import junit.framework.TestCase; +//import mvm.rya.api.RdfCloudTripleStoreUtils; +//import org.openrdf.model.Statement; +//import org.openrdf.model.impl.StatementImpl; +// +//import static mvm.rya.api.RdfCloudTripleStoreConstants.*; +// +///** +// * Class RdfIOTest +// * Date: Mar 8, 2012 +// * Time: 10:12:00 PM +// */ +//public class RdfIOTest extends TestCase { +// +// Statement st = new StatementImpl(RTS_SUBJECT, RTS_VERSION_PREDICATE, VERSION); +// int num = 100000; +// +// public void testPerf() throws Exception { +// +// long start = System.currentTimeMillis(); +// for(int i = 0; i < num; i++) { +// byte[] bytes = RdfCloudTripleStoreUtils.writeValue(st.getSubject()); +//// byte[] bytes = RdfIO.writeStatement(st); +//// Statement retSt = RdfIO.readStatement(ByteStreams.newDataInput(bytes), VALUE_FACTORY); +// } +// long dur = System.currentTimeMillis() - start; +// System.out.println("RdfCloudTripleStoreUtils: " + dur); +// +// +// } +// +// public void testPerf2() throws Exception { +// long start = System.currentTimeMillis(); +// for(int i = 0; i < num; i++) { +// byte[] bytes = RdfIO.writeValue(st.getSubject()); +// +//// byte[] bytes = RdfCloudTripleStoreUtils.buildRowWith(RdfCloudTripleStoreUtils.writeValue(st.getSubject()), +//// RdfCloudTripleStoreUtils.writeValue(st.getPredicate()), +//// RdfCloudTripleStoreUtils.writeValue(st.getObject())); +//// Statement retSt = RdfCloudTripleStoreUtils.translateStatementFromRow(ByteStreams.newDataInput(bytes), TABLE_LAYOUT.SPO, VALUE_FACTORY); +// } +// long dur = System.currentTimeMillis() - start; +// System.out.println("RdfIO: " + dur); +// } +//} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/LoggingProvenanceCollector.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/LoggingProvenanceCollector.java b/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/LoggingProvenanceCollector.java deleted file mode 100644 index 2ef279a..0000000 --- a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/LoggingProvenanceCollector.java +++ /dev/null @@ -1,41 +0,0 @@ -package mvm.rya.rdftriplestore.provenance; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - - -import org.apache.log4j.Logger; - -/** - * Provenance collector that logs queries - */ -public class LoggingProvenanceCollector implements ProvenanceCollector { - - private static final Logger log = Logger.getLogger(LoggingProvenanceCollector.class); - - /* (non-Javadoc) - * @see mvm.rya.rdftriplestore.provenance.ProvenanceCollector#recordQuery(java.lang.String) - */ - public void recordQuery(String query) { - log.debug("User entered query: " + query); - } - - -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/ProvenanceCollectionException.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/ProvenanceCollectionException.java b/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/ProvenanceCollectionException.java deleted file mode 100644 index a0bd896..0000000 --- a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/ProvenanceCollectionException.java +++ /dev/null @@ -1,39 +0,0 @@ -package mvm.rya.rdftriplestore.provenance; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -import org.openrdf.repository.RepositoryException; - -/** - * Exception for errors in collecting provenance data - */ -public class ProvenanceCollectionException extends Exception { - - public ProvenanceCollectionException(RepositoryException e) { - super(e); - } - - /** - * - */ - private static final long serialVersionUID = 1L; - -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/ProvenanceCollector.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/ProvenanceCollector.java b/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/ProvenanceCollector.java deleted file mode 100644 index a4ff829..0000000 --- a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/ProvenanceCollector.java +++ /dev/null @@ -1,34 +0,0 @@ -package mvm.rya.rdftriplestore.provenance; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Collects/records provenance data - */ -public interface ProvenanceCollector { - - /** - * Records appropriate metadata about a query - * @param query the query being recorded. cannot be null - * @throws ProvenanceCollectionException - */ - public void recordQuery(String query) throws ProvenanceCollectionException; -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/TriplestoreProvenanceCollector.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/TriplestoreProvenanceCollector.java b/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/TriplestoreProvenanceCollector.java deleted file mode 100644 index e283f2c..0000000 --- a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/TriplestoreProvenanceCollector.java +++ /dev/null @@ -1,68 +0,0 @@ -package mvm.rya.rdftriplestore.provenance; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -import java.util.List; - -import mvm.rya.rdftriplestore.provenance.rdf.BaseProvenanceModel; -import mvm.rya.rdftriplestore.provenance.rdf.RDFProvenanceModel; - -import org.openrdf.model.Statement; -import org.openrdf.repository.RepositoryException; -import org.openrdf.repository.sail.SailRepository; - -/** - * Records provenance data to an external rdf triplestore - */ -public class TriplestoreProvenanceCollector implements ProvenanceCollector { - - private RDFProvenanceModel provenanceModel; - private SailRepository provenanceRepo; - private String user; - private String queryType; - - /** - * @param repo the repository to record to - * @param user the user issuing the query - * @param queryType the type of query (SPARQL, etc.) - */ - public TriplestoreProvenanceCollector(SailRepository repo, String user, String queryType){ - provenanceRepo = repo; - provenanceModel = new BaseProvenanceModel(); - this.user = user; - this.queryType = queryType; - } - - /* (non-Javadoc) - * @see mvm.rya.rdftriplestore.provenance.ProvenanceCollector#recordQuery(java.lang.String) - */ - public void recordQuery(String query) throws ProvenanceCollectionException { - List<Statement> provenanceTriples = provenanceModel.getStatementsForQuery(query, user, queryType); - try { - provenanceRepo.getConnection().add(provenanceTriples); - } catch (RepositoryException e) { - throw new ProvenanceCollectionException(e); - } - - } - - -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/rdf/BaseProvenanceModel.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/rdf/BaseProvenanceModel.java b/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/rdf/BaseProvenanceModel.java deleted file mode 100644 index b8c5f32..0000000 --- a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/rdf/BaseProvenanceModel.java +++ /dev/null @@ -1,68 +0,0 @@ -package mvm.rya.rdftriplestore.provenance.rdf; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.UUID; - -import org.openrdf.model.Resource; -import org.openrdf.model.Statement; -import org.openrdf.model.URI; -import org.openrdf.model.ValueFactory; -import org.openrdf.model.impl.ValueFactoryImpl; -import org.openrdf.model.vocabulary.RDF; - -/** - * Basic representation of Provenance data capture in RDF. - */ -public class BaseProvenanceModel implements RDFProvenanceModel { - - private static final ValueFactory vf = ValueFactoryImpl.getInstance(); - private static final Resource queryEventType = vf.createURI("http://rya.com/provenance#QueryEvent"); - private static final URI atTimeProperty = vf.createURI("http://www.w3.org/ns/prov#atTime"); - private static final URI associatedWithUser = vf.createURI("http://rya.com/provenance#associatedWithUser"); - private static final URI queryTypeProp = vf.createURI("http://rya.com/provenance#queryType"); - private static final URI executedQueryProperty = vf.createURI("http://rya.com/provenance#executedQuery"); - private static final String queryNameSpace = "http://rya.com/provenance#queryEvent"; - - /* (non-Javadoc) - * @see mvm.rya.rdftriplestore.provenance.rdf.RDFProvenanceModel#getStatementsForQuery(java.lang.String, java.lang.String, java.lang.String) - */ - public List<Statement> getStatementsForQuery(String query, String user, String queryType) { - List<Statement> statements = new ArrayList<Statement>(); - // create some statements for the query - Resource queryEventResource = vf.createURI(queryNameSpace + UUID.randomUUID().toString()); - Statement queryEventDecl = vf.createStatement(queryEventResource, RDF.TYPE, queryEventType); - statements.add(queryEventDecl); - Statement queryEventTime = vf.createStatement(queryEventResource, atTimeProperty, vf.createLiteral(new Date())); - statements.add(queryEventTime); - Statement queryUser = vf.createStatement(queryEventResource, associatedWithUser, vf.createLiteral(user)); - statements.add(queryUser); - Statement executedQuery = vf.createStatement(queryEventResource, executedQueryProperty, vf.createLiteral(query)); - statements.add(executedQuery); - Statement queryTypeStatement = vf.createStatement(queryEventResource, queryTypeProp, vf.createLiteral(queryType)); - statements.add(queryTypeStatement); - return statements; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/rdf/RDFProvenanceModel.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/rdf/RDFProvenanceModel.java b/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/rdf/RDFProvenanceModel.java deleted file mode 100644 index c5495f2..0000000 --- a/common/rya.provenance/src/main/java/mvm/rya/rdftriplestore/provenance/rdf/RDFProvenanceModel.java +++ /dev/null @@ -1,33 +0,0 @@ -package mvm.rya.rdftriplestore.provenance.rdf; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -import java.util.List; - -import org.openrdf.model.Statement; - - -public interface RDFProvenanceModel { - - List<Statement> getStatementsForQuery(String query, String user, String queryType); - - -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/LoggingProvenanceCollector.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/LoggingProvenanceCollector.java b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/LoggingProvenanceCollector.java new file mode 100644 index 0000000..2ef279a --- /dev/null +++ b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/LoggingProvenanceCollector.java @@ -0,0 +1,41 @@ +package mvm.rya.rdftriplestore.provenance; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import org.apache.log4j.Logger; + +/** + * Provenance collector that logs queries + */ +public class LoggingProvenanceCollector implements ProvenanceCollector { + + private static final Logger log = Logger.getLogger(LoggingProvenanceCollector.class); + + /* (non-Javadoc) + * @see mvm.rya.rdftriplestore.provenance.ProvenanceCollector#recordQuery(java.lang.String) + */ + public void recordQuery(String query) { + log.debug("User entered query: " + query); + } + + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/ProvenanceCollectionException.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/ProvenanceCollectionException.java b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/ProvenanceCollectionException.java new file mode 100644 index 0000000..a0bd896 --- /dev/null +++ b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/ProvenanceCollectionException.java @@ -0,0 +1,39 @@ +package mvm.rya.rdftriplestore.provenance; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +import org.openrdf.repository.RepositoryException; + +/** + * Exception for errors in collecting provenance data + */ +public class ProvenanceCollectionException extends Exception { + + public ProvenanceCollectionException(RepositoryException e) { + super(e); + } + + /** + * + */ + private static final long serialVersionUID = 1L; + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/ProvenanceCollector.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/ProvenanceCollector.java b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/ProvenanceCollector.java new file mode 100644 index 0000000..a4ff829 --- /dev/null +++ b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/ProvenanceCollector.java @@ -0,0 +1,34 @@ +package mvm.rya.rdftriplestore.provenance; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +/** + * Collects/records provenance data + */ +public interface ProvenanceCollector { + + /** + * Records appropriate metadata about a query + * @param query the query being recorded. cannot be null + * @throws ProvenanceCollectionException + */ + public void recordQuery(String query) throws ProvenanceCollectionException; +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/TriplestoreProvenanceCollector.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/TriplestoreProvenanceCollector.java b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/TriplestoreProvenanceCollector.java new file mode 100644 index 0000000..e283f2c --- /dev/null +++ b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/TriplestoreProvenanceCollector.java @@ -0,0 +1,68 @@ +package mvm.rya.rdftriplestore.provenance; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +import java.util.List; + +import mvm.rya.rdftriplestore.provenance.rdf.BaseProvenanceModel; +import mvm.rya.rdftriplestore.provenance.rdf.RDFProvenanceModel; + +import org.openrdf.model.Statement; +import org.openrdf.repository.RepositoryException; +import org.openrdf.repository.sail.SailRepository; + +/** + * Records provenance data to an external rdf triplestore + */ +public class TriplestoreProvenanceCollector implements ProvenanceCollector { + + private RDFProvenanceModel provenanceModel; + private SailRepository provenanceRepo; + private String user; + private String queryType; + + /** + * @param repo the repository to record to + * @param user the user issuing the query + * @param queryType the type of query (SPARQL, etc.) + */ + public TriplestoreProvenanceCollector(SailRepository repo, String user, String queryType){ + provenanceRepo = repo; + provenanceModel = new BaseProvenanceModel(); + this.user = user; + this.queryType = queryType; + } + + /* (non-Javadoc) + * @see mvm.rya.rdftriplestore.provenance.ProvenanceCollector#recordQuery(java.lang.String) + */ + public void recordQuery(String query) throws ProvenanceCollectionException { + List<Statement> provenanceTriples = provenanceModel.getStatementsForQuery(query, user, queryType); + try { + provenanceRepo.getConnection().add(provenanceTriples); + } catch (RepositoryException e) { + throw new ProvenanceCollectionException(e); + } + + } + + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/rdf/BaseProvenanceModel.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/rdf/BaseProvenanceModel.java b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/rdf/BaseProvenanceModel.java new file mode 100644 index 0000000..b8c5f32 --- /dev/null +++ b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/rdf/BaseProvenanceModel.java @@ -0,0 +1,68 @@ +package mvm.rya.rdftriplestore.provenance.rdf; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +import org.openrdf.model.Resource; +import org.openrdf.model.Statement; +import org.openrdf.model.URI; +import org.openrdf.model.ValueFactory; +import org.openrdf.model.impl.ValueFactoryImpl; +import org.openrdf.model.vocabulary.RDF; + +/** + * Basic representation of Provenance data capture in RDF. + */ +public class BaseProvenanceModel implements RDFProvenanceModel { + + private static final ValueFactory vf = ValueFactoryImpl.getInstance(); + private static final Resource queryEventType = vf.createURI("http://rya.com/provenance#QueryEvent"); + private static final URI atTimeProperty = vf.createURI("http://www.w3.org/ns/prov#atTime"); + private static final URI associatedWithUser = vf.createURI("http://rya.com/provenance#associatedWithUser"); + private static final URI queryTypeProp = vf.createURI("http://rya.com/provenance#queryType"); + private static final URI executedQueryProperty = vf.createURI("http://rya.com/provenance#executedQuery"); + private static final String queryNameSpace = "http://rya.com/provenance#queryEvent"; + + /* (non-Javadoc) + * @see mvm.rya.rdftriplestore.provenance.rdf.RDFProvenanceModel#getStatementsForQuery(java.lang.String, java.lang.String, java.lang.String) + */ + public List<Statement> getStatementsForQuery(String query, String user, String queryType) { + List<Statement> statements = new ArrayList<Statement>(); + // create some statements for the query + Resource queryEventResource = vf.createURI(queryNameSpace + UUID.randomUUID().toString()); + Statement queryEventDecl = vf.createStatement(queryEventResource, RDF.TYPE, queryEventType); + statements.add(queryEventDecl); + Statement queryEventTime = vf.createStatement(queryEventResource, atTimeProperty, vf.createLiteral(new Date())); + statements.add(queryEventTime); + Statement queryUser = vf.createStatement(queryEventResource, associatedWithUser, vf.createLiteral(user)); + statements.add(queryUser); + Statement executedQuery = vf.createStatement(queryEventResource, executedQueryProperty, vf.createLiteral(query)); + statements.add(executedQuery); + Statement queryTypeStatement = vf.createStatement(queryEventResource, queryTypeProp, vf.createLiteral(queryType)); + statements.add(queryTypeStatement); + return statements; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/rdf/RDFProvenanceModel.java ---------------------------------------------------------------------- diff --git a/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/rdf/RDFProvenanceModel.java b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/rdf/RDFProvenanceModel.java new file mode 100644 index 0000000..c5495f2 --- /dev/null +++ b/common/rya.provenance/src/main/java/org/apache/rya/rdftriplestore/provenance/rdf/RDFProvenanceModel.java @@ -0,0 +1,33 @@ +package mvm.rya.rdftriplestore.provenance.rdf; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +import java.util.List; + +import org.openrdf.model.Statement; + + +public interface RDFProvenanceModel { + + List<Statement> getStatementsForQuery(String query, String user, String queryType); + + +}
