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 2013/12/21 16:28:46 UTC

svn commit: r1552916 - in /jena/branches/jena-fuseki-new-ui: ./ pages/admin/ pages/css/ src/main/java/org/apache/jena/fuseki/ src/main/java/org/apache/jena/fuseki/mgt/ src/main/java/org/apache/jena/fuseki/server/ src/main/java/org/apache/jena/fuseki/se...

Author: andy
Date: Sat Dec 21 15:28:46 2013
New Revision: 1552916

URL: http://svn.apache.org/r1552916
Log:
UI : create datasets by form using server side templating.

Added:
    jena/branches/jena-fuseki-new-ui/templates/
    jena/branches/jena-fuseki-new-ui/templates/config-mem
    jena/branches/jena-fuseki-new-ui/templates/config-tdb
    jena/branches/jena-fuseki-new-ui/testing/
    jena/branches/jena-fuseki-new-ui/testing/config-ds-1.ttl
Modified:
    jena/branches/jena-fuseki-new-ui/   (props changed)
    jena/branches/jena-fuseki-new-ui/pages/admin/data-management.html
    jena/branches/jena-fuseki-new-ui/pages/css/fui.css
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiLib.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java

Propchange: jena/branches/jena-fuseki-new-ui/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sat Dec 21 15:28:46 2013
@@ -15,4 +15,5 @@ log
 configure
 systems
 datasets
+databases
 system

Modified: jena/branches/jena-fuseki-new-ui/pages/admin/data-management.html
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/pages/admin/data-management.html?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/pages/admin/data-management.html (original)
+++ jena/branches/jena-fuseki-new-ui/pages/admin/data-management.html Sat Dec 21 15:28:46 2013
@@ -57,8 +57,80 @@
       <div class="row">
         <h1>Data management</h1>
       </div>
-    </div>
 
+      <hr/>
+      <p>Focus on one database</p>
+      <ul>
+        <li>Statistics</li>
+        <li>Backup</li>
+        <li>Online/offline</li>
+        <li><em>Delete</em></li>
+      </ul>
+      <hr/>
+
+      <div class="row">
+        <h2>Create database</h2>
+        <small>
+          <p>This is just a quick sketch to get the system working.</p>
+          <p>Some Alternatives:</p>
+          <ul>
+            <li><p>Preset recipes (as below) that the server expands</p></li>
+            <li><p>Have a template area (assembler) in broswer with help to 
+                fill details like</p></li>
+            </ul>
+        </small>
+
+        <form action="/$/datasets" method="post" role="form">
+
+          <div class="form-group">
+            <label for="inputDatabase">Database Name</label>
+            <div>
+              <input type="text" class="form-control" name="dbName" id="dbName" placeholder="Database name">
+            </div>
+          </div>
+
+          <div class="checkbox">
+            <label>
+              <input type="radio" name="dbType" value="mem" checked>
+              In-Memory
+            </label>
+          </div>
+          <div class="checkbox">
+            <label>
+              <input type="radio" name="dbType" value="tdb">
+              Persistent
+            </label>
+          </div>
+          <button type="submit" class="btn btn-default">Create</button>
+        </form>
+
+      </div>
+
+
+      <hr/>
+
+      <!--
+      <div class="row">
+        <h2>Database Statistics</h2>
+      </div>
+
+      <div class="row">
+        <h2>Backup Database</h2>
+      </div>
+
+<p>            <li><p>Have a template area (assembler) in broswer with help to 
+                fill details like</p></li>
+      <div class="row">
+        <h2>Delete Database</h2>
+      </div>
+
+      <hr/>
+      <div class="row">
+        <h2>Change Active/Dormant Status</h2>
+      </div>
+      -->
+
+    </div>
     <script src="../js/lib/jquery-1.10.2.min.js"></script>
     <script src="../js/lib/bootstrap.min.js"></script>
   </body>

Modified: jena/branches/jena-fuseki-new-ui/pages/css/fui.css
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/pages/css/fui.css?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/pages/css/fui.css (original)
+++ jena/branches/jena-fuseki-new-ui/pages/css/fui.css Sat Dec 21 15:28:46 2013
@@ -7,6 +7,15 @@ h1 + p {
   margin-bottom: 20px;
 }
 
