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();
 +              }
 +      }
  }

Reply via email to