/**
* 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 org.apache.jena.sparql.core;
import static org.apache.jena.sparql.core.QuadAction.ADD ;
import static org.apache.jena.sparql.core.QuadAction.DELETE ;
import static org.apache.jena.sparql.core.QuadAction.NO_ADD ;
import static org.apache.jena.sparql.core.QuadAction.NO_DELETE ;
import java.util.List ;
import org.apache.jena.atlas.junit.BaseTest ;
import org.apache.jena.atlas.lib.Pair ;
import org.apache.jena.sparql.sse.SSE ;
import org.junit.Test ;
public class TestDatasetMonitor extends BaseTest
{
static Quad quad1 = SSE.parseQuad("(_ <s> <p> 1)") ;
static Quad quad2 = SSE.parseQuad("(<g> <s> <p> 2)") ;
static Quad quad3 = SSE.parseQuad("(<g> <s> <p> 3)") ;
static Quad quad4 = SSE.parseQuad("(<g> <s> <p> 4)") ;
@Test public void countChanges_01() {
DatasetGraph dsgBase = DatasetGraphFactory.create() ;
DatasetChangesCounter dsgChanges = new DatasetChangesCounter() ;
DatasetGraph dsg = new DatasetGraphMonitor(dsgBase, dsgChanges) ;
check(dsgChanges, 0, 0, 0, 0) ;
dsg.add(quad1) ;
check(dsgChanges, 1, 0, 0, 0) ;
}
@Test public void countChanges_02() {
DatasetGraph dsgBase = DatasetGraphFactory.create() ;
DatasetChangesCounter dsgChanges = new DatasetChangesCounter() ;
DatasetGraph dsg = new DatasetGraphMonitor(dsgBase, dsgChanges) ;
check(dsgChanges, 0, 0, 0, 0) ;
dsg.add(quad1) ;
dsg.delete(quad1) ;
check(dsgChanges, 1, 1, 0, 0) ;
}
@Test public void countChanges_03() {
DatasetGraph dsgBase = DatasetGraphFactory.create() ;
DatasetChangesCounter dsgChanges = new DatasetChangesCounter() ;
DatasetGraph dsg = new DatasetGraphMonitor(dsgBase, dsgChanges) ;
check(dsgChanges, 0, 0, 0, 0) ;
dsg.add(quad1) ;
dsg.add(quad1) ;
dsg.delete(quad1) ;
dsg.delete(quad1) ;
check(dsgChanges, 1, 1, 1, 1) ;
}
@Test public void countChanges_04() {
DatasetGraph dsgBase = DatasetGraphFactory.create() ;
DatasetChangesCounter dsgChanges = new DatasetChangesCounter() ;
DatasetGraph dsg = new DatasetGraphMonitor(dsgBase, dsgChanges) ;
check(dsgChanges, 0, 0, 0, 0) ;
dsg.add(quad1) ;
dsg.delete(quad1) ;
dsg.add(quad1) ;
dsg.delete(quad1) ;
check(dsgChanges, 2, 2, 0, 0) ;
}
@Test public void captureChanges_01() {
DatasetGraph dsgBase = DatasetGraphFactory.create() ;
DatasetChangesCapture dsgCapture = new DatasetChangesCapture() ;
DatasetGraph dsg = new DatasetGraphMonitor(dsgBase, dsgCapture) ;
dsg.add(quad1) ;
dsg.delete(quad1) ;
dsg.add(quad2) ;
dsg.add(quad2) ;
List<Pair<QuadAction, Quad>> record = dsgCapture.getActions() ;
// Records only real actions.
assertEquals(3, record.size()) ;
check(record, 0, ADD, quad1) ;
check(record, 1, DELETE, quad1) ;
check(record, 2, ADD, quad2) ;
}
@Test public void captureChanges_02() {
DatasetGraph dsgBase = DatasetGraphFactory.create() ;
DatasetChangesCapture dsgCapture = new DatasetChangesCapture(true) ;
DatasetGraph dsg = new DatasetGraphMonitor(dsgBase, dsgCapture) ;
dsg.add(quad1) ;
dsg.delete(quad1) ;
dsg.delete(quad1) ;
dsg.add(quad2) ;
dsg.add(quad2) ;
List<Pair<QuadAction, Quad>> record = dsgCapture.getActions() ;
assertEquals(5, record.size()) ;
check(record, 0, ADD, quad1) ;
check(record, 1, DELETE, quad1) ;
check(record, 2, NO_DELETE, quad1) ;
check(record, 3, ADD, quad2) ;
check(record, 4, NO_ADD, quad2) ;
}
private static void check(DatasetChangesCounter changes, long adds, long deletes, long noAdds, long noDeletes)
{
assertEquals("Adds", adds, changes.countAdd) ;
assertEquals("Deletes", deletes, changes.countDelete) ;
assertEquals("NoAdds", noAdds, changes.countNoAdd) ;
assertEquals("NoDeletes", noDeletes, changes.countNoDelete) ;
}
private static void check(List<Pair<QuadAction, Quad>> record, int indx, QuadAction quadAction, Quad quad)
{
assertTrue("Index "+indx+" out of range [0,"+record.size()+")", 0 <= indx && indx < record.size() ) ;
Pair<QuadAction, Quad> pair = record.get(indx) ;
assertEquals(quadAction, pair.getLeft()) ;
assertEquals(quad, pair.getRight()) ;
}
}