You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2018/11/26 11:10:54 UTC

[1/5] jena git commit: JENA-1638: Ping and stats server endpoints.

Repository: jena
Updated Branches:
  refs/heads/master 613c9d052 -> 7ab5fe941


JENA-1638: Ping and stats server endpoints.

Command line: --withPing and --withStats
Config: "fuseki:pingEP true" "fuseki:statsEP true"


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/2ed29ea3
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/2ed29ea3
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/2ed29ea3

Branch: refs/heads/master
Commit: 2ed29ea3310236f109ccbde1ddb606fe67aca7a0
Parents: 14dff31
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Nov 23 13:54:31 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Nov 23 19:39:30 2018 +0000

----------------------------------------------------------------------
 .../apache/jena/fuseki/server/FusekiVocab.java  |  4 ++++
 .../apache/jena/fuseki/main/FusekiServer.java   | 23 ++++++++++++++++++++
 .../jena/fuseki/main/cmds/FusekiMain.java       | 15 +++++++++++++
 .../jena/fuseki/main/cmds/ServerConfig.java     |  3 +++
 4 files changed, 45 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/2ed29ea3/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiVocab.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiVocab.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiVocab.java
index 371d317..54c1858 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiVocab.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiVocab.java
@@ -39,6 +39,10 @@ public class FusekiVocab
     public static final Property pPasswordFile      = property("passwd");
     public static final Property pRealm             = property("realm");
     public static final Property pAuth              = property("auth");
+    
+    // Server endpoints.
+    public static final Property pServerPing        = property("pingEP");
+    public static final Property pServerStats       = property("statsEP");
 
     public static final Property pServiceQueryEP                = property("serviceQuery");
     public static final Property pServiceUpdateEP               = property("serviceUpdate");

http://git-wip-us.apache.org/repos/asf/jena/blob/2ed29ea3/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
index 794b4b7..82ee30a 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
@@ -50,9 +50,13 @@ import org.apache.jena.fuseki.servlets.FusekiFilter;
 import org.apache.jena.fuseki.servlets.ServiceDispatchRegistry;
 import org.apache.jena.query.Dataset;
 import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.Property;
 import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.Statement;
+import org.apache.jena.shared.JenaException;
 import org.apache.jena.sparql.core.DatasetGraph;
 import org.apache.jena.sparql.core.assembler.AssemblerUtils;
+import org.apache.jena.sparql.util.NotUniqueException;
 import org.apache.jena.sparql.util.graph.GraphUtils;
 import org.eclipse.jetty.security.ConstraintSecurityHandler;
 import org.eclipse.jetty.security.SecurityHandler;