+h2 {
+  margin-top: 0;
+  font-size: 16pt;
+}
+
+h2 + p {
+  margin-bottom: 18px;
+}
+
 a#server-status-light {
   display: inline-block;
   margin: 0;

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiLib.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiLib.java?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiLib.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiLib.java Sat Dec 21 15:28:46 2013
@@ -39,6 +39,8 @@ import com.hp.hpl.jena.sparql.core.Quad 
 import com.hp.hpl.jena.sparql.util.Convert ;
 
 public class FusekiLib {
+    // ==> ActionLib
+    
     /** Get the content type of an action or return the default.
      * @param  action
      * @return ContentType

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java Sat Dec 21 15:28:46 2013
@@ -20,8 +20,9 @@ package org.apache.jena.fuseki.mgt;
 
 import static java.lang.String.format ;
 
-import java.io.* ;
-import java.nio.channels.FileChannel ;
+import java.io.IOException ;
+import java.io.InputStream ;
+import java.io.StringReader ;
 import java.util.Iterator ;
 import java.util.Locale ;
 
@@ -65,6 +66,7 @@ import com.hp.hpl.jena.tdb.transaction.D
 import com.hp.hpl.jena.update.UpdateAction ;
 import com.hp.hpl.jena.update.UpdateFactory ;
 import com.hp.hpl.jena.update.UpdateRequest ;
+import com.hp.hpl.jena.util.FileUtils ;
 
 public class ActionDatasets extends ActionCtl {
     // XXX ActionContainerItem
@@ -79,6 +81,13 @@ public class ActionDatasets extends Acti
     static private Property pServiceName = FusekiVocab.pServiceName ;
     static private Property pStatus = FusekiVocab.pStatus ;
 
+    private static final String paramDatasetName    = "dbName" ;
+    private static final String paramDatasetType    = "dbType" ;
+    private static final String tDatabasetTDB       = "tdb" ;
+    private static final String tDatabasetMem       = "mem" ;
+    private static final String templateMemFN = "templates/config-mem" ;
+    private static final String templateTDBFN = "templates/config-tdb" ;
+
     public ActionDatasets() { super() ; }
     
     @Override
@@ -132,8 +141,10 @@ public class ActionDatasets extends Acti
         } catch (IOException ex) { ServletOps.errorOccurred(ex) ; }
     }
     
-    // This does not consult the system database for dormant etc.
+    // ---- GET : return details of dataset or datasets.
+    
     private JsonValue execGetContainer(HttpAction action) { 
+        action.log.info(format("[%d] GET datasets", action.id)) ;
         JsonBuilder builder = new JsonBuilder() ;
         builder.startObject("D") ;
         builder.key("datasets") ;
@@ -153,8 +164,12 @@ public class ActionDatasets extends Acti
         return builder.build() ;
     }
     
-    // POST container -> register new dataset
-    // POST contains/name -> change the state of an existing entry.
+    // XXX Split contained and per-dataset operations into separate servlets? 
+    
+    // ---- POST 
+    
+    // POST /$/datasets/ -- to the container -> register new dataset
+    // POST /$/datasets/name -- change something about an existing dataset
     
     protected void execPost(HttpAction action) {
         if (action.dsRef.name == null )
@@ -163,10 +178,6 @@ public class ActionDatasets extends Acti
             execPostDataset(action) ;
     }
     
-    // An action on a dataset.
-    // XXX extend to backup etc??
-    // XXX Constant (throughout)
-    
     private void execPostDataset(HttpAction action) {
         String name = action.dsRef.name ;
         if ( name == null )
@@ -180,7 +191,7 @@ public class ActionDatasets extends Acti
         if ( s == null || s.isEmpty() )
             ServletOps.errorBadRequest("No state change given") ;
 
-        // setDatasetState is a transaction on the pesistent state of the server. 
+        // setDatasetState is a transaction on the persistent state of the server. 
         if ( s.equalsIgnoreCase("active") ) {
             setDatasetState(name, FusekiVocab.stateActive) ;        
             dsDesc.activate() ;
@@ -192,47 +203,23 @@ public class ActionDatasets extends Acti
         ServletOps.success(action) ;
     }
 
-    // Persistent state change.
-    private void setDatasetState(String name, Resource newState) {
-        boolean committed = false ;
-        system.begin(ReadWrite.WRITE) ;
-        try {
-            String dbName = name ;
-            if ( dbName.startsWith("/") )
-                dbName = dbName.substring(1) ;
-            
-            String update =  StrUtils.strjoinNL
-                (SystemState.PREFIXES,
-                 "DELETE { GRAPH ?g { ?s fu:status ?state } }",
-                 "INSERT { GRAPH ?g { ?s fu:status "+FmtUtils.stringForRDFNode(newState)+" } }",
-                 "WHERE {",
-                 "   GRAPH ?g { ?s fu:name '"+dbName+"' ; ",
-                 "                 fu:status ?state .",
-                 "   }",
-                 "}"
-                 ) ;
-            UpdateRequest req =  UpdateFactory.create(update) ;
-            UpdateAction.execute(req, system);
-            system.commit();
-            committed = true ;
-        } finally { 
-            if ( ! committed ) system.abort() ; 
-            system.end() ; 
-        }
-    }
-    
     private void execPostContainer(HttpAction action) {
+
         String newURI = JenaUUID.generate().asURI() ;
         Node gn = NodeFactory.createURI(newURI) ;
         
-        //action.beginWrite() ;
+        ContentType ct = FusekiLib.getContentType(action) ;
+        
         boolean committed = false ;
         system.begin(ReadWrite.WRITE) ;
         try {
-            Model model = system.getNamedModel(newURI) ;
+            Model model = system.getNamedModel(gn.getURI()) ;
             StreamRDF dest = StreamRDFLib.graph(model.getGraph()) ;
-            bodyAsGraph(action, dest) ;
-            // Find name.  SPARQL?
+
+            if ( WebContent.isHtmlForm(ct) )
+                assemblerFromForm(action, dest) ;
+            else
+                assemblerFromBody(action, dest) ;
             
             Statement stmt = getOne(model, null, pServiceName, null) ;
             if ( stmt == null ) {
@@ -256,6 +243,9 @@ public class ActionDatasets extends Acti
 
             String datasetName = object.getLexicalForm() ;
             String datasetPath = DatasetRef.canocialDatasetPath(datasetName) ;
+            action.log.info(format("[%d] Create database : name = %s", action.id, datasetPath)) ;
+
+            
             if ( DatasetRegistry.get().isRegistered(datasetPath) ) {
                 // And abort.
                 ServletOps.error(HttpSC.CONFLICT_409, "Name already registered "+datasetName) ;
@@ -276,6 +266,40 @@ public class ActionDatasets extends Acti
         }
     }
     
+    private void assemblerFromBody(HttpAction action, StreamRDF dest) {
+        bodyAsGraph(action, dest) ;
+    }
+
+    private void assemblerFromForm(HttpAction action, StreamRDF dest) {
+//        Enumeration<String> en = action.getRequest().getParameterNames() ;
+//        while( en.hasMoreElements() ) {
+//            String pn = en.nextElement() ;
+//            System.out.println(pn) ;
+//        }
+        
+        String dbType = action.getRequest().getParameter(paramDatasetType) ;
+        String dbName = action.getRequest().getParameter(paramDatasetName) ;
+        action.log.info(format("[%d] Create database : name = %s, type = %s", action.id, dbName, dbType )) ;
+        if ( dbType == null || dbName == null )
+            ServletOps.errorBadRequest("Required parameters: dbName and dbType");
+        if ( ! dbType.equals(tDatabasetTDB) && ! dbType.equals(tDatabasetMem) )
+            ServletOps.errorBadRequest(format("dbType can be only '%s' or '%s'", tDatabasetTDB, tDatabasetMem)) ;
+        
+        String template = null ;
+        try {
+            if ( dbType.equals(tDatabasetTDB))
+                template = FileUtils.readWholeFileAsUTF8(templateTDBFN) ;
+            if ( dbType.equals(tDatabasetMem))
+                template = FileUtils.readWholeFileAsUTF8(templateMemFN) ;
+        } catch (IOException ex) { IO.exception(ex); }
+
+        // XXX Be careful.
+        template = template.replaceAll("\\{NAME\\}", dbName) ;
+        RDFDataMgr.parse(dest, new StringReader(template), "http://base/", Lang.TTL) ;
+    }
+
+    // ---- DELETE
+
     protected void execDelete(HttpAction action) {
         // Does not exist?
         String name = action.dsRef.name ;
@@ -283,20 +307,27 @@ public class ActionDatasets extends Acti
             name = "" ;
         action.log.info(format("[%d] DELETE ds=%s", action.id, name)) ;
         if ( action.dsRef.name == null ) {
-            ServletOps.errorBadRequest("DELETE only to the container entries.") ;
+            ServletOps.errorBadRequest("DELETE only applies to a specific dataset.") ;
             return ;
         }
+        
+        if ( ! DatasetRegistry.get().isRegistered(name) )
+            ServletOps.errorNotFound("No such dataset registered: "+name);
 
         systemDSG.begin(ReadWrite.WRITE) ;
         boolean committed =false ;
         try {
+            DatasetRef dsRef = DatasetRegistry.get().get(name) ;
+            // Redo check inside transaction.
+            if ( dsRef == null )
+                ServletOps.errorNotFound("No such dataset registered: "+name);
+                
             // Name to graph
             Quad q = getOne(SystemState.getDatasetGraph(), null, null, pServiceName.asNode(), null) ;
             if ( q == null )
                 ServletOps.errorBadRequest("Failed to find dataset for '"+name+"'");
             Node gn = q.getGraph() ;
-            
-            DatasetRef dsRef = DatasetRegistry.get().get(name) ;
+
             dsRef.gracefulShutdown() ;
             DatasetRegistry.get().remove(name) ;
             // XXX or set to state deleted.
@@ -310,7 +341,38 @@ public class ActionDatasets extends Acti
         }
     }
 
-    private Quad getOne(DatasetGraph dsg, Node g, Node s, Node p, Node o) {
+    // Persistent state change.
+    private void setDatasetState(String name, Resource newState) {
+        boolean committed = false ;
+        system.begin(ReadWrite.WRITE) ;
+        try {
+            String dbName = name ;
+            if ( dbName.startsWith("/") )
+                dbName = dbName.substring(1) ;
+            
+            String update =  StrUtils.strjoinNL
+                (SystemState.PREFIXES,
+                 "DELETE { GRAPH ?g { ?s fu:status ?state } }",
+                 "INSERT { GRAPH ?g { ?s fu:status "+FmtUtils.stringForRDFNode(newState)+" } }",
+                 "WHERE {",
+                 "   GRAPH ?g { ?s fu:name '"+dbName+"' ; ",
+                 "                 fu:status ?state .",
+                 "   }",
+                 "}"
+                 ) ;
+            UpdateRequest req =  UpdateFactory.create(update) ;
+            UpdateAction.execute(req, system);
+            system.commit();
+            committed = true ;
+        } finally { 
+            if ( ! committed ) system.abort() ; 
+            system.end() ; 
+        }
+    }
+    
+    // ---- Auxilary functions
+
+    private static Quad getOne(DatasetGraph dsg, Node g, Node s, Node p, Node o) {
         Iterator<Quad> iter = dsg.findNG(g, s, p, o) ;
         if ( ! iter.hasNext() )
             return null ;
@@ -320,7 +382,7 @@ public class ActionDatasets extends Acti
         return q ;
     }
     
-    private Statement getOne(Model m, Resource s, Property p, RDFNode o) {
+    private static Statement getOne(Model m, Resource s, Property p, RDFNode o) {
         StmtIterator iter = m.listStatements(s, p, o) ;
         if ( ! iter.hasNext() )
             return null ;
@@ -330,18 +392,6 @@ public class ActionDatasets extends Acti
         return stmt ;
     }
     
-    private static void copyFile(File source, File dest) {
-        try {
-            @SuppressWarnings("resource")
-            FileChannel sourceChannel = new FileInputStream(source).getChannel();
-            @SuppressWarnings("resource")
-            FileChannel destChannel = new FileOutputStream(dest).getChannel();
-            destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
-            sourceChannel.close();
-            destChannel.close();
-        } catch (IOException ex) { IO.exception(ex); }
-    }
-    
     // XXX Merge with Upload.incomingData
     
     private static void bodyAsGraph(HttpAction action, StreamRDF dest) {

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/DatasetRef.java Sat Dec 21 15:28:46 2013
@@ -199,8 +199,6 @@ public class DatasetRef implements Datas
         checkShutdown() ;
     }
     
-    // MBean
-    
     @Override
     public String getName()     { return name ; }
 

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java Sat Dec 21 15:28:46 2013
@@ -49,7 +49,7 @@ public class FusekiServletContextListene
 
     @Override
     public void contextInitialized(ServletContextEvent sce) {
-        //confLog.info("contextInitialized");
+        confLog.info("contextInitialized");
         ServletContext cxt = sce.getServletContext() ;
         init() ;
     }

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java Sat Dec 21 15:28:46 2013
@@ -28,6 +28,7 @@ import javax.servlet.ServletException ;
 import javax.servlet.http.HttpServletRequest ;
 import javax.servlet.http.HttpServletResponse ;
 
+
 //import org.apache.jena.atlas.logging.Log ;
 import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.HttpNames ;
@@ -37,6 +38,7 @@ import org.slf4j.Logger ;
 import com.hp.hpl.jena.query.ARQ ;
 import com.hp.hpl.jena.query.QueryCancelledException ;
 import com.hp.hpl.jena.sparql.util.Context ;
+import com.hp.hpl.jena.sparql.util.Utils ;
 
 /** General request lifecycle */
 public abstract class ActionBase extends ServletBase
@@ -50,10 +52,9 @@ public abstract class ActionBase extends
     
     @Override 
     public void init() {
-        log.info("ServletContextName="+getServletContext().getServletContextName()) ;
+        log.info("["+Utils.className(this)+"] ServletContextName="+getServletContext().getServletContextName()) ;
         //super.init() ;
     }
-   
     
     // Common framework for handling HTTP requests
     protected void doCommon(HttpServletRequest request, HttpServletResponse response)

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java Sat Dec 21 15:28:46 2013
@@ -20,8 +20,11 @@ package org.apache.jena.fuseki.servlets;
 
 import javax.servlet.http.HttpServletRequest ;
 
+import org.apache.jena.atlas.web.ContentType ;
+import org.apache.jena.fuseki.FusekiLib ;
 import org.apache.jena.fuseki.server.DatasetRef ;
 import org.apache.jena.fuseki.server.DatasetRegistry ;
+import org.apache.jena.riot.WebContent ;
 
 /** Operations related to servlets */
 
@@ -132,5 +135,11 @@ public class ActionLib {
         return x ;
     }
 
+    public static boolean isHTMLForm(HttpAction action ) {
+        ContentType ct = FusekiLib.getContentType(action) ;
+        String incoming = ct.getContentType() ;
+        return WebContent.contentTypeForm.equalsIgnoreCase(incoming) ;
+    }
+
 }
 

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java Sat Dec 21 15:28:46 2013
@@ -24,6 +24,8 @@ import javax.servlet.* ;
 import javax.servlet.http.HttpServletRequest ;
 import javax.servlet.http.HttpServletResponse ;
 
