in jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java [339:616]
private void processStdArguments(Logger log) {
// ---- Command line definition of setup
// One dataset
// or a config file
// or a "standard setup" e.g.SPARQLer
// or empty allowed
int numDefinitions = 0;
SetupType setup = UNSET;
if ( contains(argMem) ) {
setup = MEM;
numDefinitions++;
}
if ( contains(argFile) ) {
setup = FILE;
numDefinitions++;
}
if ( contains(assemblerDescDecl) ) {
setup = ASSEM;
numDefinitions++;
}
if ( contains(argTDB) ) {
setup = TDB;
numDefinitions++;
}
if ( contains(argMemTDB) ) {
setup = MEMTDB;
numDefinitions++;
}
if ( contains(argConfig) ) {
setup = CONF;
numDefinitions++;
}
if ( contains(argEmpty) ) {
setup = NONE;
//numDefinitions++;
}
if ( contains(argSparqler) ) {
setup = SPARQLer;
//numDefinitions++;
}
// ---- Validation
if ( setup == UNSET && serverArgs.allowEmpty )
setup = NONE;
// Starting empty.
boolean startEmpty = ( setup == NONE || setup == SPARQLer );
if ( numDefinitions > 1 )
throw new CmdException("Multiple ways providing a dataset. Only one of --mem, --file, --loc or --conf");
if ( startEmpty && numDefinitions > 0 )
throw new CmdException("Dataset provided but 'no dataset' flag given");
if ( startEmpty && ! getPositional().isEmpty() )
throw new CmdException("Dataset name provided but 'no dataset' flag given");
if ( ! startEmpty && numDefinitions == 0 )
throw new CmdException("No dataset or configuration specified on the command line");
// Configuration file OR command line dataset
if ( contains(argConfig) ) {
// Invalid combination: --conf + arguments related to command line setup.
if ( ! getPositional().isEmpty() )
throw new CmdException("Can't have both a configuration file and a service name");
if ( contains(argRDFS) )
throw new CmdException("Need to define RDFS setup in the configuration file");
} else {
// No --conf
if ( getPositional().size() > 1 )
throw new CmdException("Multiple dataset path names given");
if ( ! startEmpty && getPositional().size() == 0 ) {
if ( setup == UNSET )
throw new CmdException("Missing dataset description and service name");
else
throw new CmdException("Missing service name");
}
// Finally!
if ( getPositional().size() == 1 )
serverArgs.datasetPath = DataAccessPoint.canonical(getPositionalArg(0));
}
// ---- check: Invalid: --update + --conf
if ( contains(argUpdate) && contains(argConfig) )
throw new CmdException("--update and a configuration file does not make sense (control using the configuration file only)");
boolean allowUpdate = contains(argUpdate);
serverArgs.allowUpdate = allowUpdate;
// -- Record the choice.
serverArgs.setup = setup;
serverArgs.datasetDescription = "<unset>";
// ---- Dataset
// A server has one of the command line dataset setups or a configuration file,
// or "--empty" or "--sparqler"
// Only one of these is chosen from the checking above.
// Which TDB to use to create a command line TDB database.
if ( contains(argTDB1mode) )
useTDB2 = false;
if ( contains(argTDB2mode) )
useTDB2 = true;
switch(setup) {
case CONF->{
serverArgs.serverConfigFile = getValue(argConfig);
}
case MEM->{
serverArgs.dsgMaker = args->DSGSetup.setupMem(log, args);
}
case FILE->{
List<String> filenames = getValues(argFile);
serverArgs.dsgMaker = args->DSGSetup.setupFile(log, filenames, args);
}
case TDB->{
String directory = getValue(argTDB);
serverArgs.dsgMaker = args->DSGSetup.setupTDB(log, directory, useTDB2, args);
}
case NONE->{
serverArgs.startEmpty = true;
serverArgs.datasetDescription = "No dataset";
}
case ASSEM->{
serverArgs.dsgMaker = args->DSGSetup.setupAssembler(log, modDataset, args);
}
case MEMTDB->{
DSGSetup.setupMemTDB(log, useTDB2, serverArgs);
}
case UNSET->{
throw new CmdException("Internal error");
}
case SPARQLer -> {
String filebase = getValue(argSparqler);
if ( !FileOps.exists(filebase) )
throw new CmdException("File area not found: " + filebase);
serverArgs.contentDirectory = filebase;
serverArgs.addGeneral = "/sparql";
serverArgs.startEmpty = true;
serverArgs.validators = true;
}
default -> throw new IllegalArgumentException("Unexpected value: " + setup);
}
// ---- RDFS
if ( contains(argRDFS) ) {
String rdfsVocab = getValue(argRDFS);
if ( !FileOps.exists(rdfsVocab) )
throw new CmdException("No such file for RDFS: "+rdfsVocab);
serverArgs.rdfsSchemaGraph = RDFDataMgr.loadGraph(rdfsVocab);
}
// ---- Misc features.
if ( contains(argTimeout) ) {
String str = getValue(argTimeout);
ARQ.getContext().set(ARQ.queryTimeout, str);
}
if ( contains(argGeneralQuerySvc) ) {
String z = getValue(argGeneralQuerySvc);
if ( ! z.startsWith("/") )
z = "/"+z;
serverArgs.addGeneral = z;
}
if ( contains(argValidators) ) {
serverArgs.validators = true;
}
// -- Server setup.
boolean hasJettyConfigFile = contains(argJettyConfig);
// ---- Port
serverArgs.port = defaultPort;
if ( contains(argPort) ) {
if ( hasJettyConfigFile )
throw new CmdException("Cannot specify the port and also provide a Jetty configuration file");
serverArgs.port = portNumber(argPort);
}
if ( contains(argLocalhost) ) {
if ( hasJettyConfigFile )
throw new CmdException("Cannot specify 'localhost' and also provide a Jetty configuration file");
serverArgs.loopback = true;
}
if ( contains(argContextPath) ) {
String contextPath = getValue(argContextPath);
contextPath = sanitizeContextPath(contextPath);
if ( contextPath != null )
serverArgs.servletContextPath = contextPath;
}
if ( contains(argBase) ) {
// Static files.
String filebase = getValue(argBase);
if ( ! FileOps.exists(filebase) ) {
throw new CmdException("File area not found: "+filebase);
//FmtLog.warn(Fuseki.configLog, "File area not found: "+filebase);
}
serverArgs.contentDirectory = filebase;
}
if ( contains(argPasswdFile) ) {
if ( hasJettyConfigFile )
throw new CmdException("Can't specify a password file and also provide a Jetty configuration file");
serverArgs.passwdFile = getValue(argPasswdFile);
}
if ( contains(argRealm) )
serverArgs.realm = getValue(argRealm);
if ( contains(argHttpsPort) && ! contains(argHttps) )
throw new CmdException("https port given but not certificate details via --"+argHttps.getKeyName());
if ( contains(argHttps) ) {
if ( hasJettyConfigFile )
throw new CmdException("Can't specify \"https\" and also provide a Jetty configuration file");
serverArgs.httpsPort = defaultHttpsPort;
if ( contains(argHttpsPort) )
serverArgs.httpsPort = portNumber(argHttpsPort);
String httpsSetup = getValue(argHttps);
// The details go in a separate file that can be secured.
serverArgs.httpsKeysDetails = httpsSetup;
}
if ( contains(argAuth) ) {
if ( hasJettyConfigFile )
throw new CmdException("Can't specify authentication and also provide a Jetty configuration file");
String schemeStr = getValue(argAuth);
serverArgs.authScheme = AuthScheme.scheme(schemeStr);
}
// Jetty server : this will be the server configuration regardless of other settings.
if ( contains(argJettyConfig) ) {
String jettyConfigFile = getValue(argJettyConfig);
if ( ! FileOps.exists(jettyConfigFile) )
throw new CmdException("Jetty config file not found: "+jettyConfigFile);
serverArgs.jettyConfigFile = jettyConfigFile;
}
boolean withModules = hasValueOfTrue(argEnableModules);
if ( withModules ) {
FusekiModules presetModules = serverArgs.fusekiModules;
// Get auto modules from system-wide setup.
FusekiModules autoModules = FusekiModules.getSystemModules();
// Merge preset and auto-loaded modules into one FusekiModules instance.
if ( presetModules == null ) {
serverArgs.fusekiModules = autoModules;
} else {
List<FusekiModule> allModules = Stream.concat(
presetModules.asList().stream(),
autoModules.asList().stream())
.distinct()
.toList();
serverArgs.fusekiModules = FusekiModules.create(allModules);
}
}
if ( contains(argCORS) ) {
String corsConfigFile = getValue(argCORS);
if ( ! FileOps.exists(corsConfigFile) )
throw new CmdException("CORS config file not found: "+corsConfigFile);
serverArgs.corsConfigFile = corsConfigFile;
} else if (contains(argNoCORS)) {
serverArgs.withCORS = ! contains(argNoCORS);
}
serverArgs.withPing = contains(argWithPing);
serverArgs.withStats = contains(argWithStats);
serverArgs.withMetrics = contains(argWithMetrics);
serverArgs.withCompact = contains(argWithCompact);
}