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 2014/03/22 11:39:13 UTC

svn commit: r1580186 - in /jena/branches/jena-fuseki-new-ui: src-dev/dev/ src/main/java/org/apache/jena/fuseki/ src/main/java/org/apache/jena/fuseki/build/ src/main/java/org/apache/jena/fuseki/mgt/ src/main/java/org/apache/jena/fuseki/server/ src/test/...

Author: andy
Date: Sat Mar 22 10:39:13 2014
New Revision: 1580186

URL: http://svn.apache.org/r1580186
Log:
Clean split HOME and BASE areas

Modified:
    jena/branches/jena-fuseki-new-ui/src-dev/dev/RunFuseki2.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiCmd.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/build/DataServiceDesc.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/build/TemplateFunctions.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/FusekiServer.java
    jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/FileSender.java

Modified: jena/branches/jena-fuseki-new-ui/src-dev/dev/RunFuseki2.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src-dev/dev/RunFuseki2.java?rev=1580186&r1=1580185&r2=1580186&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src-dev/dev/RunFuseki2.java (original)
+++ jena/branches/jena-fuseki-new-ui/src-dev/dev/RunFuseki2.java Sat Mar 22 10:39:13 2014
@@ -26,8 +26,7 @@ import org.apache.jena.fuseki.server.Fus
 
 public class RunFuseki2
 {
-    public static void main(String[] args)
-    {
+    public static void main(String[] args) throws Exception {
         //demo() ;
         //FusekiCmd.main("--config=config.ttl") ; System.exit(0) ;
         main1() ;
@@ -70,7 +69,10 @@ public class RunFuseki2
         
         FusekiCmd.main(
                      //  "-v",
-                     "--update", "--memtdb", "--mgt", "/ds"
+                     //"--update", "--memtdb", "--mgt", "/ds"
+                     
+                     "--update", "--mem", "--mgt", "/ds"
+                     
                      //"--update", "--loc="+tmpdir+"DB", "--set=tdb:unionDefaultGraph=true", "/ds"
                      //"--update", "--mem", "/ds"
 

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiCmd.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiCmd.java?rev=1580186&r1=1580185&r2=1580186&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiCmd.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiCmd.java Sat Mar 22 10:39:13 2014
@@ -21,7 +21,6 @@ package org.apache.jena.fuseki ;
 import java.util.List ;
 
 import org.apache.jena.atlas.lib.FileOps ;
-import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.fuseki.build.Template ;
 import org.apache.jena.fuseki.jetty.JettyServerConfig ;
 import org.apache.jena.fuseki.jetty.SPARQLServer ;
@@ -57,25 +56,25 @@ public class FusekiCmd {
     }
     
     static class FusekiCmdInner extends CmdARQ {
-        private static ArgDecl             argMgt          = new ArgDecl(ArgDecl.NoValue, "mgt") ;
-        private static ArgDecl             argMgtPort      = new ArgDecl(ArgDecl.HasValue, "mgtPort", "mgtport") ;
-        private static ArgDecl             argMem          = new ArgDecl(ArgDecl.NoValue, "mem") ;
-        private static ArgDecl             argAllowUpdate  = new ArgDecl(ArgDecl.NoValue, "update", "allowUpdate") ;
-        private static ArgDecl             argFile         = new ArgDecl(ArgDecl.HasValue, "file") ;
-        private static ArgDecl             argMemTDB       = new ArgDecl(ArgDecl.NoValue, "memtdb", "memTDB") ;
-        private static ArgDecl             argTDB          = new ArgDecl(ArgDecl.HasValue, "loc", "location") ;
-        private static ArgDecl             argPort         = new ArgDecl(ArgDecl.HasValue, "port") ;
-        private static ArgDecl             argLocalhost    = new ArgDecl(ArgDecl.NoValue, "localhost", "local") ;
-        private static ArgDecl             argTimeout      = new ArgDecl(ArgDecl.HasValue, "timeout") ;
-        private static ArgDecl             argFusekiConfig = new ArgDecl(ArgDecl.HasValue, "config", "conf") ;
-        private static ArgDecl             argJettyConfig  = new ArgDecl(ArgDecl.HasValue, "jetty-config") ;
-        private static ArgDecl             argGZip         = new ArgDecl(ArgDecl.HasValue, "gzip") ;
+        private static ArgDecl  argMgt          = new ArgDecl(ArgDecl.NoValue, "mgt") ;
+        private static ArgDecl  argMgtPort      = new ArgDecl(ArgDecl.HasValue, "mgtPort", "mgtport") ;
+        private static ArgDecl  argMem          = new ArgDecl(ArgDecl.NoValue, "mem") ;
+        private static ArgDecl  argAllowUpdate  = new ArgDecl(ArgDecl.NoValue, "update", "allowUpdate") ;
+        private static ArgDecl  argFile         = new ArgDecl(ArgDecl.HasValue, "file") ;
+        private static ArgDecl  argMemTDB       = new ArgDecl(ArgDecl.NoValue, "memtdb", "memTDB") ;
+        private static ArgDecl  argTDB          = new ArgDecl(ArgDecl.HasValue, "loc", "location") ;
+        private static ArgDecl  argPort         = new ArgDecl(ArgDecl.HasValue, "port") ;
+        private static ArgDecl  argLocalhost    = new ArgDecl(ArgDecl.NoValue, "localhost", "local") ;
+        private static ArgDecl  argTimeout      = new ArgDecl(ArgDecl.HasValue, "timeout") ;
+        private static ArgDecl  argFusekiConfig = new ArgDecl(ArgDecl.HasValue, "config", "conf") ;
+        private static ArgDecl  argJettyConfig  = new ArgDecl(ArgDecl.HasValue, "jetty-config") ;
+        private static ArgDecl  argGZip         = new ArgDecl(ArgDecl.HasValue, "gzip") ;
 
         // Deprecated.  Use shiro.
-        private static ArgDecl             argBasicAuth    = new ArgDecl(ArgDecl.HasValue, "basic-auth") ;
+        private static ArgDecl  argBasicAuth    = new ArgDecl(ArgDecl.HasValue, "basic-auth") ;
 
-        private static ArgDecl             argHome         = new ArgDecl(ArgDecl.HasValue, "home") ;
-        private static ArgDecl             argPages        = new ArgDecl(ArgDecl.HasValue, "pages") ;
+        private static ArgDecl  argHome         = new ArgDecl(ArgDecl.HasValue, "home") ;
+        private static ArgDecl  argPages        = new ArgDecl(ArgDecl.HasValue, "pages") ;
 
         // private static ModLocation modLocation = new ModLocation() ;
         private static ModDatasetAssembler modDataset      = new ModDatasetAssembler() ;
@@ -181,6 +180,7 @@ public class FusekiCmd {
                 log.info("Dataset: in-memory") ;
                 cmdLineDataset = new ServerInitialConfig() ;
                 cmdLineDataset.templateFile = Template.templateMemFN ; 
+                //
             }
 
             if ( contains(argFile) ) {
@@ -201,9 +201,10 @@ public class FusekiCmd {
             }
 
             if ( contains(argMemTDB) ) {
-                log.info("TDB dataset: in-memory") ;
+                //log.info("TDB dataset: in-memory") ;
                 cmdLineDataset = new ServerInitialConfig() ;
                 cmdLineDataset.templateFile = Template.templateTDBMemFN ;
+                cmdLineDataset.params.put(Template.DIR, Names.memName) ;
             }
 
             if ( contains(argTDB) ) {
@@ -211,13 +212,6 @@ public class FusekiCmd {
                 cmdLineDataset.templateFile = Template.templateTDBDirFN ;
 
                 String dir = getValue(argTDB) ;
-                if ( Lib.equal(dir, Names.memName) ) {
-                    log.info("TDB dataset: in-memory") ;
-                } else {
-                    if ( !FileOps.exists(dir) )
-                        throw new CmdException("Directory not found: " + dir) ;
-                    log.info("TDB dataset: directory=" + dir) ;
-                }
                 cmdLineDataset.params.put(Template.DIR, dir) ;
             }
 

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/build/DataServiceDesc.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/build/DataServiceDesc.java?rev=1580186&r1=1580185&r2=1580186&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/build/DataServiceDesc.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/build/DataServiceDesc.java Sat Mar 22 10:39:13 2014
@@ -36,12 +36,13 @@ import com.hp.hpl.jena.sparql.util.FmtUt
 import com.hp.hpl.jena.sparql.util.TypeNotUniqueException ;
 import com.hp.hpl.jena.sparql.util.graph.GraphUtils ;
 
+// Check whether this is used or needed
 public abstract class DataServiceDesc
 {
     public static DataServiceDesc createFromTemplate(String templateFile, String dbName) {
         Map<String, String> params = new HashMap<>() ;
         params.put(Template.NAME, dbName) ;
-        String template = TemplateFunctions.template(templateFile, params) ;
+        String template = TemplateFunctions.templateFile(templateFile, params) ;
         Lang lang = RDFLanguages.filenameToLang(templateFile, Lang.TTL) ;
         StringReader sr = new StringReader(template) ;
         return create(sr, lang) ;

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/build/TemplateFunctions.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/build/TemplateFunctions.java?rev=1580186&r1=1580185&r2=1580186&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/build/TemplateFunctions.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/build/TemplateFunctions.java Sat Mar 22 10:39:13 2014
@@ -19,6 +19,7 @@
 package org.apache.jena.fuseki.build;
 
 import java.io.IOException ;
+import java.io.InputStream ;
 import java.util.Map ;
 import java.util.Map.Entry ;
 
@@ -29,14 +30,35 @@ import com.hp.hpl.jena.util.FileUtils ;
 
 public class TemplateFunctions
 {
-    /** Read a template file, substitute for {NAME} and return the model. */
-    public static String template(String templateFile, Map<String, String> params) {
+    /** Read in a template from a file, substitute for {NAME} and return the string. */
+    public static String templateFile(String templateFile, Map<String, String> params) {
         String template ;
         try { template = FileUtils.readWholeFileAsUTF8(templateFile) ; }
         catch (IOException ex) { 
             Fuseki.serverLog.error("File not found: "+templateFile);
             IO.exception(ex); return null ;
         }
+        return templateString(template, params) ;
+    }
+    
+    /** Read a template file, substitute for {NAME} and return the model. */
+    public static String templateResource(String resourceName, Map<String, String> params) {
+        String template ;
+        try {
+            InputStream in = TemplateFunctions.class.getClassLoader().getResourceAsStream(resourceName) ;
+            if ( in == null )
+                Fuseki.serverLog.error("Resource not found: "+resourceName);
+            template = FileUtils.readWholeFileAsUTF8(in) ;
+        }
+        catch (IOException ex) { 
+            Fuseki.serverLog.error("Error reading resource: "+resourceName);
+            IO.exception(ex); return null ;
+        }
+        return templateString(template, params) ;
+    }
+
+    /** Create a template from a String */ 
+    public static String templateString(String template, Map<String, String> params) {
         for ( Entry<String, String> e : params.entrySet() ) {
             template = template.replaceAll("\\{"+e.getKey()+"\\}", e.getValue()) ;
         }

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=1580186&r1=1580185&r2=1580186&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 Mar 22 10:39:13 2014
@@ -305,9 +305,9 @@ public class ActionDatasets extends Acti
         
         String template = null ;
         if ( dbType.equalsIgnoreCase(tDatabasetTDB))
-            template = TemplateFunctions.template(Template.templateTDBFN, params) ;
+            template = TemplateFunctions.templateFile(Template.templateTDBFN, params) ;
         if ( dbType.equalsIgnoreCase(tDatabasetMem))
-            template = TemplateFunctions.template(Template.templateMemFN, params) ;
+            template = TemplateFunctions.templateFile(Template.templateMemFN, params) ;
         RDFDataMgr.parse(dest, new StringReader(template), "http://base/", Lang.TTL) ;
     }
 

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServer.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServer.java?rev=1580186&r1=1580185&r2=1580186&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServer.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServer.java Sat Mar 22 10:39:13 2014
@@ -19,16 +19,23 @@
 package org.apache.jena.fuseki.server;
 
 import java.io.File ;
+import java.io.FilenameFilter ;
+import java.io.IOException ;
 import java.io.StringReader ;
+import java.nio.file.Files ;
 import java.nio.file.Path ;
 import java.nio.file.Paths ;
+import java.nio.file.StandardCopyOption ;
 import java.util.ArrayList ;
 import java.util.HashMap ;
 import java.util.List ;
 import java.util.Map ;
 
+import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.lib.DS ;
+import org.apache.jena.atlas.lib.FileOps ;
 import org.apache.jena.atlas.lib.InternalErrorException ;
+import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.FusekiConfigException ;
 import org.apache.jena.fuseki.build.Builder ;
@@ -39,9 +46,11 @@ import org.apache.jena.fuseki.servlets.S
 import org.apache.jena.riot.Lang ;
 import org.apache.jena.riot.RDFDataMgr ;
 import org.apache.jena.riot.RDFLanguages ;
+import arq.cmd.CmdException ;
 
 import com.hp.hpl.jena.rdf.model.* ;
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+import com.hp.hpl.jena.tdb.sys.Names ;
 
 public class FusekiServer
 {
@@ -50,6 +59,13 @@ public class FusekiServer
     /** Root of the varying files in this deployment. Often $FUSEKI_HOME/run */ 
     public static Path FUSEKI_BASE = null ;
 
+    private static FilenameFilter filterConfig = new FilenameFilter() {
+        @Override
+        public boolean accept(File dir, String name) {
+            return name.startsWith("config") ;
+        }
+    } ;
+    
     // Relative names of directories
     private static final String        runArea                  = "run" ;
     private static final String        databasesLocationBase    = "databases" ;
@@ -95,7 +111,10 @@ public class FusekiServer
             String x1 = System.getenv("FUSEKI_HOME") ;
             if ( x1 != null )
                 FUSEKI_HOME = Paths.get(x1) ;
+            else
+                FUSEKI_HOME = Paths.get("") ;
         }
+            
         if ( FUSEKI_BASE == null ) {
             String x2 = System.getenv("FUSEKI_BASE") ;
             if ( x2 != null )
@@ -104,21 +123,47 @@ public class FusekiServer
                 FUSEKI_BASE = FUSEKI_HOME.resolve(runArea) ;
         }
 
+        FUSEKI_HOME = FUSEKI_HOME.toAbsolutePath() ;
+        FUSEKI_BASE = FUSEKI_BASE.toAbsolutePath() ;
+        
+        Fuseki.configLog.info("FUSEKI_HOME="+FUSEKI_HOME.toString());
+        Fuseki.configLog.info("FUSEKI_BASE="+FUSEKI_BASE.toString());
+        
         mustExist(FUSEKI_HOME) ;
-        dirTemplates        = makePath(FUSEKI_HOME, templatesNameBase) ;
-        mustExist(dirTemplates) ;
+        
+        // Copy in defaults?
+        Path dirTemplatesMasters = makePath(FUSEKI_HOME, templatesNameBase) ;
+        mustExist(dirTemplatesMasters) ;
 
         ensureDir(FUSEKI_BASE) ;
-        dirBackups          = makePath(FUSEKI_BASE, backupDirNameBase) ;
-        dirConfiguration    = makePath(FUSEKI_BASE, configDirNameBase) ;
-        dirLogs             = makePath(FUSEKI_BASE, logsNameBase) ;
-        dirSystemDatabase   = makePath(FUSEKI_BASE, systemDatabaseNameBase) ;
-        dirFileArea         = makePath(FUSEKI_BASE, systemFileAreaBase) ;
-        ensureDir(dirBackups) ;
-        ensureDir(dirConfiguration) ;
-        ensureDir(dirLogs) ;
-        ensureDir(dirSystemDatabase) ;
-        ensureDir(dirFileArea) ;
+        
+        dirTemplates        = makePath(FUSEKI_BASE, templatesNameBase) ;
+        boolean copyTemplates = ! exists(dirTemplates) ;
+        ensureDir(dirTemplates) ; 
+
+        dirBackups          = makePathEnsureDir(FUSEKI_BASE, backupDirNameBase) ;
+        dirConfiguration    = makePathEnsureDir(FUSEKI_BASE, configDirNameBase) ;
+        dirLogs             = makePathEnsureDir(FUSEKI_BASE, logsNameBase) ;
+        dirSystemDatabase   = makePathEnsureDir(FUSEKI_BASE, systemDatabaseNameBase) ;
+        dirFileArea         = makePathEnsureDir(FUSEKI_BASE, systemFileAreaBase) ;
+        
+        if ( copyTemplates )
+            copyFileFilter(dirTemplatesMasters, dirTemplates, filterConfig) ;
+    }
+
+    private static void copyFileFilter(Path srcDir, Path dstDir, FilenameFilter filterConfig) {
+        String[] files = srcDir.toFile().list(filterConfig) ;
+        for ( String fn : files )
+        {
+            try {
+                Path src = srcDir.resolve(fn) ;
+                Path dst = dstDir.resolve(fn) ;
+                Files.copy(src, dst, StandardCopyOption.COPY_ATTRIBUTES) ;
+            } catch (IOException e) {
+                IO.exception("Failed to copy directory of files "+srcDir, e);
+                e.printStackTrace();
+            }
+        }
     }
 
     public static void initializeDataAccessPoints(ServerInitialConfig initialSetup, String configDir) {
@@ -160,6 +205,17 @@ public class FusekiServer
             datasets.add(dap) ;
         } else if ( params.templateFile != null ) {
             Fuseki.configLog.info("Template file: " + params.templateFile) ;
+            String dir = params.params.get(Template.DIR) ;
+            if ( dir != null ) {
+                if ( Lib.equal(dir, Names.memName) ) {
+                    Fuseki.configLog.info("TDB dataset: in-memory") ;
+                } else {
+                    if ( !FileOps.exists(dir) )
+                        throw new CmdException("Directory not found: " + dir) ;
+                    Fuseki.configLog.info("TDB dataset: directory=" + dir) ;
+                }
+            }
+
             DataAccessPoint dap = configFromTemplate(params.templateFile, params.datasetPath, params.params) ;
             datasets.add(dap) ;
         }
@@ -183,7 +239,7 @@ public class FusekiServer
             }
         }
         
-        String str = TemplateFunctions.template(templateFile, params) ;
+        String str = TemplateFunctions.templateFile(templateFile, params) ;
         Lang lang = RDFLanguages.filenameToLang(str, Lang.TTL) ;
         StringReader sr =  new StringReader(str) ;
         Model model = ModelFactory.createDefaultModel() ;
@@ -241,7 +297,18 @@ public class FusekiServer
         if ( ! dir.isDirectory())
             throw new FusekiConfigException("Not a directory: "+directory) ;
     }
+    
+    private static boolean exists(Path directory) {
+        File dir = directory.toFile() ;
+        return dir.exists() ;
+    }
 
+    private static Path makePathEnsureDir(Path root , String relName ) {
+        Path p = makePath(root, relName) ;
+        ensureDir(p);
+        return p ;
+    }
+    
     private static Path makePath(Path root , String relName ) {
         Path path = root.resolve(relName) ;
         // Must exist

Modified: jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/FileSender.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/FileSender.java?rev=1580186&r1=1580185&r2=1580186&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/FileSender.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/FileSender.java Sat Mar 22 10:39:13 2014
@@ -30,7 +30,7 @@ import org.apache.jena.atlas.io.IO ;
 
 public class FileSender {
     // HttpClient 4.3 has MultipartEntity but the 4.2->4.3 change is less
-    // than trivial (and it seems some environemnt fix the HttpClient) 
+    // than trivial (and it seems some environment fix the HttpClient) 
     // so here's some code for testing support.
 //    MultipartEntity entity = new MultipartEntity();
 //    entity.addPart(...)