@@ -474,6 +478,10 @@ public class FusekiServer {
         private void processServerLevel(Resource server) {
             if ( server == null )
                 return;
+            
+            withPing  = argBoolean(server, FusekiVocab.pServerPing,  false);
+            withStats = argBoolean(server, FusekiVocab.pServerStats, false);
+            
             // Extract settings - the server building is done in buildSecurityHandler,
             // buildAccessControl.  Dataset and graph level happen in assemblers. 
             String passwdFile = GraphUtils.getAsStringValue(server, FusekiVocab.pPasswordFile);
@@ -489,6 +497,21 @@ public class FusekiServer {
             serverAuth = FusekiBuilder.allowedUsers(server);
         }
 
+        private static boolean argBoolean(Resource r, Property p, boolean dftValue) {
+            try { GraphUtils.atmostOneProperty(r, p); }
+            catch (NotUniqueException ex) {
+                throw new FusekiConfigException(ex.getMessage());
+            }
+            Statement stmt = r.getProperty(p);
+            if ( stmt == null )
+                return dftValue;
+            try { 
+                return stmt.getBoolean();
+            } catch (JenaException ex) {
+                throw new FusekiConfigException("Not a boolean for '"+p+"' : "+stmt.getObject());
+            }
+        }
+        
         /** Process password file, auth and realm settings on the server description. **/
         private void processAuthentication(Resource server) {
             String passwdFile = GraphUtils.getAsStringValue(server, FusekiVocab.pPasswordFile);

http://git-wip-us.apache.org/repos/asf/jena/blob/2ed29ea3/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
index f6ba99b..e871f42 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
@@ -86,6 +86,9 @@ public class FusekiMain extends CmdARQ {
         private static ArgDecl  argGZip         = new ArgDecl(ArgDecl.HasValue, "gzip");
         private static ArgDecl  argBase         = new ArgDecl(ArgDecl.HasValue, "base", "files");
         
+        private static ArgDecl  argWithPing     = new ArgDecl(ArgDecl.NoValue, "withPing", "ping");
+        private static ArgDecl  argWithStats    = new ArgDecl(ArgDecl.NoValue, "withStats", "stats");
+        
         private static ArgDecl  argAuth         = new ArgDecl(ArgDecl.HasValue, "auth");
         
         private static ArgDecl  argHttps        = new ArgDecl(ArgDecl.HasValue, "https");
@@ -164,6 +167,9 @@ public class FusekiMain extends CmdARQ {
             add(argPasswdFile, "--passwd=FILE", "Password file");
             // put in the configuration file
 //            add(argRealm, "--realm=REALM", "Realm name");
+            
+//            add(argWithPing,    "--ping",   "Enable /$/ping");
+//            add(argWithStats,   "--stats",  "Enable /$/stats");
 
             super.modVersion.addClass(Fuseki.class);
         }
@@ -379,6 +385,9 @@ public class FusekiMain extends CmdARQ {
                 serverConfig.authScheme = AuthScheme.scheme(schemeStr); 
             }
             
+            serverConfig.withPing = contains(argWithPing);
+            serverConfig.withStats = contains(argWithStats);
+            
 //            if ( contains(argGZip) ) {
 //                if ( !hasValueOfTrue(argGZip) && !hasValueOfFalse(argGZip) )
 //                    throw new CmdException(argGZip.getNames().get(0) + ": Not understood: " + getValue(argGZip));
@@ -477,6 +486,12 @@ public class FusekiMain extends CmdARQ {
            
             if ( serverConfig.authScheme != null )
                 builder.auth(serverConfig.authScheme);
+
+            if ( serverConfig.withPing )
+                builder.enablePing(true);
+
+            if ( serverConfig.withStats )
+                builder.enableStats(true);
             
             return builder.build();
         }

http://git-wip-us.apache.org/repos/asf/jena/blob/2ed29ea3/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/ServerConfig.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/ServerConfig.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/ServerConfig.java
index 447babf..6eb33e3 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/ServerConfig.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/ServerConfig.java
@@ -35,6 +35,9 @@ class ServerConfig {
     /** Allow update */
     public boolean   allowUpdate      = false;
     
+    public boolean withPing           = false;
+    public boolean withStats          = false;
+    
     // This is set ...
     public DatasetGraph dsg           = null;
     // ... or this.


[2/5] jena git commit: JENA-1638: Add /$/status as synonym for /$/server.

Posted by an...@apache.org.
JENA-1638: Add /$/status as synonym for /$/server.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/14dff31a
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/14dff31a
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/14dff31a

Branch: refs/heads/master
Commit: 14dff31aa92c8691a39778e8f4011ed4ffc9128d
Parents: 5a0843d
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Nov 23 13:53:12 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Nov 23 19:39:30 2018 +0000

----------------------------------------------------------------------
 .../jena/fuseki/mgt/ActionServerStatus.java      | 19 ++++---------------
 .../src/main/webapp/WEB-INF/web.xml              |  6 ++++++
 2 files changed, 10 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/14dff31a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/mgt/ActionServerStatus.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/mgt/ActionServerStatus.java b/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/mgt/ActionServerStatus.java
index d3c0873..2a100e7 100644
--- a/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/mgt/ActionServerStatus.java
+++ b/jena-fuseki2/jena-fuseki-webapp/src/main/java/org/apache/jena/fuseki/mgt/ActionServerStatus.java
@@ -88,22 +88,11 @@ public class ActionServerStatus extends ActionCtl
         if ( builtDateStr == null || builtDateStr.startsWith("${") )
             builtDateStr = "Unknown" ;
 
-//        builder
-//            .key(JsonConst.server)
-//            .startObject()
-//            .key(JsonConst.port).value(port)
-//            .finishObject() ;
-//        builder
-//            .key(JsonConst.admin)
-//            .startObject()
-//            .key(JsonConst.port).value(requestPort)
-//            .finishObject() ;
-
         builder
-            .key(ServerMgtConst.version).value(versionStr)
-            .key(ServerMgtConst.built).value(builtDateStr)
-            .key(ServerMgtConst.startDT).value(Fuseki.serverStartedAt())
-            .key(ServerMgtConst.uptime).value(Fuseki.serverUptimeSeconds())
+            .pair(ServerMgtConst.version,   versionStr)
+            .pair(ServerMgtConst.built,     builtDateStr)
+            .pair(ServerMgtConst.startDT,   Fuseki.serverStartedAt())
+            .pair(ServerMgtConst.uptime,    Fuseki.serverUptimeSeconds())
             ;
             
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/14dff31a/jena-fuseki2/jena-fuseki-webapp/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-webapp/src/main/webapp/WEB-INF/web.xml b/jena-fuseki2/jena-fuseki-webapp/src/main/webapp/WEB-INF/web.xml
index 7de2f92..ae3eb7c 100644
--- a/jena-fuseki2/jena-fuseki-webapp/src/main/webapp/WEB-INF/web.xml
+++ b/jena-fuseki2/jena-fuseki-webapp/src/main/webapp/WEB-INF/web.xml
@@ -231,6 +231,12 @@
     <url-pattern>/$/server</url-pattern>
   </servlet-mapping>
 
+  <!-- Alternative name mentioned in default shiro.ini -->
+  <servlet-mapping>
+    <servlet-name>ServerStatusServlet</servlet-name>
+    <url-pattern>/$/status</url-pattern>
+  </servlet-mapping>
+
   <servlet>
     <servlet-name>ActionDatasets</servlet-name>
     <servlet-class>org.apache.jena.fuseki.mgt.ActionDatasets</servlet-class>


[3/5] jena git commit: JENA-1639: Model.getList and Statement.getList

Posted by an...@apache.org.
JENA-1639: Model.getList and Statement.getList


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/d9143725
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/d9143725
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/d9143725

Branch: refs/heads/master
Commit: d914372597d1d2b0296d8fb01e1d95989f42c670
Parents: 5a0843d
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Nov 25 18:19:34 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Nov 25 18:19:34 2018 +0000

----------------------------------------------------------------------
 .../java/org/apache/jena/rdf/model/Model.java   |   8 +-
 .../org/apache/jena/rdf/model/ModelCon.java     |  34 +++-
 .../org/apache/jena/rdf/model/Statement.java    |   6 +
 .../apache/jena/rdf/model/impl/ModelCom.java    |  12 +-
 .../jena/rdf/model/impl/StatementImpl.java      |   5 +
 .../apache/jena/rdf/model/test/TestList.java    | 171 ++++++-------------
 .../jena/permissions/model/SecuredModel.java    |  28 ++-
 .../model/impl/SecuredModelImpl.java            |  44 +++--
 .../model/impl/SecuredStatementImpl.java        |  18 +-
 9 files changed, 174 insertions(+), 152 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/d9143725/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java b/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
index 924256d..9c97229 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/Model.java
@@ -287,7 +287,6 @@ public interface Model
     */
     public RDFList createList();
 
-
     /**
      * <p>Answer a new list containing the resources from the given iterator, in order.</p>
      * @param members An iterator, each value of which is expected to be an RDFNode
@@ -297,11 +296,14 @@ public interface Model
 
 
     /**
-     * <p>Answer a new list containing the nodes from the given array, in order</p>
+     * <p>Answer a new list containing the nodes from the given eleemnts, in order.
+     * If the list of elements is empty, until the list is made the object or subject in the model, or has an element added, 
+     * it will not appear in the model (e.g. when written out).  
+     *
      * @param members An array of RDF nodes that will be the members of the list
      * @return An RDF-encoded list
      */
-    public RDFList createList( RDFNode[] members );
+    public RDFList createList( RDFNode... members );
 
 
 	/** Add a statement to this model.

http://git-wip-us.apache.org/repos/asf/jena/blob/d9143725/jena-core/src/main/java/org/apache/jena/rdf/model/ModelCon.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/ModelCon.java b/jena-core/src/main/java/org/apache/jena/rdf/model/ModelCon.java
index 0a30710..949d28f 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/ModelCon.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/ModelCon.java
@@ -111,16 +111,17 @@ public interface ModelCon {
  *     It is in effect an unsafe downcast.</p>
  *
  * <p>Subsequent operations on the returned Alt may modify this model.</p>
- * <p>The bag is assumed to already exist in the model.  If it does not,
+ * <p>The Alt is assumed to already exist in the model.  If it does not,
  * <CODE>createAlt</CODE> should be used instead.</p>
  * @return an Alt instance
  * @param r an untyped Resource instance
  
  */ 
     Alt getAlt(Resource r) ;
+    
 /** Return a Seq instance in this model.
  *
- * <p>Subsequent operations on the returned bag may modify this model.</p>
+ * <p>Subsequent operations on the returned sequence may modify this model.</p>
  * <p>The seq is assumed to already exist in the model.  If it does not,
  * <CODE>createSeq</CODE> should be used instead.</p>
  * @return a seq instance
@@ -128,7 +129,7 @@ public interface ModelCon {
  
  */ 
     Seq getSeq(String uri) ;
-
+    
 /** Return a Seq instance based on a given resource.
  *
  * <p> This method enables an application to treat any resource as a Seq.
@@ -136,13 +137,36 @@ public interface ModelCon {
  *
  * <p>Subsequent operations on the returned Seq may modify this model.</p>
  * <p>The Seq is assumed to already exist in the model.  If it does not,
- * <CODE>createAlt</CODE> should be used instead.</p>
- * @return an Alt instance
+ * <CODE>createSeq</CODE> should be used instead.</p>
+ * @return an Seq instance
  * @param r an untyped Resource instance
  
  */ 
     Seq getSeq(Resource r) ;
 
+/** Return a RDF List instance in this model.
+ *
+ * <p>Subsequent operations on the returned list may modify this model.</p>
+ * <p>The list is assumed to already exist in the model.  If it does not,
+ * <CODE>createList</CODE> should be used instead.</p>
+ * @return a list instance
+ * @param uri the URI of the list
+ */ 
+    RDFList getList(String uri) ;
+
+/** Return a RDF List based on a given resource.
+ * 
+ * <p> This method enables an application to treat any resource as a list.
+ *     It is in effect an unsafe downcast.</p>
+ *
+ * <p>Subsequent operations on the returned list may modify this model.</p>
+ * <p>The list is assumed to already exist in the model.  If it does not,
+ * <CODE>createList</CODE> should be used instead.</p>
+ * @return a list instance
+ * @param r the resource of the list
+ */ 
+   RDFList getList(Resource r) ;
+
 /** Create a new anonymous resource with a given type.
  *
  * <p> Subsequent operations on the returned resource may modify this model.

http://git-wip-us.apache.org/repos/asf/jena/blob/d9143725/jena-core/src/main/java/org/apache/jena/rdf/model/Statement.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/Statement.java b/jena-core/src/main/java/org/apache/jena/rdf/model/Statement.java
index 376659d..5568df0 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/Statement.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/Statement.java
@@ -238,6 +238,12 @@ public interface Statement extends FrontsTriple
      */    
     public Seq getSeq() ;
     
+    /** Return the object of the statement as an RDF List.
+     * <p>An exception will be thrown if the object is not an {@link RDFList}.</p>
+     * @return The object of the statement interpreted as a value as RDFList.
+     */
+    public RDFList getList() ;
+    
     /** Return the language of the object of the statement.
      *
      * <p>An exception will be thrown if the object is not a Literal.</p>

http://git-wip-us.apache.org/repos/asf/jena/blob/d9143725/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
index ab90d30..09124e2 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/ModelCom.java
@@ -876,13 +876,13 @@ implements Model, PrefixMapping, Lock
 
     /**
         Answer a (the) new empty list
+        Until this is made the object or subject in the model, it will not appear in a written form.  
         @return An RDF-encoded list of no elements (ie nil)
      */
     @Override
     public RDFList createList() 
     { return getResource( RDF.nil.getURI() ).as( RDFList.class ); }
 
-
     /**
      * <p>Answer a new list containing the resources from the given iterator, in order.</p>
      * @param members An iterator, each value of which is expected to be an RDFNode.
@@ -914,7 +914,7 @@ implements Model, PrefixMapping, Lock
      * @return An RDF-encoded list 
      */
     @Override
-    public RDFList createList( RDFNode[] members ) {
+    public RDFList createList( RDFNode... members ) {
         return createList( Arrays.asList( members ).iterator() );
     }
 
@@ -953,6 +953,14 @@ implements Model, PrefixMapping, Lock
     public Bag getBag( Resource r )  
     { return r.inModel( this ).as( Bag.class ); }
 
+    @Override
+    public RDFList getList( String uri )  
+    { return (RDFList)IteratorFactory.asResource( makeURI( uri ), RDFList.class, this ); }
+    
+    @Override
+    public RDFList getList( Resource r )  
+    { return r.inModel( this ).as( RDFList.class ); }
+    
     static private Node makeURI(String uri) 
     { return uri == null ? NodeFactory.createBlankNode() : NodeFactory.createURI( uri ); }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/d9143725/jena-core/src/main/java/org/apache/jena/rdf/model/impl/StatementImpl.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/StatementImpl.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/StatementImpl.java
index e4a8f44..aa9b45c 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/StatementImpl.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/StatementImpl.java
@@ -129,6 +129,11 @@ public class StatementImpl  extends StatementBase implements Statement {
         return object.as( Seq.class );
     }    
     
+    @Override
+    public RDFList getList() {
+        return object.as( RDFList.class );
+    }
+    
     /** it turns out to be handy to return the new StatementImpl as the result */ 
     @Override protected StatementImpl replace( RDFNode n )  {
     	StatementImpl s = new StatementImpl( subject, predicate, n, model );

http://git-wip-us.apache.org/repos/asf/jena/blob/d9143725/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestList.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestList.java b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestList.java
index 826c3aa..87efc45 100644
--- a/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestList.java
+++ b/jena-core/src/test/java/org/apache/jena/rdf/model/test/TestList.java
@@ -50,8 +50,7 @@ public class TestList extends AbstractModelTestBase
 	public static final String NS = "uri:urn:x-rdf:test#";
 
 	/** Test that an iterator delivers the expected values */
-	protected static void iteratorTest( final Iterator<?> i,
-			final Object[] expected )
+	protected static void iteratorTest( final Iterator<?> i, final Object[] expected )
 	{
 		final Logger logger = LoggerFactory.getLogger(TestList.class);
 		final List<Object> expList = new ArrayList<>();
@@ -757,7 +756,6 @@ public class TestList extends AbstractModelTestBase
 
 	public void testValidity()
 	{
-
 		final Resource root = model.createResource(TestList.NS + "root");
 		final Property p = model.createProperty(TestList.NS, "p");
 
@@ -783,125 +781,58 @@ public class TestList extends AbstractModelTestBase
 
 		model.add(badList, RDF.rest, nil);
 		checkValid("valid5", l1, true);
+	}
+	
+	public void testStmtGetList()
+	{
+	    Resource root = model.createResource(TestList.NS + "root");
+	    Property p = model.createProperty(TestList.NS, "p");
+	    Resource r = model.createResource(TestList.NS + "r");
+	    Resource r1 = model.createResource(TestList.NS + "r1");
+	    Resource r2 = model.createResource(TestList.NS + "r2");
+	    
+	    RDFList list0 = model.createList(r1, r2);
+        model.add(r, p, list0);
+        
+        Resource obj = model.listStatements(r, p, (Resource)null).next().getResource();
+        
+        RDFList list1 = model.getList(obj);
+        
+        boolean b = list0.sameListAs(list1);
+        assertTrue("Different lists: expected: "+list0+" : got: "+list1, b);
+	}
+	
+	public void testModelGetList()
+	{
+	    Resource root = model.createResource(TestList.NS + "root");
+	    Property p = model.createProperty(TestList.NS, "p");
+	    Resource r = model.createResource(TestList.NS + "r");
+	    Resource r1 = model.createResource(TestList.NS + "r1");
+	    Resource r2 = model.createResource(TestList.NS + "r2");
+
+	    RDFList list0 = model.createList(r1, r2);
+	    model.add(r, p, list0);
 
+	    RDFList list1 = model.listStatements(r, p, (Resource)null).next().getList();
+
+	    boolean b = list0.sameListAs(list1);
+	    assertTrue("Different lists: expected: "+list0+" : got: "+list1, b);
 	}
 
-	// public void testListSubclass() {
-	// String NS = "http://example.org/test#";
-	// Resource a = model.createResource( NS + "a" );
-	// Resource b = model.createResource( NS + "b" );
-	//
-	// Resource cell0 = model.createResource();
-	// Resource cell1 = model.createResource();
-	// cell0.addProperty( RDF.first, a );
-	// cell0.addProperty( RDF.rest, cell1 );
-	// cell1.addProperty( RDF.first, b );
-	// cell1.addProperty( RDF.rest, RDF.nil );
-	//
-	// UserList ul = getUserListInstance(cell0);
-	//
-	// assertEquals( "User list length ", 2, ul.size() );
-	// assertEquals( "head of user list ", a, ul.getHead() );
-	//
-	// RDFList l = ul.as( RDFList.class );
-	// assertNotNull( "RDFList facet of user-defined list subclass", l );
-	//
-	// }
-	//
-	// /** A simple extension to RDFList to test user-subclassing of RDFList */
-	// protected static interface UserList extends RDFList {
-	// }
-	//
-	// /** Impl of a simple extension to RDFList to test user-subclassing of
-	// RDFList */
-	// protected static class UserListImpl extends RDFListImpl implements
-	// UserList {
-	// public UserListImpl( Node n, EnhGraph g ) {
-	// super( n, g );
-	// }
-	// }
-	//
-	// public UserList getUserListInstance( Resource r )
-	// {
-	// return new UserListImpl( r.asNode(), (EnhGraph) model );
-	// }
-	//
-	// public void testUserDefinedList() {
-	// BuiltinPersonalities.model.add( UserDefList.class,
-	// UserDefListImpl.factoryForTests );
-	//
-	// String NS = "http://example.org/test#";
-	// Resource a = model.createResource( NS + "a" );
-	// Resource b = model.createResource( NS + "b" );
-	//
-	// Resource empty = model.createResource( UserDefListImpl.NIL.getURI() );
-	// UserDefList ul = empty.as( UserDefList.class );
-	// assertNotNull( "UserList facet of empty list", ul );
-	//
-	// UserDefList ul0 = (UserDefList) ul.cons( b );
-	// ul0 = (UserDefList) ul0.cons( a );
-	// assertEquals( "should be length 2", 2, ul0.size() );
-	// assertTrue( "first statement", model.contains( ul0,
-	// UserDefListImpl.FIRST, a ) );
-	// }
-	//
-	// protected static interface UserDefList extends RDFList {}
-	//
-	// protected static class UserDefListImpl extends RDFListImpl implements
-	// UserDefList {
-	// @SuppressWarnings("hiding") public static final String NS =
-	// "http://example.org/testlist#";
-	// public static final Property FIRST = ResourceFactory.createProperty(
-	// NS+"first" );
-	// public static final Property REST = ResourceFactory.createProperty(
-	// NS+"rest" );
-	// public static final Resource NIL = ResourceFactory.createResource(
-	// NS+"nil" );
-	// public static final Resource LIST = ResourceFactory.createResource(
-	// NS+"List" );
-	//
-	// /**
-	// * A factory for generating UserDefList facets from nodes in enhanced
-	// graphs.
-	// */
-	// public static Implementation factoryForTests = new Implementation() {
-	// @Override public EnhNode wrap( Node n, EnhGraph eg ) {
-	// if (canWrap( n, eg )) {
-	// UserDefListImpl impl = new UserDefListImpl( n, eg );
-	//
-	// Model model = impl.getModel();
-	// impl.m_listFirst = FIRST.inModel( model );
-	// impl.m_listRest = REST.inModel( model );
-	// impl.m_listNil = NIL.inModel( model );
-	// impl.m_listType = LIST.inModel( model );
-	//
-	// return impl;
-	// }
-	// else {
-	// throw new JenaException( "Cannot convert node " + n + " to UserDefList");
-	// }
-	// }
-	//
-	// @Override public boolean canWrap( Node node, EnhGraph eg ) {
-	// Graph g = eg.asGraph();
-	//
-	// return node.equals( NIL.asNode() ) ||
-	// g.contains( node, FIRST.asNode(), Node.ANY ) ||
-	// g.contains( node, REST.asNode(), Node.ANY ) ||
-	// g.contains( node, RDF.type.asNode(), LIST.asNode() );
-	// }
-	// };
-	//
-	// /** This method returns the Java class object that defines which
-	// abstraction facet is presented */
-	// @Override public Class<? extends RDFList> listAbstractionClass() {
-	// return UserDefList.class;
-	// }
-	//
-	// public UserDefListImpl( Node n, EnhGraph g ) {
-	// super( n, g );
-	// }
-	//
-	// }
+	public void testModelGetEmptyList()
+	{
+	    Resource root = model.createResource(TestList.NS + "root");
+	    Property p = model.createProperty(TestList.NS, "p");
+	    Resource r = model.createResource(TestList.NS + "r");
+	    
+	    RDFList list0 = model.createList();
+	    model.add(r, p, list0);
+
+	    RDFList list1 = model.listStatements(r, p, (Resource)null).next().getList();
+
+	    boolean b = list0.sameListAs(list1);
+	    assertTrue("Different lists: expected: "+list0+" : got: "+list1, b);
+	}
 
+	
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d9143725/jena-permissions/src/main/java/org/apache/jena/permissions/model/SecuredModel.java
----------------------------------------------------------------------
diff --git a/jena-permissions/src/main/java/org/apache/jena/permissions/model/SecuredModel.java b/jena-permissions/src/main/java/org/apache/jena/permissions/model/SecuredModel.java
index 43d1685..4a64e71 100644
--- a/jena-permissions/src/main/java/org/apache/jena/permissions/model/SecuredModel.java
+++ b/jena-permissions/src/main/java/org/apache/jena/permissions/model/SecuredModel.java
@@ -563,7 +563,7 @@ public interface SecuredModel extends Model, SecuredPrefixMapping {
 	 *             if user is not authenticated and is required to be.
 	 */
 	@Override
-	public SecuredRDFList createList(final RDFNode[] members)
+	public SecuredRDFList createList(final RDFNode...members)
 			throws AddDeniedException, UpdateDeniedException, AuthenticationRequiredException;
 
 	/**
@@ -1096,6 +1096,32 @@ public interface SecuredModel extends Model, SecuredPrefixMapping {
 	@Override
 	public SecuredSeq getSeq(final String uri) throws ReadDeniedException, AuthenticationRequiredException;
 
+	/** Return a RDF List instance in this model.
+	 *
+	 * <p>Subsequent operations on the returned list may modify this model.</p>
+	 * <p>The list is assumed to already exist in the model.  If it does not,
+	 * <CODE>createList</CODE> should be used instead.</p>
+	 * @return a list instance
+	 * @param uri the URI of the list
+	 */ 
+	@Override
+	public SecuredRDFList getList(String uri) throws ReadDeniedException, AuthenticationRequiredException;
+
+	/** Return a RDF List based on a given resource.
+	 * 
+	 * <p> This method enables an application to treat any resource as a list.
+	 *     It is in effect an unsafe downcast.</p>
+	 *
+	 * <p>Subsequent operations on the returned list may modify this model.</p>
+	 * <p>The list is assumed to already exist in the model.  If it does not,
+	 * <CODE>createList</CODE> should be used instead.</p>
+	 * @return a list instance
+	 * @param r the resource of the list
+	 */
+	@Override
+	public SecuredRDFList getList(Resource r) throws ReadDeniedException, AuthenticationRequiredException;
+
+	
 	/**
 	 * 
 	 * @sec.graph Read

http://git-wip-us.apache.org/repos/asf/jena/blob/d9143725/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
----------------------------------------------------------------------
diff --git a/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java b/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
index 358d928..dcea6dd 100644
--- a/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
+++ b/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredModelImpl.java
@@ -712,7 +712,7 @@ public class SecuredModelImpl extends SecuredItemImpl implements SecuredModel {
 	}
 
 	@Override
-	public SecuredRDFList createList(final RDFNode[] members)
+	public SecuredRDFList createList(RDFNode... members)
 			throws UpdateDeniedException, AddDeniedException, AuthenticationRequiredException {
 		return createList(Arrays.asList(members).iterator());
 	}
@@ -1063,8 +1063,36 @@ public class SecuredModelImpl extends SecuredItemImpl implements SecuredModel {
 		checkRead(new Triple(NodeFactory.createURI(uri), RDF.type.asNode(), RDF.Bag.asNode()));
 		return SecuredBagImpl.getInstance(holder.getSecuredItem(), holder.getBaseItem().getBag(uri));
 	}
+	
+	@Override
+	public SecuredSeq getSeq(final Resource r) throws ReadDeniedException, AuthenticationRequiredException {
+	    checkRead();
+	    checkRead(new Triple(r.asNode(), RDF.type.asNode(), RDF.Seq.asNode()));
+	    return SecuredSeqImpl.getInstance(holder.getSecuredItem(), holder.getBaseItem().getSeq(r));
+	}
 
 	@Override
+	public SecuredSeq getSeq(final String uri) throws ReadDeniedException, AuthenticationRequiredException {
+	    checkRead();
+	    checkRead(new Triple(NodeFactory.createURI(uri), RDF.type.asNode(), RDF.Seq.asNode()));
+	    return SecuredSeqImpl.getInstance(holder.getSecuredItem(), holder.getBaseItem().getSeq(uri));
+	}
+
+
+
+    @Override
+    public SecuredRDFList getList( String uri ) throws ReadDeniedException, AuthenticationRequiredException { 
+        checkRead();
+        return SecuredRDFListImpl.getInstance(holder.getSecuredItem(), holder.getBaseItem().getList(uri));
+    }
+    
+    @Override
+    public SecuredRDFList getList( Resource r ) throws ReadDeniedException, AuthenticationRequiredException { 
+        checkRead();
+        return SecuredRDFListImpl.getInstance(holder.getSecuredItem(), holder.getBaseItem().getList(r));
+    } 
+	
+	@Override
 	public SecuredGraph getGraph() {
 		return graph;
 	}
@@ -1242,20 +1270,6 @@ public class SecuredModelImpl extends SecuredItemImpl implements SecuredModel {
 	}
 
 	@Override
-	public SecuredSeq getSeq(final Resource r) throws ReadDeniedException, AuthenticationRequiredException {
-		checkRead();
-		checkRead(new Triple(r.asNode(), RDF.type.asNode(), RDF.Seq.asNode()));
-		return SecuredSeqImpl.getInstance(holder.getSecuredItem(), holder.getBaseItem().getSeq(r));
-	}
-
-	@Override
-	public SecuredSeq getSeq(final String uri) throws ReadDeniedException, AuthenticationRequiredException {
-		checkRead();
-		checkRead(new Triple(NodeFactory.createURI(uri), RDF.type.asNode(), RDF.Seq.asNode()));
-		return SecuredSeqImpl.getInstance(holder.getSecuredItem(), holder.getBaseItem().getSeq(uri));
-	}
-
-	@Override
 	public RDFWriter getWriter() {
 		return holder.getBaseItem().getWriter();
 	}

http://git-wip-us.apache.org/repos/asf/jena/blob/d9143725/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredStatementImpl.java
----------------------------------------------------------------------
diff --git a/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredStatementImpl.java b/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredStatementImpl.java
index 700a4a7..01165ba 100644
--- a/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredStatementImpl.java
+++ b/jena-permissions/src/main/java/org/apache/jena/permissions/model/impl/SecuredStatementImpl.java
@@ -279,6 +279,18 @@ public class SecuredStatementImpl extends SecuredItemImpl implements
 	}
 
 	@Override
+    public SecuredSeq getSeq() {
+    	return SecuredSeqImpl.getInstance(getModel(), holder.getBaseItem()
+    			.getSeq());
+    }
+	
+    @Override
+    public SecuredRDFList getList() {
+        return SecuredRDFListImpl.getInstance(getModel(), holder.getBaseItem()
+                .getList());
+    }
+
+    @Override
 	public boolean getBoolean() throws ReadDeniedException,
 			AuthenticationRequiredException {
 		checkRead();
@@ -411,12 +423,6 @@ public class SecuredStatementImpl extends SecuredItemImpl implements
 	}
 
 	@Override
-	public SecuredSeq getSeq() {
-		return SecuredSeqImpl.getInstance(getModel(), holder.getBaseItem()
-				.getSeq());
-	}
-
-	@Override
 	public short getShort() throws ReadDeniedException,
 			AuthenticationRequiredException {
 		checkRead();


[4/5] jena git commit: JENA-1638: Merge commit 'refs/pull/496/head' of https://github.com/apache/jena

Posted by an...@apache.org.
JENA-1638: Merge commit 'refs/pull/496/head' of https://github.com/apache/jena

This closes #496.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/1caaa048
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/1caaa048
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/1caaa048

Branch: refs/heads/master
Commit: 1caaa0482a65f0e7bf530214b35456cc213cbbc3
Parents: 613c9d0 2ed29ea
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Nov 26 10:46:19 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Nov 26 10:46:19 2018 +0000

----------------------------------------------------------------------
 .../apache/jena/fuseki/server/FusekiVocab.java  |  4 ++++
 .../apache/jena/fuseki/main/FusekiServer.java   | 23 ++++++++++++++++++++
 .../jena/fuseki/main/cmds/FusekiMain.java       | 15 +++++++++++++
 .../jena/fuseki/main/cmds/ServerConfig.java     |  3 +++
 .../jena/fuseki/mgt/ActionServerStatus.java     | 19 ++++------------
 .../src/main/webapp/WEB-INF/web.xml             |  6 +++++
 6 files changed, 55 insertions(+), 15 deletions(-)
----------------------------------------------------------------------



[5/5] jena git commit: JENA-1639: Merge commit 'refs/pull/498/head' of https://github.com/apache/jena

Posted by an...@apache.org.
JENA-1639: Merge commit 'refs/pull/498/head' of https://github.com/apache/jena

This closes #498.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/7ab5fe94
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/7ab5fe94
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/7ab5fe94

Branch: refs/heads/master
Commit: 7ab5fe9410c26542878536f59a472d494c187de2
Parents: 1caaa04 d914372
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Nov 26 10:47:13 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Nov 26 10:47:13 2018 +0000

----------------------------------------------------------------------
 .../java/org/apache/jena/rdf/model/Model.java   |   8 +-
 .../org/apache/jena/rdf/model/ModelCon.java     |  34 +++-
 .../org/apache/jena/rdf/model/Statement.java    |   6 +
 .../apache/jena/rdf/model/impl/ModelCom.java    |  12 +-
 .../jena/rdf/model/impl/StatementImpl.java      |   5 +
 .../apache/jena/rdf/model/test/TestList.java    | 171 ++++++-------------
 .../jena/permissions/model/SecuredModel.java    |  28 ++-
 .../model/impl/SecuredModelImpl.java            |  44 +++--
 .../model/impl/SecuredStatementImpl.java        |  18 +-
 9 files changed, 174 insertions(+), 152 deletions(-)
----------------------------------------------------------------------