Configuration utils to FusekiEnv. Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/7e9a76e1 Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/7e9a76e1 Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/7e9a76e1
Branch: refs/heads/master Commit: 7e9a76e11ed9f86e8146cf4606e3fe20e550a913 Parents: 5d3f29c Author: Andy Seaborne <[email protected]> Authored: Fri Jul 31 14:10:53 2015 +0100 Committer: Andy Seaborne <[email protected]> Committed: Fri Jul 31 14:10:53 2015 +0100 ---------------------------------------------------------------------- .../apache/jena/fuseki/mgt/ActionDatasets.java | 55 ++------------------ .../apache/jena/fuseki/server/FusekiEnv.java | 53 ++++++++++++++++++- 2 files changed, 55 insertions(+), 53 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/7e9a76e1/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java index 7a972d9..4f53269 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java @@ -24,9 +24,6 @@ import java.io.IOException ; import java.io.InputStream ; import java.io.OutputStream ; import java.io.StringReader ; -import java.nio.file.DirectoryStream ; -import java.nio.file.Files ; -import java.nio.file.Path ; import java.util.* ; import javax.servlet.ServletOutputStream ; @@ -173,8 +170,8 @@ public class ActionDatasets extends ActionContainerItem { // And abort. ServletOps.error(HttpSC.CONFLICT_409, "Name already registered "+datasetPath) ; - configFile = generateConfigurationFilename(datasetPath) ; - List<String> existing = existingConfigurationFile(datasetPath) ; + configFile = FusekiEnv.generateConfigurationFilename(datasetPath) ; + List<String> existing = FusekiEnv.existingConfigurationFile(datasetPath) ; if ( ! existing.isEmpty() ) ServletOps.error(HttpSC.CONFLICT_409, "Configuration file for "+datasetPath+" already exists") ; @@ -323,7 +320,7 @@ public class ActionDatasets extends ActionContainerItem { DataAccessPointRegistry.get().remove(name) ; // Delete configuration file. // Should be only one, undo damage if multiple. - existingConfigurationFile(name).stream().forEach(FileOps::deleteSilent); + FusekiEnv.existingConfigurationFile(name).stream().forEach(FileOps::deleteSilent); // Find graph associated with this dataset name. // (Statically configured databases aren't in the system database.) @@ -400,53 +397,7 @@ public class ActionDatasets extends ActionContainerItem { return stmt ; } - /** Dataset set name to configuration file name. */ - private String datasetNameToConfigurationFile(HttpAction action, String dsName) { - List<String> existing = existingConfigurationFile(dsName) ; - if ( ! existing.isEmpty() ) { - if ( existing.size() > 1 ) { - action.log.warn(format("[%d] Multiple existing configuration files for %s : %s", - action.id, dsName, existing)); - ServletOps.errorBadRequest("Multiple existing configuration files for "+dsName); - return null ; - } - return existing.get(0) ; - } - - return generateConfigurationFilename(dsName) ; - } - - // TODO To a library place and use for all ref->filename - private String generateConfigurationFilename(String dsName) { - String filename = dsName ; - // Without "/" - if ( filename.startsWith("/")) - filename = filename.substring(1) ; - filename = FusekiServer.dirConfiguration.resolve(filename).toString()+".ttl" ; - return filename ; - } - - /** Return the filenames of all matching files in the configuration directory */ - private List<String> existingConfigurationFile(String baseFilename) { - // TODO To a library place and use for all ref->filename - try { - // Basename glob. - List<String> paths = new ArrayList<>() ; - - try (DirectoryStream<Path> stream = Files.newDirectoryStream(FusekiServer.dirConfiguration, baseFilename+"*") ) { - stream.forEach((p)-> paths.add(p.getFileName().toString())) ; - } -// DirectoryStream.Filter<Path> matchingFiles = (entry) -> { -// String fn = entry.getFileName().toString() ; -// return fn.startsWith(baseFilename) ; -// } ; -// try (DirectoryStream<Path> stream = Files.newDirectoryStream(FusekiServer.dirConfiguration, matchingFiles)) { - return paths ; - } catch (IOException ex) { - throw new InternalErrorException("Failed to read configuration directory "+FusekiServer.dirConfiguration) ; - } - } // XXX Merge with Upload.incomingData http://git-wip-us.apache.org/repos/asf/jena/blob/7e9a76e1/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiEnv.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiEnv.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiEnv.java index c5e269d..603fbe7 100644 --- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiEnv.java +++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/FusekiEnv.java @@ -18,8 +18,19 @@ package org.apache.jena.fuseki.server; +import static java.lang.String.format ; + +import java.io.IOException ; +import java.nio.file.DirectoryStream ; +import java.nio.file.Files ; import java.nio.file.Path ; import java.nio.file.Paths ; +import java.util.ArrayList ; +import java.util.List ; + +import org.apache.jena.atlas.lib.InternalErrorException ; +import org.apache.jena.fuseki.servlets.HttpAction ; +import org.apache.jena.fuseki.servlets.ServletOps ; /** * Separate initialization for FUSEKI_HOME and FUSEKI_BASE so that @@ -93,8 +104,9 @@ public class FusekiEnv { } public static final String ENV_runArea = "run" ; - private static boolean initialized = false ; + + /** Initialize the server */ public static synchronized void setEnvironment() { if ( initialized ) return ; @@ -160,5 +172,44 @@ public class FusekiEnv { return x ; } + /** Dataset set name to configuration file name. */ + public static String datasetNameToConfigurationFile(HttpAction action, String dsName) { + List<String> existing = existingConfigurationFile(dsName) ; + if ( ! existing.isEmpty() ) { + if ( existing.size() > 1 ) { + action.log.warn(format("[%d] Multiple existing configuration files for %s : %s", + action.id, dsName, existing)); + ServletOps.errorBadRequest("Multiple existing configuration files for "+dsName); + return null ; + } + return existing.get(0) ; + } + + return generateConfigurationFilename(dsName) ; + } + + /** Choose a configuration file name - existign one or ".ttl" form if new */ + public static String generateConfigurationFilename(String dsName) { + String filename = dsName ; + // Without "/" + if ( filename.startsWith("/")) + filename = filename.substring(1) ; + filename = FusekiServer.dirConfiguration.resolve(filename).toString()+".ttl" ; + return filename ; + } + + /** Return the filenames of all matching files in the configuration directory */ + public static List<String> existingConfigurationFile(String baseFilename) { + try { + List<String> paths = new ArrayList<>() ; + try (DirectoryStream<Path> stream = Files.newDirectoryStream(FusekiServer.dirConfiguration, baseFilename+"*") ) { + stream.forEach((p)-> paths.add(p.getFileName().toString())) ; + } + return paths ; + } catch (IOException ex) { + throw new InternalErrorException("Failed to read configuration directory "+FusekiServer.dirConfiguration) ; + } + } + }
