blob: 69295427e417d6af6e114d8532a9746daff42fd8 [file] [log] [blame]
/*
* 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.fuseki.access;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.function.Predicate;
import org.apache.jena.atlas.lib.tuple.Tuple;
import org.apache.jena.sparql.core.DatasetGraph;
import org.apache.jena.sparql.util.Symbol;
/**
* A graph filter for TDB1 and TDB2 (by generic type).
* <p>
* This filter takes a collection of graph names and returns true from
* {@link #test(Tuple)} if the tuple graph slot is in the collection of graph names or
* matchDefaultGraph is true. It can be used as an "allow" filter; it can be negated to
* become a "deny" filter.
*
* @see GraphFilterTDB1#graphFilter
* @see GraphFilterTDB2#graphFilter
*/
public abstract class GraphFilter<X> implements Predicate<Tuple<X>> {
private final Set<X> graphs;
private final boolean matchDefaultGraph;
// // This makes the GraphFilter stateful.
// private X slot = null;
protected GraphFilter(Collection<X> matches, boolean matchDefaultGraph) {
this.graphs = new HashSet<X>(matches);
this.matchDefaultGraph = matchDefaultGraph;
}
public static Symbol getContextKey(DatasetGraph dsg) {
dsg = DatasetGraphAccessControl.removeWrapper(dsg);
if ( org.apache.jena.tdb.sys.TDBInternal.isTDB1(dsg) )
return org.apache.jena.tdb.sys.SystemTDB.symTupleFilter;
if ( org.apache.jena.tdb2.sys.TDBInternal.isTDB2(dsg) )
return org.apache.jena.tdb2.sys.SystemTDB.symTupleFilter;
throw new IllegalArgumentException("Not a TDB database");
}
public abstract Symbol getContextKey();
@Override
public boolean test(Tuple<X> t) {
if ( t.len() == 3 ) {
// Default graph.
return matchDefaultGraph;
}
X g = t.get(0);
boolean b = perGraphTest(g);
return b;
}
// The per graph test.
private boolean perGraphTest(X g) {
return graphs.contains(g);
}
}