+import com.hp.hpl.jena.sparql.util.Utils ;
+
 import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.server.DatasetRegistry ;
 import org.slf4j.Logger ;
@@ -37,7 +39,9 @@ public class FusekiFilter implements Fil
     private static SPARQL_UberServlet überServlet = new SPARQL_UberServlet.AccessByConfig() ;
     
     @Override
-    public void init(FilterConfig filterConfig) throws ServletException {}
+    public void init(FilterConfig filterConfig) throws ServletException {
+        log.info("Filter: ["+Utils.className(this)+"] ServletContextName="+filterConfig.getServletContext().getServletContextName()) ;
+    }
 
     @Override
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java Sat Dec 21 15:28:46 2013
@@ -85,13 +85,13 @@ public abstract class SPARQL_Query exten
         String incoming = ct.getContentType() ;
 
         // POST application/sparql-query
-        if (WebContent.contentTypeSPARQLQuery.equals(incoming))
+        if ( WebContent.isHtmlForm(ct) )
         {
             executeBody(action) ;
             return ;
         }
         // POST application/x-www-form-url
-        if (WebContent.contentTypeForm.equals(incoming))
+        if (ActionLib.isHTMLForm(action) )
         {
             executeWithParameter(action) ;
             return ;

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java?rev=1552916&r1=1552915&r2=1552916&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java Sat Dec 21 15:28:46 2013
@@ -33,7 +33,7 @@ public abstract class ServletBase extend
     private static AtomicLong     requestIdAlloc = new AtomicLong(0) ;
 
     protected ServletBase() {}
-
+    
     /**
      * Helper method which gets a unique request ID and appends it as a header
      * to the response

Added: jena/branches/jena-fuseki-new-ui/templates/config-mem
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/templates/config-mem?rev=1552916&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/templates/config-mem (added)
+++ jena/branches/jena-fuseki-new-ui/templates/config-mem Sat Dec 21 15:28:46 2013
@@ -0,0 +1,27 @@
+# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+@prefix :        <#> .
+@prefix fuseki:  <http://jena.apache.org/fuseki#> .
+@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+
+@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
+@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+
+## ---------------------------------------------------------------
+## Updatable in-memory dataset.
+
+<#service1> rdf:type fuseki:Service ;
+    # URI of the dataset -- http://host:port/ds
+    fuseki:name                        "{NAME}" ;
+    fuseki:serviceQuery                "sparql" ;
+    fuseki:serviceQuery                "query" ;
+    fuseki:serviceUpdate               "update" ;
+    fuseki:serviceUpload               "upload" ;
+    fuseki:serviceReadWriteGraphStore  "data" ;     
+    fuseki:serviceReadGraphStore       "get" ;
+    fuseki:dataset                     <#dataset> ;
+    .
+
+## In-memory, initially empty.
+<#dataset> rdf:type ja:RDFDataset .

Added: jena/branches/jena-fuseki-new-ui/templates/config-tdb
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/templates/config-tdb?rev=1552916&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/templates/config-tdb (added)
+++ jena/branches/jena-fuseki-new-ui/templates/config-tdb Sat Dec 21 15:28:46 2013
@@ -0,0 +1,36 @@
+# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
+
+@prefix :        <#> .
+@prefix fuseki:  <http://jena.apache.org/fuseki#> .
+@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
+@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+
+# TDB
+[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
+tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
+tdb:GraphTDB    rdfs:subClassOf  ja:Model .
+
+## ---------------------------------------------------------------
+## Updatable TDB dataset with all services enabled.
+
+<#service_tdb_all> rdf:type fuseki:Service ;
+    rdfs:label                      "TDB {NAME}" ;
+    fuseki:name                     "{NAME}" ;
+    fuseki:serviceQuery             "query" ;
+    fuseki:serviceQuery             "sparql" ;
+    fuseki:serviceUpdate            "update" ;
+    fuseki:serviceUpload            "upload" ;
+    fuseki:serviceReadWriteGraphStore      "data" ;
+    # A separate read-only graph store endpoint:
+    fuseki:serviceReadGraphStore       "get" ;
+    fuseki:dataset           <#tdb_dataset_readwrite> ;
+    
+    .
+
+<#tdb_dataset_readwrite> rdf:type      tdb:DatasetTDB ;
+    tdb:location "databases/{NAME}" ;
+    ja:context [ ja:cxtName "arq:queryTimeout" ;  ja:cxtValue "1000" ] ;
+    tdb:unionDefaultGraph true ;
+    .

Added: jena/branches/jena-fuseki-new-ui/testing/config-ds-1.ttl
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/testing/config-ds-1.ttl?rev=1552916&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/testing/config-ds-1.ttl (added)
+++ jena/branches/jena-fuseki-new-ui/testing/config-ds-1.ttl Sat Dec 21 15:28:46 2013
@@ -0,0 +1,15 @@
+@prefix :        <#> .
+@prefix fuseki:  <http://jena.apache.org/fuseki#> .
+@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+
+@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+
+<#service1> rdf:type fuseki:Service ;
+    # URI of the dataset -- http://host:port/ds
+    fuseki:name                        "test-ds2" ; 
+    fuseki:serviceQuery                "sparql" ;
+    fuseki:dataset                     <#emptyDataset> ;
+    .
+
+<#emptyDataset> rdf:type ja:RDFDataset .