Refactor code to enable local access to JSON stats building.
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
index b44e678..fc95331 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
@@ -30,6 +30,7 @@
 import javax.servlet.http.HttpServletResponse ;
 
 import org.apache.jena.atlas.json.JsonBuilder ;
+import org.apache.jena.atlas.json.JsonObject ;
 import org.apache.jena.atlas.json.JsonValue ;
 import org.apache.jena.fuseki.server.* ;
 import org.apache.jena.fuseki.servlets.HttpAction ;
@@ -44,21 +45,20 @@
     @Override
     protected JsonValue execGetContainer(HttpAction action) { 
         action.log.info(format("[%d] GET stats all", action.id)) ;
-        JsonBuilder builder = new JsonBuilder() ;
-        builder.startObject("top") ;
-        
-        builder.key(JsonConst.datasets) ;
-        builder.startObject("datasets") ;
-        for ( String ds : action.getDataAccessPointRegistry().keys() ) {
-            DataAccessPoint access = action.getDataAccessPointRegistry().get(ds) ;
-            statsDataset(builder, access) ; 
-        }
-        builder.finishObject("datasets") ;
-        
-        builder.finishObject("top") ;
-        return builder.build() ;
+        return generateStats(action.getDataAccessPointRegistry()) ;
     }
 
+    public static JsonObject generateStats(DataAccessPointRegistry registry) {
+        JsonBuilder builder = new JsonBuilder() ;
+        builder.startObject("top") ;
+        builder.key(JsonConst.datasets) ;
+        builder.startObject("datasets") ;
+        registry.forEach((name, access)->statsDataset(builder, access));
+        builder.finishObject("datasets") ;
+        builder.finishObject("top") ;
+        return builder.build().getAsObject() ;
+    }
+    
     @Override
     protected JsonValue execGetItem(HttpAction action) {
         action.log.info(format("[%d] GET stats dataset %s", action.id, action.getDatasetName())) ;
@@ -75,13 +75,19 @@
         builder.finishObject("TOP") ;
         return builder.build() ;
     }
-
+    
+    public static JsonObject generateStats(DataAccessPoint access) {
+        JsonBuilder builder = new JsonBuilder() ;
+        statsDataset(builder, access) ;
+        return builder.build().getAsObject() ;
+    }
+    
     private void statsDataset(JsonBuilder builder, String name, DataAccessPointRegistry registry) {
         DataAccessPoint access = registry.get(name) ;
         statsDataset(builder, access);
     }
     
-    private void statsDataset(JsonBuilder builder, DataAccessPoint access) {
+    private static void statsDataset(JsonBuilder builder, DataAccessPoint access) {
         // Object started
         builder.key(access.getName()) ;
         DataService dSrv = access.getDataService() ;
@@ -91,29 +97,13 @@
         builder.key(CounterName.RequestsGood.name()).value(dSrv.getCounters().value(CounterName.RequestsGood)) ;
         builder.key(CounterName.RequestsBad.name()).value(dSrv.getCounters().value(CounterName.RequestsBad)) ;
         
-        
-        // Build the operation -> endpoint list map.
-        
-//      MultiMap<OperationName, Endpoint> map = MultiMap.createMapList() ;
-//      for ( OperationName operName : dSrv.getOperations() ) {
-//          List<Endpoint> endpoints = access.getDataService().getOperation(operName) ;
-//          for ( Endpoint endpoint : endpoints )
-//              map.put(operName, endpoint) ; 
-//      }
-        
-        
         builder.key(JsonConst.endpoints).startObject("endpoints") ;
         
         for ( OperationName operName : dSrv.getOperations() ) {
             List<Endpoint> endpoints = access.getDataService().getOperation(operName) ;
-//            System.err.println(operName+" : "+endpoints.size()) ;
-//            for ( Endpoint endpoint : endpoints )
-//                System.err.println("  "+endpoint.getEndpoint()) ;
             
             for ( Endpoint endpoint : endpoints ) {
-                
-                // Endpoint names are unique but not services.
-                
+                // Endpoint names are unique for a given service.
                 builder.key(endpoint.getEndpoint()) ;
                 builder.startObject() ;
                 
@@ -126,10 +116,9 @@
         }
         builder.finishObject("endpoints") ;
         builder.finishObject("counters") ;
-
     }
 
-    private void operationCounters(JsonBuilder builder, Endpoint operation) {
+    private static void operationCounters(JsonBuilder builder, Endpoint operation) {
         for (CounterName cn : operation.getCounters().counters()) {
             Counter c = operation.getCounters().get(cn) ;
             builder.key(cn.name()).value(c.value()) ;