Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/jena
Conflicts:
jena-security/src/main/java/org/apache/jena/security/query/rewriter/OpRewriter.java
jena-security/src/test/java/org/apache/jena/security/query/QueryEngineTest.java
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/51f169e1
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/51f169e1
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/51f169e1
Branch: refs/heads/master
Commit: 51f169e1eaa2da0094993dc44c20e811e570f252
Parents: 5a7138c ba660da
Author: Claude Warren <[email protected]>
Authored: Sat Jan 24 11:33:32 2015 +0000
Committer: Claude Warren <[email protected]>
Committed: Sat Jan 24 11:33:32 2015 +0000
----------------------------------------------------------------------
.../jena/sparql/core/DatasetGraphCaching.java | 93 ++--
.../com/hp/hpl/jena/sparql/expr/NodeValue.java | 5 +-
.../sparql/expr/aggregate/AggAvgDistinct.java | 12 +-
.../sparql/expr/nodevalue/NodeFunctions.java | 15 +-
.../org/apache/jena/atlas/lib/MultiMap.java | 21 +-
.../apache/jena/riot/tokens/TokenizerText.java | 18 +-
.../hpl/jena/sparql/expr/TestNodeFunctions.java | 28 +
.../apache/jena/riot/tokens/TestTokenizer.java | 91 ++--
.../java/com/hp/hpl/jena/graph/GraphUtil.java | 129 ++---
.../assembler/test/TestFileModelAssembler.java | 52 +-
.../hp/hpl/jena/rdfxml/xmlinput/MoreTests.java | 2 +-
.../main/webapp/js/app/models/fuseki-server.js | 2 +-
jena-fuseki2/jena-fuseki-dist/fuseki-server | 17 +-
jena-fuseki2/jena-fuseki-dist/fuseki-server.bat | 9 +
jena-fuseki2/pom.xml | 2 +-
.../java/org/apache/jena/iri/IRIFactoryI.java | 152 +++---
.../apache/jena/iri/impl/AbsIRIFactoryImpl.java | 26 +-
.../test/java/org/apache/jena/iri/TS_IRI.java | 2 +
.../org/apache/jena/iri/TestIRIFactory.java | 73 +++
jena-parent/pom.xml | 9 +-
jena-security/pom.xml | 14 +-
.../jena/security/AssemblerConstants.java | 18 +
.../apache/jena/security/SecurityEvaluator.java | 517 +++++++++---------
.../security/SecurityEvaluatorAssembler.java | 2 +-
.../security/graph/SecuredCapabilities.java | 18 +-
.../graph/SecuredGraphEventManager.java | 533 +++++++------------
.../security/impl/CachedSecurityEvaluator.java | 120 ++---
.../apache/jena/security/impl/ItemHolder.java | 2 +-
.../jena/security/impl/SecuredItemImpl.java | 22 +-
.../security/model/impl/SecuredRDFListImpl.java | 2 +-
.../security/model/impl/SecuredRSIterator.java | 2 +-
.../jena/security/query/SecuredQueryEngine.java | 14 +-
.../security/query/rewriter/OpRewriter.java | 5 +-
.../query/rewriter/SecuredFunction.java | 3 +-
.../security/utils/PermStatementFilter.java | 9 +-
.../jena/security/utils/PermTripleFilter.java | 9 +-
.../jena/security/utils/RDFListSecFilter.java | 9 +-
.../jena/security/MockSecurityEvaluator.java | 16 +-
.../security/ModelBasedSecurityEvaluator.java | 76 +++
.../jena/security/SecuredAssemblerTest.java | 15 +-
.../jena/security/StaticSecurityEvaluator.java | 78 +++
.../graph/CachedSecurityEvaluatorTest.java | 45 ++
.../security/graph/BulkUpdateHandlerTest.java | 57 +-
.../graph/CrossIDGraphEventManagerTest.java | 78 +++
.../security/graph/GraphEventManagerTest.java | 127 +----
.../security/graph/RecordingGraphListener.java | 124 +++++
.../graph/SecuredPrefixMappingTest.java | 68 +--
.../security/model/SecuredModelDetailTest.java | 20 +-
.../apache/jena/security/query/DataSetTest.java | 8 +-
.../jena/security/query/QueryEngineTest.java | 101 ++--
.../jena/security/SecuredAssemblerTest.ttl | 25 +-
.../hp/hpl/jena/tdb/store/DatasetGraphTDB.java | 13 +-
jena-text/ReleaseNotes.txt | 8 +
jena-text/src/main/java/jena/textindexer.java | 4 +-
.../jena/query/text/DatasetGraphText.java | 136 +++--
.../jena/query/text/TextDatasetFactory.java | 29 +-
.../query/text/TextDocProducerEntities.java | 13 +-
.../jena/query/text/TextDocProducerTriples.java | 22 +-
.../org/apache/jena/query/text/TextIndex.java | 20 +-
.../apache/jena/query/text/TextIndexLucene.java | 123 +++--
.../apache/jena/query/text/TextIndexSolr.java | 47 +-
.../text/assembler/TextDatasetAssembler.java | 2 +-
.../AbstractTestDatasetWithGraphTextIndex.java | 24 +-
...ractTestDatasetWithLuceneGraphTextIndex.java | 22 +-
.../AbstractTestDatasetWithLuceneTextIndex.java | 103 ----
.../text/AbstractTestDatasetWithTextIndex.java | 6 +-
.../AbstractTestDatasetWithTextIndexBase.java | 10 +-
.../org/apache/jena/query/text/TS_Text.java | 2 +-
.../TestDatasetWithEmbeddedSolrTextIndex.java | 15 +-
.../text/TestDatasetWithKeywordAnalyzer.java | 53 +-
...TestDatasetWithLowerCaseKeywordAnalyzer.java | 19 +-
.../TestDatasetWithLuceneGraphTextIndex.java | 5 +-
.../text/TestDatasetWithLuceneTextIndex.java | 100 +++-
.../text/TestDatasetWithSimpleAnalyzer.java | 45 +-
.../text/TestDatasetWithStandardAnalyzer.java | 45 +-
.../text/TestLuceneWithMultipleThreads.java | 252 +++++++++
...BeforeWriteOnDatasetWithLuceneTextIndex.java | 49 --
.../assembler/AbstractTestTextAssembler.java | 70 ++-
.../assembler/TestTextDatasetAssembler.java | 4 +-
.../assembler/TestTextIndexLuceneAssembler.java | 52 +-
80 files changed, 2470 insertions(+), 1718 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/51f169e1/jena-security/src/main/java/org/apache/jena/security/query/rewriter/OpRewriter.java
----------------------------------------------------------------------
diff --cc
jena-security/src/main/java/org/apache/jena/security/query/rewriter/OpRewriter.java
index 91b5987,263c742..5955d07
---
a/jena-security/src/main/java/org/apache/jena/security/query/rewriter/OpRewriter.java
+++
b/jena-security/src/main/java/org/apache/jena/security/query/rewriter/OpRewriter.java
@@@ -243,8 -242,8 +243,9 @@@ public class OpRewriter implements OpVi
@Override
public void visit( final OpBGP opBGP )
{
+ if (LOG.isDebugEnabled()) { LOG.debug( "Starting visiting
OpBGP"); }
- if (!securityEvaluator.evaluate(Action.Read, graphIRI))
+ Object principal = securityEvaluator.getPrincipal();
+ if (!securityEvaluator.evaluate(principal, Action.Read,
graphIRI))
{
if (silentFail)
{
http://git-wip-us.apache.org/repos/asf/jena/blob/51f169e1/jena-security/src/test/java/org/apache/jena/security/query/DataSetTest.java
----------------------------------------------------------------------
diff --cc
jena-security/src/test/java/org/apache/jena/security/query/DataSetTest.java
index 4cb30aa,0000000..51f3080
mode 100644,000000..100644
---
a/jena-security/src/test/java/org/apache/jena/security/query/DataSetTest.java
+++
b/jena-security/src/test/java/org/apache/jena/security/query/DataSetTest.java
@@@ -1,250 -1,0 +1,250 @@@
+/*
+ * 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.security.query;
+
+import org.apache.jena.security.Factory;
+import org.apache.jena.security.MockSecurityEvaluator;
+import org.apache.jena.security.SecurityEvaluator.SecNode.Type;
+import org.apache.jena.security.model.SecuredModel;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.hp.hpl.jena.query.Dataset;
+import com.hp.hpl.jena.query.DatasetFactory;
+import com.hp.hpl.jena.query.QueryExecution;
+import com.hp.hpl.jena.query.QueryExecutionFactory;
+import com.hp.hpl.jena.query.QuerySolution;
+import com.hp.hpl.jena.query.ResultSet;
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.sparql.core.DatasetGraph;
+import com.hp.hpl.jena.tdb.TDB;
+import com.hp.hpl.jena.tdb.TDBFactory;
+
+public class DataSetTest {
+ private Dataset dataset;
+ private Model baseModel;
+ private MockSecurityEvaluator eval;
+ private SecuredModel dftModel;
+
+ @BeforeClass
+ public static void setupFactory()
+ {
+ SecuredQueryEngineFactory.register();
+ }
+
+ @AfterClass
+ public static void teardownFactory()
+ {
+ SecuredQueryEngineFactory.unregister();
+ }
+
+
+ public void setup() {
+
+ DatasetGraph dsg = TDBFactory.createDatasetGraph() ;
+
+
+ dsg.getContext().set(TDB.symUnionDefaultGraph, true) ;
+ Dataset myDataset = DatasetFactory.create(dsg) ;
+
+// DatasetGraph dsg = DatasetGraphFactory.createMem() ;
+//
+// Dataset myDataset = TDBFactory.createDataset();
+ baseModel = myDataset.getNamedModel(
"http://example.com/baseModel");
+ //baseModel = myDataset.getDefaultModel();
+ baseModel = QueryEngineTest.populateModel( baseModel );
+
+ dftModel = Factory.getInstance(eval,
+ "http://example.com/securedModel", baseModel);
+
+ dataset = DatasetFactory.createMem() ;
+ dataset.setDefaultModel(dftModel) ;
+
+// // dataset.addNamedModel( dftModel.getModelIRI(), dftModel);
+
+
+
+ }
+
+ @Test
+ public void testOpenQueryType()
+ {
+ eval = new MockSecurityEvaluator(true, true,
+ true, true, true, true);
+
+ setup();
+
+ try
+ {
+ final String query = "prefix fn:
<http://www.w3.org/2005/xpath-functions#> "
+ + " SELECT ?foo ?bar WHERE "
+ + " { ?foo a <http://example.com/class>
; "
+ + "?bar [] ."
+ + " } ";
+ final QueryExecution qexec =
QueryExecutionFactory.create(query,
+ dataset);
+ try
+ {
+ final ResultSet results = qexec.execSelect();
+ int count = 0;
+ for (; results.hasNext();)
+ {
+ count++;
+ final QuerySolution soln =
results.nextSolution();
+ }
+ Assert.assertEquals(8, count);
+ }
+ finally
+ {
+ qexec.close();
+ }
+ }
+ finally
+ {
+ dataset.close();
+ }
+ }
+
+ @Test
+ public void testRestrictedQueryType()
+ {
+ eval = new MockSecurityEvaluator(true, true,
+ true, true, true, true) {
+
+ @Override
- public boolean evaluate( final Action action,
++ public boolean evaluate( final Object principal, final
Action action,
+ final SecNode graphIRI, final SecTriple
triple )
+ {
+ if (triple.getSubject().equals(
+ new SecNode(Type.URI,
"http://example.com/resource/1")))
+ {
+ return false;
+ }
- return super.evaluate(action, graphIRI, triple);
++ return super.evaluate(principal, action,
graphIRI, triple);
+ }
+ };
+
+ setup();
+
+ try
+ {
+ final String query = "prefix fn:
<http://www.w3.org/2005/xpath-functions#> "
+ + " SELECT ?foo ?bar WHERE "
+ + " { ?foo a <http://example.com/class>
; "
+ + "?bar [] ."
+ + " } ";
+ final QueryExecution qexec =
QueryExecutionFactory.create(query,
+ dataset);
+ try
+ {
+ final ResultSet results = qexec.execSelect();
+ int count = 0;
+ for (; results.hasNext();)
+ {
+ count++;
+ results.nextSolution();
+ }
+ Assert.assertEquals(4, count);
+ }
+ finally
+ {
+ qexec.close();
+ }
+ }
+ finally
+ {
+ dataset.close();
+ }
+ }
+
+ @Test
+ public void testSelectAllType()
+ {
+ eval = new MockSecurityEvaluator(true, true,
+ true, true, true, true) {
+
+ @Override
- public boolean evaluate( final Action action,
++ public boolean evaluate( final Object principal, final
Action action,
+ final SecNode graphIRI, final SecTriple
triple )
+ {
+ if (triple.getSubject().equals(
+ new SecNode(Type.URI,
"http://example.com/resource/1")))
+ {
+ return false;
+ }
- return super.evaluate(action, graphIRI, triple);
++ return super.evaluate(principal, action,
graphIRI, triple);
+ }
+ };
+
+ setup();
+
+ try
+ {
+ String query = "SELECT ?s ?p ?o WHERE "
+ + " { ?s ?p ?o } ";
+ QueryExecution qexec =
QueryExecutionFactory.create(query,
+ dataset);
+ try
+ {
+ final ResultSet results = qexec.execSelect();
+ int count = 0;
+ for (; results.hasNext();)
+ {
+ count++;
+ final QuerySolution soln =
results.nextSolution();
+ System.out.println( soln );
+ }
+ // 2x 3 values + type triple
+ Assert.assertEquals(8, count);
+ }
+ finally
+ {
+ qexec.close();
+ }
+
+ query = "SELECT ?g ?s ?p ?o WHERE "
+ + " { GRAPH ?g {?s ?p ?o } }";
+ qexec = QueryExecutionFactory.create(query,
+ dataset);
+ try
+ {
+ final ResultSet results = qexec.execSelect();
+ int count = 0;
+ for (; results.hasNext();)
+ {
+ count++;
+ final QuerySolution soln =
results.nextSolution();
+ System.out.println( soln );
+ }
+ // 2x 3 values + type triple
+ // all are in the base graph so no named graphs
+ Assert.assertEquals(0, count);
+ }
+ finally
+ {
+ qexec.close();
+ }
+ }
+ finally
+ {
+ dataset.close();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/51f169e1/jena-security/src/test/java/org/apache/jena/security/query/QueryEngineTest.java
----------------------------------------------------------------------
diff --cc
jena-security/src/test/java/org/apache/jena/security/query/QueryEngineTest.java
index b332bc7,3b078ac..a27e4f6
---
a/jena-security/src/test/java/org/apache/jena/security/query/QueryEngineTest.java
+++
b/jena-security/src/test/java/org/apache/jena/security/query/QueryEngineTest.java
@@@ -63,9 -57,9 +57,10 @@@ public class QueryEngineTest
}
- @Before
- public void setUp() {
- baseModel = ModelFactory.createDefaultModel();
++
+ public static Model populateModel(Model baseModel)
+ {
-
++
Resource r = ResourceFactory
.createResource("http://example.com/resource/1");
final Resource o = ResourceFactory
@@@ -208,75 -177,4 +185,75 @@@
}
}
+ @Test
+ public void testSelectAllType()
+ {
+ final SecurityEvaluator eval = new MockSecurityEvaluator(true,
true,
+ true, true, true, true) {
+
+ @Override
- public boolean evaluate( final Action action,
++ public boolean evaluate(Object principal, final Action
action,
+ final SecNode graphIRI, final SecTriple
triple )
+ {
+ if (triple.getSubject().equals(
+ new SecNode(Type.URI,
"http://example.com/resource/1")))
+ {
+ return false;
+ }
- return super.evaluate(action, graphIRI, triple);
++ return super.evaluate(principal, action,
graphIRI, triple);
+ }
+ };
+ final SecuredModel model = Factory.getInstance(eval,
+ "http://example.com/securedModel", baseModel);
+ try
+ {
+ String query = "SELECT ?s ?p ?o WHERE "
+ + " { ?s ?p ?o } ";
+ QueryExecution qexec =
QueryExecutionFactory.create(query,
+ model);
+ try
+ {
+ final ResultSet results = qexec.execSelect();
+ int count = 0;
+ for (; results.hasNext();)
+ {
+ count++;
+ final QuerySolution soln =
results.nextSolution();
+ System.out.println( soln );
+ }
+ // 2x 3 values + type triple
+ Assert.assertEquals(8, count);
+ }
+ finally
+ {
+ qexec.close();
+ }
+
+ query = "SELECT ?s ?p ?o WHERE "
+ + " { GRAPH ?g {?s ?p ?o } }";
+ qexec = QueryExecutionFactory.create(query,
+ model);
+ try
+ {
+ final ResultSet results = qexec.execSelect();
+ int count = 0;
+ for (; results.hasNext();)
+ {
+ count++;
+ final QuerySolution soln =
results.nextSolution();
+ System.out.println( soln );
+ }
+ // 2x 3 values + type triple
+ Assert.assertEquals(8, count);
+ }
+ finally
+ {
+ qexec.close();
+ }
+ }
+ finally
+ {
+ model.close();
+ }
+ }
}