http://git-wip-us.apache.org/repos/asf/jena/blob/662cf71d/jena-fuseki/s-update-form ---------------------------------------------------------------------- diff --git a/jena-fuseki/s-update-form b/jena-fuseki/s-update-form deleted file mode 100755 index 4f6590d..0000000 --- a/jena-fuseki/s-update-form +++ /dev/null @@ -1,713 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# SPARQL HTTP Update, client. - -require 'optparse' -require 'net/http' -require 'uri' -require 'cgi' -require 'pp' -require 'ostruct' - -# ToDo -# Allow a choice of media type for GET -# --accept "content-type" (and abbreviations) -# --header "Add:this" -# --user, --password -# Basic authentication: request.basic_auth("username", "password") -# Follow redirects => 301: puts response["location"] # All headers are lowercase? - -SOH_NAME="SOH" -SOH_VERSION="0.0.0" - -$proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new - -# What about direct naming? - -# Names -$mtTurtle = 'text/turtle;charset=utf-8' -$mtRDF = 'application/rdf+xml' -$mtText = 'text/plain' -$mtNTriples = 'application/n-triples' -$mtNQuads = 'application/n-quads' -$mtJSONLD = 'application/ld+json' -$mtTriG = 'application/trig' -$mtSparqlResultsX = 'application/sparql-results+xml' -$mtSparqlResultsJ = 'application/sparql-results+json' -$mtAppJSON = 'application/json' -$mtAppXML = 'application/xml' -$mtSparqlResultsTSV = 'application/sparql-results+tsv' -$mtSparqlResultsCSV = 'application/sparql-results+csv' -$mtSparqlUpdate = 'application/sparql-update' -$mtWWWForm = 'application/x-www-form-urlencoded' -$mtSparqlQuery = "application/sparql-query" ; - -# Global media type table. -$fileMediaTypes = {} -$fileMediaTypes['ttl'] = $mtTurtle -$fileMediaTypes['n3'] = 'text/n3; charset=utf-8' -$fileMediaTypes['nt'] = $mtText -$fileMediaTypes['rdf'] = $mtRDF -$fileMediaTypes['owl'] = $mtRDF -$fileMediaTypes['nq'] = $mtNQuads -$fileMediaTypes['trig'] = $mtTriG -$fileMediaTypes['json-ld'] = $mtJSONLD -$fileMediaTypes['jsonld'] = $mtJSONLD - -# Global charset : no entry means "don't set" -$charsetUTF8 = 'utf-8' -$charset = {} -$charset[$mtTurtle] = 'utf-8' -$charset[$mtText] = 'ascii' -$charset[$mtTriG] = 'utf-8' -$charset[$mtNQuads] = 'utf-8' - -# Headers - -$hContentType = 'Content-Type' -# $hContentEncoding = 'Content-Encoding' -$hContentLength = 'Content-Length' -# $hContentLocation = 'Content-Location' -# $hContentRange = 'Content-Range' - -$hAccept = 'Accept' -$hAcceptCharset = 'Accept-Charset' -$hAcceptEncoding = 'Accept-Encoding' -$hAcceptRanges = 'Accept-Ranges' - -$headers = { "User-Agent" => "#{SOH_NAME}/Fuseki #{SOH_VERSION}"} -$print_http = false - -# Default for GET -# At least allow anything (and hope!) -$accept_rdf="#{$mtTurtle} , #{$mtNTriples};q=0.9 , #{$mtRDF};q=0.8 , #{$mtJSONLD};q=0.5" -# Datasets -$accept_ds="#{$mtTrig} , #{$mtNQuads};q=0.9 , #{$mtJSONLD};q=0.5" -# For SPARQL query -$accept_results="#{$mtSparqlResultsJ} , #{$mtSparqlResultsX};q=0.9 , #{$accept_rdf}" - -# Accept any in case of trouble. -$accept_rdf="#{$accept_rdf} , */*;q=0.1" -$accept_results="#{$accept_results} , */*;q=0.1" - -# The media type usually forces the charset. -$accept_charset=nil - -## Who we are. -## Two styles: -## s-query ..... -## soh query ..... - -$cmd = File.basename($0) -if $cmd == 'soh' -then - $cmd = (ARGV.size == 0) ? 'soh' : ARGV.shift -end - -if ! $cmd.start_with?('s-') && $cmd != 'soh' - $cmd = 's-'+$cmd -end - -## -------- - -def GET(dataset, graph) - print "GET #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - get_worker(requestURI, headers) -end - -def get_worker(requestURI, headers) - uri = URI.parse(requestURI) - request = Net::HTTP::Get.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_print_body(uri, request) -end - -def HEAD(dataset, graph) - print "HEAD #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - uri = URI.parse(requestURI) - request = Net::HTTP::Head.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def PUT(dataset, graph, file) - print "PUT #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Put) -end - -def POST(dataset, graph, file) - print "POST #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Post) -end - -def DELETE(dataset, graph) - print "DELETE #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - request = Net::HTTP::Delete.new(uri.request_uri) - headers = {} - headers.merge!($headers) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def uri_escape(string) - CGI.escape(string) -end - -def target(dataset, graph) - return dataset+"?default" if graph == "default" - return dataset+"?graph="+uri_escape(graph) -end - -def send_body(dataset, graph, file, method) - mt = content_type(file) - headers = {} - headers.merge!($headers) - headers[$hContentType] = mt - headers[$hContentLength] = File.size(file).to_s - ## p headers - - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - - request = method.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - request.body_stream = File.open(file) - response_no_body(uri, request) -end - -def response_no_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue Exception => e - # puts e.message - #puts e.backtrace.inspect - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - response = http.request(request) - print_http_response(response) - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code} #{response.message} #{uri}", 9 - # Unreachable - response.error! - end - # NO BODY IN RESPONSE -end - -def response_print_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue => e - #puts e.backtrace.inspect - #print e.class - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - - # Add a blank line if headers were output. - print "\n" if $http_print ; - - begin - response = http.request(request) { |res| - print_http_response(res) - #puts res.code - res.read_body do |segment| - print segment - end - } - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code}: #{uri}", 9 - # Unreachable - response.error! - end - rescue EOFError => e - warn_exit "IO Error: "+e.message, 3 - end -end - -def print_http_request(uri, request) - return unless $print_http - #print "Request\n" - print request.method," ",uri, "\n" - print_headers(" ",request) -end - -def print_http_response(response) - return unless $print_http - #print "Response\n" - print response.code, " ", response.message, "\n" - print_headers(" ",response) -end - -def print_headers(marker, headers) - headers.each do |k,v| - k = k.split('-').map{|w| w.capitalize}.join('-')+':' - printf "%s%-20s %s\n",marker,k,v - end -end - -def content_type(file) - file =~ /\.([^.]*)$/ - ext = $1 - mt = $fileMediaTypes[ext] - cs = $charset[mt] - mt = mt+';charset='+cs if ! cs.nil? - return mt -end - -def charset(content_type) - return $charset[content_type] -end - -def warn_exit(msg, rc) - warn msg - exit rc ; -end - -def parseURI(uri_string) - begin - return URI.parse(uri_string).to_s - rescue URI::InvalidURIError => err - warn_exit "Bad URI: <#{uri_string}>", 2 - end -end - -## ---- Command - -def cmd_soh(command=nil) - ## Command line - options = {} - optparse = OptionParser.new do |opts| - # Set a banner, displayed at the top - # of the help screen. - case $cmd - when "s-http", "sparql-http", "soh" - banner="$cmd [get|post|put|delete] datasetURI graph [file]" - when "s-get", "s-head", "s-delete" - banner="$cmd datasetURI graph" - end - - opts.banner = $banner - # Define the options, and what they do - - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - - options[:version] = false - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - - # This displays the help screen, all programs are - # assumed to have this option. - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - if command.nil? - if ARGV.size == 0 - warn "No command given: expected one of 'get', 'put', 'post', 'delete', 'query' or 'update'" - exit 1 - end - cmdPrint=ARGV.shift - command=cmdPrint.upcase - else - cmdPrint=command - end - - case command - when "HEAD", "GET", "DELETE" - requiredFile=false - when "PUT", "POST" - requiredFile=true - when "QUERY" - cmd_sparql_query - when "UPDATE" - cmd_sparql_update - else - warn_exit "Unknown command: #{command}", 2 - end - - if requiredFile - then - if ARGV.size != 3 - warn_exit "Required: dataset URI, graph URI (or 'default') and file", 1 - end - else - if ARGV.size != 2 - warn_exit "Required: dataset URI and graph URI (or 'default')", 1 - end - end - - dataset=parseURI(ARGV.shift) - # Relative URI? - graph=parseURI(ARGV.shift) - file="" - if requiredFile - then - file = ARGV.shift if requiredFile - if ! File.exist?(file) - warn_exit "No such file: "+file, 3 - end - if File.directory?(file) - warn_exit "File is a directory: "+file, 3 - end - end - - case command - when "GET" - GET(dataset, graph) - when "HEAD" - HEAD(dataset, graph) - when "PUT" - PUT(dataset, graph, file) - when "DELETE" - DELETE(dataset, graph) - when "POST" - POST(dataset, graph, file) - else - warn_exit "Internal error: Unknown command: #{cmd}", 2 - end - exit 0 -end - -## -------- -def string_or_file(arg) - return arg if ! arg.match(/^@/) - a=(arg[1..-1]) - open(a, 'rb'){|f| f.read} -end - -## -------- SPARQL Query - -## Choose method -def SPARQL_query(service, query, query_file, forcePOST=false, args2={}) - if ! query_file.nil? - query = open(query_file, 'rb'){|f| f.read} - end - if forcePOST || query.length >= 2*1024 - SPARQL_query_POST(service, query, args2) - else - SPARQL_query_GET(service, query, args2) - end -end - -## By GET - -def SPARQL_query_GET(service, query, args2) - args = { "query" => query } - args.merge!(args2) - qs=args.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - action="#{service}?#{qs}" - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - get_worker(action, headers) -end - -## By POST - -def SPARQL_query_POST(service, query, args2) - # DRY - body/no body for each of request and response. - post_params={ "query" => query } - post_params.merge!(args2) - uri = URI.parse(service) - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - execute_post_form_body(uri, headers, post_params) -end - -def execute_post_form_body(uri, headers, post_params) - request = Net::HTTP::Post.new(uri.request_uri) - qs=post_params.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = qs.length.to_s - request.initialize_http_header(headers) - request.body = qs - print_http_request(uri, request) - response_print_body(uri, request) -end - -# Usage: -v --help --file= --query= -def cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--query QUERY] [--service URI] [--post] 'query' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--query=FILE','--file=FILE', 'Take query from a file') do |file| - options[:file]=file - end - opts.on('--output=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the output argument') do |type| - options[:output]=type - end - opts.on('--accept=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the accept header type') do |type| - options[:accept]=type - end - options[:verbose] = false - opts.on( '--post', 'Force use of POST' ) do - options[:post] = true - end - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e - warn e - exit 1 - end - - $verbose = options[:verbose] - $print_http = $verbose - usePOST = options[:post] - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - # Query - query=nil - query_file=options[:file] - if query_file.nil? && ARGV.size == 0 - then - warn_exit 'No query specified.',1 - end - if query_file.nil? - query = ARGV.shift - if query.match(/^@/) - query_file = query[1..-1] - query = nil - end - end - - # --output ==> output= (non-standard) - args={} - case options[:output] - when nil - when "json","xml","text","csv","tsv" - args['output'] = options[:output] - when :json,:xml,:text,:csv,:tsv - args['output'] = options[:output].to_s - else - warn_exit "Unrecognized output type: "+options[:output],2 - end - - # --accept - # options[:accept] - - print "SPARQL #{service}\n" if $verbose - #args={"output"=>"text"} - SPARQL_query(service, query, query_file, usePOST, args) - exit(0) -end - -## -------- SPARQL Update - -# Update sent as a WWW form. -def SPARQL_update_by_form(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - # args? encode? - body="update="+uri_escape(update) - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = body.length.to_s - uri = URI.parse(service) - execute_post_form(uri, headers, body) -end - -# DRY - query form. -def execute_post_form(uri, headers, body) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = body - print_http_request(uri, request) - response_no_body(uri, request) -end - -def SPARQL_update(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - headers[$hContentType] = $mtSparqlUpdate - uri = URI.parse(service) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = update - print_http_request(uri, request) - response_no_body(uri, request) -end - -def cmd_sparql_update(by_raw_post=true) - # Share with cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--file REQUEST] [--service URI] 'request' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--update=FILE', '--file=FILE', 'Take update from a file') do |file| - options[:file]=file - end - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - update=nil - update_file=options[:file] - - if update_file.nil? && ARGV.size == 0 - then - warn_exit 'No update specified.',1 - end - if update_file.nil? - update = ARGV.shift - if update.match(/^@/) - update_file = update[1..-1] - update = nil - end - end - - print "SPARQL-Update #{service}\n" if $verbose - args={} - - # Reads in the file :-( - if update.nil? - then - update = open(update_file, 'rb'){|f| f.read} - else - update = string_or_file(update) - end - - if by_raw_post - SPARQL_update(service, update, args) - else - SPARQL_update_by_form(service, update, args) - end - exit(0) -end - -## ------- - -case $cmd -when "s-http", "sparql-http", "soh" - $banner="#{$cmd} [get|post|put|delete] datasetURI graph [file]" - cmd_soh -when "s-get", "s-head", "s-put", "s-delete", "s-post" - - case $cmd - when "s-get", "s-head", "s-delete" - $banner="#{$cmd} datasetURI graph" - when "s-put", "s-post" - $banner="#{$cmd} datasetURI graph file" - end - cmd2 = $cmd.sub(/^s-/, '').upcase - cmd_soh cmd2 - -when "s-query", "sparql-query" - cmd_sparql_query -when "s-update", "sparql-update" - cmd_sparql_update true -when "s-update-form", "sparql-update-form" - cmd_sparql_update false -else - warn_exit "Unknown: "+$cmd, 1 -end
http://git-wip-us.apache.org/repos/asf/jena/blob/662cf71d/jena-fuseki/soh ---------------------------------------------------------------------- diff --git a/jena-fuseki/soh b/jena-fuseki/soh deleted file mode 100755 index 4f6590d..0000000 --- a/jena-fuseki/soh +++ /dev/null @@ -1,713 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# SPARQL HTTP Update, client. - -require 'optparse' -require 'net/http' -require 'uri' -require 'cgi' -require 'pp' -require 'ostruct' - -# ToDo -# Allow a choice of media type for GET -# --accept "content-type" (and abbreviations) -# --header "Add:this" -# --user, --password -# Basic authentication: request.basic_auth("username", "password") -# Follow redirects => 301: puts response["location"] # All headers are lowercase? - -SOH_NAME="SOH" -SOH_VERSION="0.0.0" - -$proxy = ENV['http_proxy'] ? URI.parse(ENV['http_proxy']) : OpenStruct.new - -# What about direct naming? - -# Names -$mtTurtle = 'text/turtle;charset=utf-8' -$mtRDF = 'application/rdf+xml' -$mtText = 'text/plain' -$mtNTriples = 'application/n-triples' -$mtNQuads = 'application/n-quads' -$mtJSONLD = 'application/ld+json' -$mtTriG = 'application/trig' -$mtSparqlResultsX = 'application/sparql-results+xml' -$mtSparqlResultsJ = 'application/sparql-results+json' -$mtAppJSON = 'application/json' -$mtAppXML = 'application/xml' -$mtSparqlResultsTSV = 'application/sparql-results+tsv' -$mtSparqlResultsCSV = 'application/sparql-results+csv' -$mtSparqlUpdate = 'application/sparql-update' -$mtWWWForm = 'application/x-www-form-urlencoded' -$mtSparqlQuery = "application/sparql-query" ; - -# Global media type table. -$fileMediaTypes = {} -$fileMediaTypes['ttl'] = $mtTurtle -$fileMediaTypes['n3'] = 'text/n3; charset=utf-8' -$fileMediaTypes['nt'] = $mtText -$fileMediaTypes['rdf'] = $mtRDF -$fileMediaTypes['owl'] = $mtRDF -$fileMediaTypes['nq'] = $mtNQuads -$fileMediaTypes['trig'] = $mtTriG -$fileMediaTypes['json-ld'] = $mtJSONLD -$fileMediaTypes['jsonld'] = $mtJSONLD - -# Global charset : no entry means "don't set" -$charsetUTF8 = 'utf-8' -$charset = {} -$charset[$mtTurtle] = 'utf-8' -$charset[$mtText] = 'ascii' -$charset[$mtTriG] = 'utf-8' -$charset[$mtNQuads] = 'utf-8' - -# Headers - -$hContentType = 'Content-Type' -# $hContentEncoding = 'Content-Encoding' -$hContentLength = 'Content-Length' -# $hContentLocation = 'Content-Location' -# $hContentRange = 'Content-Range' - -$hAccept = 'Accept' -$hAcceptCharset = 'Accept-Charset' -$hAcceptEncoding = 'Accept-Encoding' -$hAcceptRanges = 'Accept-Ranges' - -$headers = { "User-Agent" => "#{SOH_NAME}/Fuseki #{SOH_VERSION}"} -$print_http = false - -# Default for GET -# At least allow anything (and hope!) -$accept_rdf="#{$mtTurtle} , #{$mtNTriples};q=0.9 , #{$mtRDF};q=0.8 , #{$mtJSONLD};q=0.5" -# Datasets -$accept_ds="#{$mtTrig} , #{$mtNQuads};q=0.9 , #{$mtJSONLD};q=0.5" -# For SPARQL query -$accept_results="#{$mtSparqlResultsJ} , #{$mtSparqlResultsX};q=0.9 , #{$accept_rdf}" - -# Accept any in case of trouble. -$accept_rdf="#{$accept_rdf} , */*;q=0.1" -$accept_results="#{$accept_results} , */*;q=0.1" - -# The media type usually forces the charset. -$accept_charset=nil - -## Who we are. -## Two styles: -## s-query ..... -## soh query ..... - -$cmd = File.basename($0) -if $cmd == 'soh' -then - $cmd = (ARGV.size == 0) ? 'soh' : ARGV.shift -end - -if ! $cmd.start_with?('s-') && $cmd != 'soh' - $cmd = 's-'+$cmd -end - -## -------- - -def GET(dataset, graph) - print "GET #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - get_worker(requestURI, headers) -end - -def get_worker(requestURI, headers) - uri = URI.parse(requestURI) - request = Net::HTTP::Get.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_print_body(uri, request) -end - -def HEAD(dataset, graph) - print "HEAD #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - headers = {} - headers.merge!($headers) - headers[$hAccept] = $accept_rdf - headers[$hAcceptCharset] = $accept_charset unless $accept_charset.nil? - uri = URI.parse(requestURI) - request = Net::HTTP::Head.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def PUT(dataset, graph, file) - print "PUT #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Put) -end - -def POST(dataset, graph, file) - print "POST #{dataset} #{graph} #{file}\n" if $verbose - send_body(dataset, graph, file, Net::HTTP::Post) -end - -def DELETE(dataset, graph) - print "DELETE #{dataset} #{graph}\n" if $verbose - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - request = Net::HTTP::Delete.new(uri.request_uri) - headers = {} - headers.merge!($headers) - request.initialize_http_header(headers) - print_http_request(uri, request) - response_no_body(uri, request) -end - -def uri_escape(string) - CGI.escape(string) -end - -def target(dataset, graph) - return dataset+"?default" if graph == "default" - return dataset+"?graph="+uri_escape(graph) -end - -def send_body(dataset, graph, file, method) - mt = content_type(file) - headers = {} - headers.merge!($headers) - headers[$hContentType] = mt - headers[$hContentLength] = File.size(file).to_s - ## p headers - - requestURI = target(dataset, graph) - uri = URI.parse(requestURI) - - request = method.new(uri.request_uri) - request.initialize_http_header(headers) - print_http_request(uri, request) - request.body_stream = File.open(file) - response_no_body(uri, request) -end - -def response_no_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue Exception => e - # puts e.message - #puts e.backtrace.inspect - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - response = http.request(request) - print_http_response(response) - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code} #{response.message} #{uri}", 9 - # Unreachable - response.error! - end - # NO BODY IN RESPONSE -end - -def response_print_body(uri, request) - http = Net::HTTP::Proxy($proxy.host,$proxy.port).new(uri.host, uri.port) - http.read_timeout = nil - # check we can connect. - begin http.start - rescue => e - #puts e.backtrace.inspect - #print e.class - warn_exit "Failed to connect: #{uri.host}:#{uri.port}: #{e.message}", 3 - end - - # Add a blank line if headers were output. - print "\n" if $http_print ; - - begin - response = http.request(request) { |res| - print_http_response(res) - #puts res.code - res.read_body do |segment| - print segment - end - } - case response - when Net::HTTPSuccess, Net::HTTPRedirection - # OK - when Net::HTTPNotFound - warn_exit "404 Not found: #{uri}", 9 - #print response.body - else - warn_exit "#{response.code}: #{uri}", 9 - # Unreachable - response.error! - end - rescue EOFError => e - warn_exit "IO Error: "+e.message, 3 - end -end - -def print_http_request(uri, request) - return unless $print_http - #print "Request\n" - print request.method," ",uri, "\n" - print_headers(" ",request) -end - -def print_http_response(response) - return unless $print_http - #print "Response\n" - print response.code, " ", response.message, "\n" - print_headers(" ",response) -end - -def print_headers(marker, headers) - headers.each do |k,v| - k = k.split('-').map{|w| w.capitalize}.join('-')+':' - printf "%s%-20s %s\n",marker,k,v - end -end - -def content_type(file) - file =~ /\.([^.]*)$/ - ext = $1 - mt = $fileMediaTypes[ext] - cs = $charset[mt] - mt = mt+';charset='+cs if ! cs.nil? - return mt -end - -def charset(content_type) - return $charset[content_type] -end - -def warn_exit(msg, rc) - warn msg - exit rc ; -end - -def parseURI(uri_string) - begin - return URI.parse(uri_string).to_s - rescue URI::InvalidURIError => err - warn_exit "Bad URI: <#{uri_string}>", 2 - end -end - -## ---- Command - -def cmd_soh(command=nil) - ## Command line - options = {} - optparse = OptionParser.new do |opts| - # Set a banner, displayed at the top - # of the help screen. - case $cmd - when "s-http", "sparql-http", "soh" - banner="$cmd [get|post|put|delete] datasetURI graph [file]" - when "s-get", "s-head", "s-delete" - banner="$cmd datasetURI graph" - end - - opts.banner = $banner - # Define the options, and what they do - - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - - options[:version] = false - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - - # This displays the help screen, all programs are - # assumed to have this option. - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - if command.nil? - if ARGV.size == 0 - warn "No command given: expected one of 'get', 'put', 'post', 'delete', 'query' or 'update'" - exit 1 - end - cmdPrint=ARGV.shift - command=cmdPrint.upcase - else - cmdPrint=command - end - - case command - when "HEAD", "GET", "DELETE" - requiredFile=false - when "PUT", "POST" - requiredFile=true - when "QUERY" - cmd_sparql_query - when "UPDATE" - cmd_sparql_update - else - warn_exit "Unknown command: #{command}", 2 - end - - if requiredFile - then - if ARGV.size != 3 - warn_exit "Required: dataset URI, graph URI (or 'default') and file", 1 - end - else - if ARGV.size != 2 - warn_exit "Required: dataset URI and graph URI (or 'default')", 1 - end - end - - dataset=parseURI(ARGV.shift) - # Relative URI? - graph=parseURI(ARGV.shift) - file="" - if requiredFile - then - file = ARGV.shift if requiredFile - if ! File.exist?(file) - warn_exit "No such file: "+file, 3 - end - if File.directory?(file) - warn_exit "File is a directory: "+file, 3 - end - end - - case command - when "GET" - GET(dataset, graph) - when "HEAD" - HEAD(dataset, graph) - when "PUT" - PUT(dataset, graph, file) - when "DELETE" - DELETE(dataset, graph) - when "POST" - POST(dataset, graph, file) - else - warn_exit "Internal error: Unknown command: #{cmd}", 2 - end - exit 0 -end - -## -------- -def string_or_file(arg) - return arg if ! arg.match(/^@/) - a=(arg[1..-1]) - open(a, 'rb'){|f| f.read} -end - -## -------- SPARQL Query - -## Choose method -def SPARQL_query(service, query, query_file, forcePOST=false, args2={}) - if ! query_file.nil? - query = open(query_file, 'rb'){|f| f.read} - end - if forcePOST || query.length >= 2*1024 - SPARQL_query_POST(service, query, args2) - else - SPARQL_query_GET(service, query, args2) - end -end - -## By GET - -def SPARQL_query_GET(service, query, args2) - args = { "query" => query } - args.merge!(args2) - qs=args.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - action="#{service}?#{qs}" - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - get_worker(action, headers) -end - -## By POST - -def SPARQL_query_POST(service, query, args2) - # DRY - body/no body for each of request and response. - post_params={ "query" => query } - post_params.merge!(args2) - uri = URI.parse(service) - headers={} - headers.merge!($headers) - headers[$hAccept]=$accept_results - execute_post_form_body(uri, headers, post_params) -end - -def execute_post_form_body(uri, headers, post_params) - request = Net::HTTP::Post.new(uri.request_uri) - qs=post_params.collect { |k,v| "#{k}=#{uri_escape(v)}" }.join('&') - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = qs.length.to_s - request.initialize_http_header(headers) - request.body = qs - print_http_request(uri, request) - response_print_body(uri, request) -end - -# Usage: -v --help --file= --query= -def cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--query QUERY] [--service URI] [--post] 'query' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--query=FILE','--file=FILE', 'Take query from a file') do |file| - options[:file]=file - end - opts.on('--output=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the output argument') do |type| - options[:output]=type - end - opts.on('--accept=TYPE', [:json,:xml,:text,:csv,:tsv], - 'Set the accept header type') do |type| - options[:accept]=type - end - options[:verbose] = false - opts.on( '--post', 'Force use of POST' ) do - options[:post] = true - end - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e - warn e - exit 1 - end - - $verbose = options[:verbose] - $print_http = $verbose - usePOST = options[:post] - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - # Query - query=nil - query_file=options[:file] - if query_file.nil? && ARGV.size == 0 - then - warn_exit 'No query specified.',1 - end - if query_file.nil? - query = ARGV.shift - if query.match(/^@/) - query_file = query[1..-1] - query = nil - end - end - - # --output ==> output= (non-standard) - args={} - case options[:output] - when nil - when "json","xml","text","csv","tsv" - args['output'] = options[:output] - when :json,:xml,:text,:csv,:tsv - args['output'] = options[:output].to_s - else - warn_exit "Unrecognized output type: "+options[:output],2 - end - - # --accept - # options[:accept] - - print "SPARQL #{service}\n" if $verbose - #args={"output"=>"text"} - SPARQL_query(service, query, query_file, usePOST, args) - exit(0) -end - -## -------- SPARQL Update - -# Update sent as a WWW form. -def SPARQL_update_by_form(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - # args? encode? - body="update="+uri_escape(update) - headers[$hContentType] = $mtWWWForm - headers[$hContentLength] = body.length.to_s - uri = URI.parse(service) - execute_post_form(uri, headers, body) -end - -# DRY - query form. -def execute_post_form(uri, headers, body) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = body - print_http_request(uri, request) - response_no_body(uri, request) -end - -def SPARQL_update(service, update, args2={}) - args = {} - args.merge!(args2) - headers={} - headers.merge!($headers) - headers[$hContentType] = $mtSparqlUpdate - uri = URI.parse(service) - request = Net::HTTP::Post.new(uri.request_uri) - request.initialize_http_header(headers) - request.body = update - print_http_request(uri, request) - response_no_body(uri, request) -end - -def cmd_sparql_update(by_raw_post=true) - # Share with cmd_sparql_query - options={} - optparse = OptionParser.new do |opts| - opts.banner = "Usage: #{$cmd} [--file REQUEST] [--service URI] 'request' | @file" - opts.on('--service=URI', '--server=URI', 'SPARQL endpoint') do |uri| - options[:service]=uri - end - opts.on('--update=FILE', '--file=FILE', 'Take update from a file') do |file| - options[:file]=file - end - options[:verbose] = false - opts.on( '-v', '--verbose', 'Verbose' ) do - options[:verbose] = true - end - opts.on( '--version', 'Print version and exit' ) do - print "#{SOH_NAME} #{SOH_VERSION}\n" - exit - end - opts.on( '-h', '--help', 'Display this screen and exit' ) do - puts opts - exit - end - end - - begin optparse.parse! - rescue OptionParser::InvalidArgument => e - warn e - exit - end - - $verbose = options[:verbose] - $print_http = $verbose - - service = options[:service] - warn_exit 'No service specified. Required --service=URI',1 if service.nil? - - update=nil - update_file=options[:file] - - if update_file.nil? && ARGV.size == 0 - then - warn_exit 'No update specified.',1 - end - if update_file.nil? - update = ARGV.shift - if update.match(/^@/) - update_file = update[1..-1] - update = nil - end - end - - print "SPARQL-Update #{service}\n" if $verbose - args={} - - # Reads in the file :-( - if update.nil? - then - update = open(update_file, 'rb'){|f| f.read} - else - update = string_or_file(update) - end - - if by_raw_post - SPARQL_update(service, update, args) - else - SPARQL_update_by_form(service, update, args) - end - exit(0) -end - -## ------- - -case $cmd -when "s-http", "sparql-http", "soh" - $banner="#{$cmd} [get|post|put|delete] datasetURI graph [file]" - cmd_soh -when "s-get", "s-head", "s-put", "s-delete", "s-post" - - case $cmd - when "s-get", "s-head", "s-delete" - $banner="#{$cmd} datasetURI graph" - when "s-put", "s-post" - $banner="#{$cmd} datasetURI graph file" - end - cmd2 = $cmd.sub(/^s-/, '').upcase - cmd_soh cmd2 - -when "s-query", "sparql-query" - cmd_sparql_query -when "s-update", "sparql-update" - cmd_sparql_update true -when "s-update-form", "sparql-update-form" - cmd_sparql_update false -else - warn_exit "Unknown: "+$cmd, 1 -end http://git-wip-us.apache.org/repos/asf/jena/blob/662cf71d/jena-fuseki/src-dev/dev/RunFuseki.java ---------------------------------------------------------------------- diff --git a/jena-fuseki/src-dev/dev/RunFuseki.java b/jena-fuseki/src-dev/dev/RunFuseki.java deleted file mode 100644 index 74f678c..0000000 --- a/jena-fuseki/src-dev/dev/RunFuseki.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package dev; - -import org.apache.jena.fuseki.FusekiCmd ; - -public class RunFuseki -{ - public static void main(String[] args) - { - //demo() ; - //FusekiCmd.main("--config=config.ttl") ; System.exit(0) ; - main1() ; - } - - public static void demo() - { - String DIR="DemoServer" ; - FusekiCmd.main("--config="+name(DIR,"config.ttl"), "--pages="+name(DIR, "demo-pages")) ; - System.exit(0) ; - } - - public static String name(String DIR, String filename) - { - StringBuilder sb = new StringBuilder() ; - if ( ! filename.startsWith("/") ) - { - sb.append(DIR) ; - if ( ! DIR.endsWith("/") ) - sb.append("/") ; - } - sb.append(filename) ; - return sb.toString() ; - } - - private static void main1() - { - String tmpdir = System.getenv("TMPDIR") ; - if ( tmpdir == null ) - tmpdir = System.getenv("TMP") ; - if ( tmpdir == null ) - tmpdir = System.getenv("HOME")+"/tmp" ; - if ( ! tmpdir.endsWith("/") ) - tmpdir = tmpdir+"/" ; - - FusekiCmd.main( - // "-v", - "--mem", "--update", "/ds" - //"--update", "--loc="+tmpdir+"DB", "--set=tdb:unionDefaultGraph=true", "/ds" - //"--update", "--mem", "/ds" - - //"--update", "--memtdb", "--set=tdb:unionDefaultGraph=true", "/ds" - - //"--debug", - //"--update", - //"--timeout=1000,5000", - //"--set=arq:queryTimeout=1000", - //"--port=3030", - //"--mgtPort=3031", - //"--mem", - //"--home=/home/afs/Projects/Fuseki", - //"--loc=DB", - //"--file=D.nt", - //"--gzip=no", - //"--desc=desc.ttl", - //--pages= - //"--jetty-config=jetty-fuseki.xml", - //"--config=config-tdb.ttl" - // "/ds" - ) ; - System.exit(0) ; - } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/662cf71d/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java ---------------------------------------------------------------------- diff --git a/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java b/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java deleted file mode 100644 index c24f7e3..0000000 --- a/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki; - -import static org.apache.jena.riot.WebContent.* ; -import org.apache.jena.atlas.web.AcceptList ; -import org.apache.jena.atlas.web.MediaType ; - -public class DEF -{ - public static final MediaType acceptRDFXML = MediaType.create(contentTypeRDFXML) ; - public static final MediaType acceptNQuads = MediaType.create(contentTypeNQuads) ; - public static final MediaType acceptRSXML = MediaType.create(contentTypeResultsXML) ; - - public static final AcceptList rdfOffer = AcceptList.create(contentTypeTurtle, - contentTypeTurtleAlt1, - contentTypeTurtleAlt2, - contentTypeNTriples, - contentTypeNTriplesAlt, - contentTypeRDFXML, - contentTypeJSONLD, - contentTypeRDFJSON, - contentTypeRDFThrift - ) ; - - public static final AcceptList quadsOffer = AcceptList.create(contentTypeTriG, - contentTypeTriGAlt1, - contentTypeTriGAlt2, - contentTypeJSONLD, - contentTypeNQuads, - contentTypeNQuadsAlt1, - contentTypeNQuadsAlt2 - ) ; - - public static final AcceptList rsOfferTable = AcceptList.create(contentTypeResultsJSON, - contentTypeTextCSV, - contentTypeTextTSV, - contentTypeResultsXML, - contentTypeResultsThrift, - contentTypeTextPlain - ) ; - - public static final AcceptList rsOfferBoolean = AcceptList.create(contentTypeResultsJSON, - contentTypeTextCSV, - contentTypeTextTSV, - contentTypeResultsXML, - contentTypeTextPlain - ) ; - -} http://git-wip-us.apache.org/repos/asf/jena/blob/662cf71d/jena-fuseki/src/main/java/org/apache/jena/fuseki/EmbeddedFusekiServer.java ---------------------------------------------------------------------- diff --git a/jena-fuseki/src/main/java/org/apache/jena/fuseki/EmbeddedFusekiServer.java b/jena-fuseki/src/main/java/org/apache/jena/fuseki/EmbeddedFusekiServer.java deleted file mode 100644 index 0261b67..0000000 --- a/jena-fuseki/src/main/java/org/apache/jena/fuseki/EmbeddedFusekiServer.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki; - -import org.apache.jena.atlas.lib.FileOps ; -import org.apache.jena.fuseki.server.FusekiConfig ; -import org.apache.jena.fuseki.server.SPARQLServer ; -import org.apache.jena.fuseki.server.ServerConfig ; - -import com.hp.hpl.jena.sparql.core.DatasetGraph ; -import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ; -import com.hp.hpl.jena.tdb.TDBFactory ; - -/** Embedded (same JVM) server. - * <p>Example for one server per test suite: - * <pre> - private static EmbeddedFusekiServer server = null ; - \@BeforeClass public static void beforeClass() { - server = EmbeddedFusekiServer.createMemByPath(3030, "/test") ; - server.start() ; - \@AfterClass public static void afterClass() { - server.stop() ; - } - </pre> - */ -public class EmbeddedFusekiServer -{ - - public static EmbeddedFusekiServer mem(int port, String datasetPath) { - DatasetGraph dsg = DatasetGraphFactory.createMem() ; - return EmbeddedFusekiServer.create(port, dsg, datasetPath) ; - } - - public static EmbeddedFusekiServer memTDB(int port, String datasetPath) { - DatasetGraph dsg = TDBFactory.createDatasetGraph() ; - return EmbeddedFusekiServer.create(port, dsg, datasetPath) ; - } - - public static EmbeddedFusekiServer create(int port, DatasetGraph dsg, String datasetPath) { - ServerConfig conf = FusekiConfig.defaultConfiguration(datasetPath, dsg, true, true) ; - conf.port = port ; - conf.pagesPort = port ; - if ( ! FileOps.exists(conf.pages) ) - conf.pages = null ; - return new EmbeddedFusekiServer(conf) ; - } - - public static EmbeddedFusekiServer configure(int port, String fileConfig) { - ServerConfig conf = FusekiConfig.configure(fileConfig) ; - conf.port = port ; - conf.pagesPort = port ; - if ( ! FileOps.exists(conf.pages) ) - conf.pages = null ; - return new EmbeddedFusekiServer(conf) ; - } - - private SPARQLServer server = null ; - - public EmbeddedFusekiServer(ServerConfig conf) { - server = new SPARQLServer(conf) ; - } - - public void start() { - server.start() ; - } - - public void stop() { - server.stop() ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/662cf71d/jena-fuseki/src/main/java/org/apache/jena/fuseki/Fuseki.java ---------------------------------------------------------------------- diff --git a/jena-fuseki/src/main/java/org/apache/jena/fuseki/Fuseki.java b/jena-fuseki/src/main/java/org/apache/jena/fuseki/Fuseki.java deleted file mode 100644 index c62ba1f..0000000 --- a/jena-fuseki/src/main/java/org/apache/jena/fuseki/Fuseki.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki; - -import org.apache.jena.fuseki.server.SPARQLServer ; -import org.apache.jena.riot.RIOT ; -import org.apache.jena.riot.system.stream.LocatorFTP ; -import org.apache.jena.riot.system.stream.LocatorHTTP ; -import org.apache.jena.riot.system.stream.StreamManager ; -import org.slf4j.Logger ; -import org.slf4j.LoggerFactory ; - -import com.hp.hpl.jena.query.ARQ ; -import com.hp.hpl.jena.sparql.SystemARQ ; -import com.hp.hpl.jena.sparql.lib.Metadata ; -import com.hp.hpl.jena.sparql.mgt.SystemInfo ; -import com.hp.hpl.jena.sparql.util.Context ; -import com.hp.hpl.jena.sparql.util.MappingRegistry ; -import com.hp.hpl.jena.tdb.TDB ; -import com.hp.hpl.jena.tdb.transaction.TransactionManager ; - -/** - * <p>The main class enabling us to:</p> - * <ol> - * <li>create instances of a Fuseki server e.g. - * the ARQ, RIOT and TDB server stack</li> - * <li>get server global {@link com.hp.hpl.jena.sparql.util.Context} e.g. - * named values used to pass implementation-specific parameters across - * general interfaces.</li> - * <li>get the {@link org.apache.jena.fuseki.server.SPARQLServer} instance.</li> - * <li>set the {@link org.apache.jena.fuseki.server.SPARQLServer} instance.</li> - * - */ -public class Fuseki -{ - /** Path to ???*/ - static public String PATH = "org.apache.jena.fuseki" ; - - /** a unique IRI for the Fuseki namespace*/ - static public String FusekiIRI = "http://jena.apache.org/Fuseki" ; - - /** Fuseki home environment, usually set to $FUSEKI_HOME */ - static public String FusekiHomeEnv = "FUSEKI_HOME" ; - - /** a unique IRI including the symbol notation for which properties should be appended */ - static public String FusekiSymbolIRI = "http://jena.apache.org/fuseki#" ; - - /** ??? */ - static public String PagesStatic = "pages" ; - - /** - * TEMPORARY - this enables POST of triples to the dataset URI causing a graph to be created. - * POSTing to /dataset?graph=uri is preferred - */ - static public boolean graphStoreProtocolPostCreate = false ; - - /** an relative path to the location of <code>fuseki-properties.xml</code> file */ - static private String metadataLocation = "org/apache/jena/fuseki/fuseki-properties.xml" ; - - /** Object which holds metadata specified within {@link Fuseki#metadataLocation} */ - static private Metadata metadata = initMetadata() ; - - private static Metadata initMetadata() - { - Metadata m = new Metadata() ; - //m.addMetadata(metadataDevLocation) ; - m.addMetadata(metadataLocation) ; - return m ; - } - - /** The name of the Fuseki server. Set to the string <code>Fuseki</code> by default.*/ - static public final String NAME = "Fuseki" ; - - /** Version of this Fuseki instance */ - static public final String VERSION = metadata.get(PATH+".version", "development"); - - /** Date when Fuseki was built */ - static public final String BUILD_DATE = metadata.get(PATH+".build.datetime", "unknown") ; // call Date if unavailable. - - /** An identifier for the HTTP Fuseki server instance*/ - static public final String serverHttpName = NAME+" ("+VERSION+")" ; - - /** Actual log file for operations */ - public static final String requestLogName = PATH+".Fuseki" ; - - /** Instance of log for operations */ - public static final Logger requestLog = LoggerFactory.getLogger(requestLogName) ; - - /** Actual log file for general server messages.*/ - public static final String serverLogName = PATH+".Server" ; - - /** Instance of log for general server messages */ - public static final Logger serverLog = LoggerFactory.getLogger(serverLogName) ; - - /** Actual log file for config server messages. */ - public static final String configLogName = PATH+".Config" ; - - /** Instance of log for config server message s*/ - public static final Logger configLog = LoggerFactory.getLogger(configLogName) ; - - /** Instance of log for config server message s*/ - public static boolean verboseLogging = false ; - - /** An instance of management for stream opening, including redirecting through a - * location mapper whereby a name (e.g. URL) is redirected to another name (e.g. local file). - * */ - public static final StreamManager webStreamManager ; - static { - webStreamManager = new StreamManager() ; - // Only know how to handle http and ftp URLs - nothing local. - webStreamManager.addLocator(new LocatorHTTP()) ; - webStreamManager.addLocator(new LocatorFTP()) ; - } - - private static boolean initialized = false ; - - /** - * Initialize an instance of the Fuseki server stack. - */ - public synchronized static void init() - { - if ( initialized ) - return ; - initialized = true ; - ARQ.init() ; - SystemInfo sysInfo = new SystemInfo(FusekiIRI, PATH, VERSION, BUILD_DATE) ; - SystemARQ.registerSubSystem(sysInfo) ; - RIOT.init() ; - TDB.init() ; - MappingRegistry.addPrefixMapping("fuseki", FusekiSymbolIRI) ; - - TDB.setOptimizerWarningFlag(false) ; - // Don't set TDB batch commits. - // This can be slower, but it less memory hungry and more predictable. - TransactionManager.QueueBatchSize = 0 ; - } - - /** - * Get server global {@link com.hp.hpl.jena.sparql.util.Context}. - * @return {@link com.hp.hpl.jena.query.ARQ#getContext()} - */ - public static Context getContext() - { - return ARQ.getContext() ; - } - - // Temporary ... - private static SPARQLServer server ; - - /** set/specify the {@link org.apache.jena.fuseki.server.SPARQLServer} instance.*/ - public static void setServer(SPARQLServer _server) { server = _server ; } - - /** get the {@link org.apache.jena.fuseki.server.SPARQLServer} instance. */ - public static SPARQLServer getServer() { return server ; } - - // Force a call to init. - static { init() ; } -} http://git-wip-us.apache.org/repos/asf/jena/blob/662cf71d/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiCmd.java ---------------------------------------------------------------------- diff --git a/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiCmd.java b/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiCmd.java deleted file mode 100644 index 77bafe8..0000000 --- a/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiCmd.java +++ /dev/null @@ -1,508 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki; - -import static org.apache.jena.fuseki.Fuseki.serverLog ; - -import java.io.File ; -import java.io.InputStream ; -import java.util.List ; - -import org.apache.jena.atlas.io.IO ; -import org.apache.jena.atlas.lib.FileOps ; -import org.apache.jena.atlas.lib.Lib ; -import org.apache.jena.atlas.lib.StrUtils ; -import org.apache.jena.atlas.logging.LogCtl ; -import org.apache.jena.fuseki.mgt.ManagementServer ; -import org.apache.jena.fuseki.server.FusekiConfig ; -import org.apache.jena.fuseki.server.SPARQLServer ; -import org.apache.jena.fuseki.server.ServerConfig ; -import org.apache.jena.riot.Lang ; -import org.apache.jena.riot.RDFDataMgr ; -import org.apache.jena.riot.RDFLanguages ; -import org.apache.jena.riot.SysRIOT ; -import org.eclipse.jetty.server.Server ; -import org.slf4j.Logger ; -import arq.cmd.CmdException ; -import arq.cmdline.ArgDecl ; -import arq.cmdline.CmdARQ ; -import arq.cmdline.ModDatasetAssembler ; - -import com.hp.hpl.jena.query.ARQ ; -import com.hp.hpl.jena.query.Dataset ; -import com.hp.hpl.jena.sparql.core.DatasetGraph ; -import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ; -import com.hp.hpl.jena.tdb.TDB ; -import com.hp.hpl.jena.tdb.TDBFactory ; -import com.hp.hpl.jena.tdb.sys.Names ; -import com.hp.hpl.jena.tdb.transaction.TransactionManager ; - -public class FusekiCmd extends CmdARQ -{ - private static String log4Jsetup = StrUtils.strjoinNL( - "## Plain output to stdout" - , "log4j.appender.jena.plain=org.apache.log4j.ConsoleAppender" - , "log4j.appender.jena.plain.target=System.out" - , "log4j.appender.jena.plain.layout=org.apache.log4j.PatternLayout" - , "log4j.appender.jena.plain.layout.ConversionPattern=%d{HH:mm:ss} %-5p %m%n" - - , "## Plain output with level, to stderr" - , "log4j.appender.jena.plainlevel=org.apache.log4j.ConsoleAppender" - , "log4j.appender.jena.plainlevel.target=System.err" - , "log4j.appender.jena.plainlevel.layout=org.apache.log4j.PatternLayout" - , "log4j.appender.jena.plainlevel.layout.ConversionPattern=%d{HH:mm:ss} %-5p %m%n" - - , "## Everything" - , "log4j.rootLogger=INFO, jena.plain" - , "log4j.logger.com.hp.hpl.jena=WARN" - , "log4j.logger.org.openjena=WARN" - , "log4j.logger.org.apache.jena=WARN" - - , "# Server log." - , "log4j.logger.org.apache.jena.fuseki.Server=INFO" - , "# Request log." - , "log4j.logger.org.apache.jena.fuseki.Fuseki=INFO" - , "log4j.logger.org.apache.jena.tdb.loader=INFO" - , "log4j.logger.org.eclipse.jetty=ERROR" - - , "## Parser output" - , "log4j.additivity."+SysRIOT.riotLoggerName+"=false" - , "log4j.logger."+SysRIOT.riotLoggerName+"=INFO, jena.plainlevel " - ) ; - - - // Set logging. - // 1/ Use log4j.configuration is defined. - // 2/ Use file:log4j.properties - // 3/ Use Built in. - - static void setLogging() { - // No loggers have been created but configuration may have been set up. - String x = System.getProperty("log4j.configuration", null) ; - - if ( x != null && ! x.equals("set") ) { - // "set" indicates that CmdMain set logging. - // Use standard log4j initialization. - return ; - } - - String fn = "log4j.properties" ; - File f = new File(fn) ; - if ( f.exists() ) { - // Use file log4j.properties - System.setProperty("log4j.configuration", "file:"+fn) ; - return ; - } - // Use built-in for Fuseki. - LogCtl.resetLogging(log4Jsetup) ; - } - - static { setLogging() ; } - - // Arguments: - // --update - - // Specific switches: - - // --admin=on/off - - // --http-update - // --http-get - - // --sparql-query - // --sparql-update - - // pages/validators/ - // pages/control/ - // pages/query/ or /pages/sparql/ - - 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 argUber = new ArgDecl(ArgDecl.NoValue, "uber", "über") ; // Use the überservlet (experimental) - private static ArgDecl argBasicAuth = new ArgDecl(ArgDecl.HasValue, "basic-auth") ; - - private static ArgDecl argGSP = new ArgDecl(ArgDecl.NoValue, "gsp") ; // GSP compliance mode - - 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() ; - - // fuseki [--mem|--desc assembler.ttl] [--port PORT] **** /datasetURI - - static public void main(String...argv) - { - // Just to make sure ... - ARQ.init() ; - TDB.init() ; - Fuseki.init() ; - new FusekiCmd(argv).mainRun() ; - } - - private int port = 3030 ; - private int mgtPort = -1 ; - private boolean listenLocal = false ; - - private DatasetGraph dsg = null ; - private String datasetPath = null ; - private boolean allowUpdate = false ; - - private String fusekiConfigFile = null ; - private boolean enableCompression = true ; - private String jettyConfigFile = null ; - private String authConfigFile = null ; - private String homeDir = null ; - private String pagesDir = null ; - - public FusekiCmd(String...argv) - { - super(argv) ; - - if ( false ) - // Consider ... - TransactionManager.QueueBatchSize = TransactionManager.QueueBatchSize / 2 ; - - getUsage().startCategory("Fuseki") ; - addModule(modDataset) ; - add(argMem, "--mem", "Create an in-memory, non-persistent dataset for the server") ; - add(argFile, "--file=FILE", "Create an in-memory, non-persistent dataset for the server, initialised with the contents of the file") ; - add(argTDB, "--loc=DIR", "Use an existing TDB database (or create if does not exist)") ; - add(argMemTDB, "--memTDB", "Create an in-memory, non-persistent dataset using TDB (testing only)") ; - add(argPort, "--port", "Listen on this port number") ; - add(argPages, "--pages=DIR", "Set of pages to serve as static content") ; - // Set via jetty config file. - add(argLocalhost, "--localhost", "Listen only on the localhost interface") ; - add(argTimeout, "--timeout=", "Global timeout applied to queries (value in ms) -- format is X[,Y] ") ; - add(argAllowUpdate, "--update", "Allow updates (via SPARQL Update and SPARQL HTTP Update)") ; - add(argFusekiConfig, "--config=", "Use a configuration file to determine the services") ; - add(argJettyConfig, "--jetty-config=FILE", "Set up the server (not services) with a Jetty XML file") ; - add(argBasicAuth, "--basic-auth=FILE", "Configure basic auth using provided Jetty realm file, ignored if --jetty-config is used") ; - add(argMgtPort, "--mgtPort=port", "Enable the management commands on the given port") ; - add(argHome, "--home=DIR", "Root of Fuseki installation (overrides environment variable FUSEKI_HOME)") ; - add(argGZip, "--gzip=on|off", "Enable GZip compression (HTTP Accept-Encoding) if request header set") ; - - add(argUber) ; - //add(argGSP) ; - - super.modVersion.addClass(TDB.class) ; - super.modVersion.addClass(Fuseki.class) ; - } - - static String argUsage = "[--config=FILE] [--mem|--desc=AssemblerFile|--file=FILE] [--port PORT] /DatasetPathName" ; - - @Override - protected String getSummary() - { - return getCommandName()+" "+argUsage ; - } - - @Override - protected void processModulesAndArgs() - { - int x = 0 ; - - Logger log = Fuseki.serverLog ; - - if ( contains(argFusekiConfig) ) - fusekiConfigFile = getValue(argFusekiConfig) ; - - ArgDecl assemblerDescDecl = new ArgDecl(ArgDecl.HasValue, "desc", "dataset") ; - if ( contains(argMem) ) x++ ; - if ( contains(argFile) ) x++ ; - if ( contains(assemblerDescDecl) ) x++ ; - if ( contains(argTDB) ) x++ ; - if ( contains(argMemTDB) ) x++ ; - - if ( fusekiConfigFile != null ) - { - if ( x >= 1 ) - throw new CmdException("Dataset specified on the command line but a configuration file also given.") ; - } - else - { - if ( x != 1 ) - throw new CmdException("Required: either --config=FILE or one of --mem, --file, --loc or --desc") ; - } - - // One of: - // argMem, argFile, argMemTDB, argTDB, - - - if ( contains(argMem) ) - { - log.info("Dataset: in-memory") ; - dsg = DatasetGraphFactory.createMem() ; - } - if ( contains(argFile) ) - { - dsg = DatasetGraphFactory.createMem() ; - // replace by RiotLoader after ARQ refresh. - String filename = getValue(argFile) ; - log.info("Dataset: in-memory: load file: "+filename) ; - if ( ! FileOps.exists(filename) ) - throw new CmdException("File not found: "+filename) ; - - Lang language = RDFLanguages.filenameToLang(filename) ; - if ( language == null ) - throw new CmdException("Can't guess language for file: "+filename) ; - InputStream input = IO.openFile(filename) ; - - if ( RDFLanguages.isQuads(language) ) - RDFDataMgr.read(dsg, filename) ; - else - RDFDataMgr.read(dsg.getDefaultGraph(), filename) ; - } - - if ( contains(argMemTDB) ) - { - log.info("TDB dataset: in-memory") ; - dsg = TDBFactory.createDatasetGraph() ; - } - - if ( contains(argTDB) ) - { - 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) ; - } - dsg = TDBFactory.createDatasetGraph(dir) ; - } - - // Otherwise - if ( contains(assemblerDescDecl) ) - { - log.info("Dataset from assembler") ; - Dataset ds = modDataset.createDataset() ; - if ( ds != null ) - dsg = ds.asDatasetGraph() ; - } - - if ( contains(argFusekiConfig) ) - { - if ( dsg != null ) - throw new CmdException("(internal error) Dataset specificed on the command line but a a configuration file also given.") ; - fusekiConfigFile = getValue(argFusekiConfig) ; - } - - if ( contains(argPort) ) - { - String portStr = getValue(argPort) ; - try { - port = Integer.parseInt(portStr) ; - } catch (NumberFormatException ex) - { - throw new CmdException(argPort.getKeyName()+" : bad port number: "+portStr) ; - } - } - - if ( contains(argMgtPort) ) - { - String mgtPortStr = getValue(argMgtPort) ; - try { - mgtPort = Integer.parseInt(mgtPortStr) ; - } catch (NumberFormatException ex) - { - throw new CmdException(argMgtPort.getKeyName()+" : bad port number: "+mgtPortStr) ; - } - } - - if ( contains(argLocalhost) ) - listenLocal = true ; - - if ( fusekiConfigFile == null && dsg == null ) - throw new CmdException("No dataset defined and no configuration file: "+argUsage) ; - - if ( dsg != null ) - { - if ( getPositional().size() == 0 ) - throw new CmdException("No dataset path name given") ; - if ( getPositional().size() > 1 ) - throw new CmdException("Multiple dataset path names given") ; - datasetPath = getPositionalArg(0) ; - if ( datasetPath.length() > 0 && ! datasetPath.startsWith("/") ) - throw new CmdException("Dataset path name must begin with a /: "+datasetPath) ; - - allowUpdate = contains(argAllowUpdate) ; - } - - if ( contains(argTimeout) ) - { - String str = getValue(argTimeout) ; - ARQ.getContext().set(ARQ.queryTimeout, str) ; - } - - if ( contains(argJettyConfig) ) - { - jettyConfigFile = getValue(argJettyConfig) ; - if ( !FileOps.exists(jettyConfigFile) ) - throw new CmdException("No such file: "+jettyConfigFile) ; - } - - if ( contains(argBasicAuth) ) - { - authConfigFile = getValue(argBasicAuth) ; - if ( !FileOps.exists(authConfigFile) ) - throw new CmdException("No such file: " + authConfigFile) ; - } - - if ( contains(argHome) ) - { - List<String> args = super.getValues(argHome) ; - homeDir = args.get(args.size()-1) ; - } - - if ( contains(argPages) ) - { - List<String> args = super.getValues(argPages) ; - pagesDir = args.get(args.size()-1) ; - } - - if ( contains(argGZip) ) - { - if ( ! hasValueOfTrue(argGZip) && ! hasValueOfFalse(argGZip) ) - throw new CmdException(argGZip.getNames().get(0)+": Not understood: "+getValue(argGZip)) ; - enableCompression = super.hasValueOfTrue(argGZip) ; - } - - if ( contains(argUber) ) - SPARQLServer.überServlet = true ; - - if ( contains(argGSP) ) - { - SPARQLServer.überServlet = true ; - Fuseki.graphStoreProtocolPostCreate = true ; - } - - } - - private static String sort_out_dir(String path) - { - path.replace('\\', '/') ; - if ( ! path.endsWith("/")) - path = path +"/" ; - return path ; - } - - @Override - protected void exec() - { - if ( homeDir == null ) - { - if ( System.getenv(Fuseki.FusekiHomeEnv) != null ) - homeDir = System.getenv(Fuseki.FusekiHomeEnv) ; - else - homeDir = "." ; - } - - homeDir = sort_out_dir(homeDir) ; - Fuseki.configLog.info("Home Directory: " + FileOps.fullDirectoryPath(homeDir)); - if ( ! FileOps.exists(homeDir) ) - Fuseki.configLog.warn("No such directory for Fuseki home: "+homeDir) ; - - String staticContentDir = pagesDir ; - if ( staticContentDir == null ) - staticContentDir = homeDir+Fuseki.PagesStatic ; - - Fuseki.configLog.debug("Static Content Directory: "+ FileOps.fullDirectoryPath(staticContentDir)) ; - - if ( ! FileOps.exists(staticContentDir) ) { - Fuseki.configLog.warn("No such directory for static content: " + FileOps.fullDirectoryPath(staticContentDir)) ; - Fuseki.configLog.warn("You may need to set the --pages or --home option to configure static content correctly"); - } - - if ( jettyConfigFile != null ) - Fuseki.configLog.info("Jetty configuration: "+jettyConfigFile) ; - - ServerConfig serverConfig ; - - if ( fusekiConfigFile != null ) - { - Fuseki.configLog.info("Configuration file: "+fusekiConfigFile) ; - serverConfig = FusekiConfig.configure(fusekiConfigFile) ; - } - else - { - serverConfig = FusekiConfig.defaultConfiguration(datasetPath, dsg, allowUpdate, listenLocal) ; - if ( ! allowUpdate ) - Fuseki.serverLog.info("Running in read-only mode."); - } - - // TODO Get from parsing config file. - serverConfig.port = port ; - serverConfig.pages = staticContentDir ; - serverConfig.mgtPort = mgtPort ; - serverConfig.pagesPort = port ; - serverConfig.loopback = listenLocal ; - serverConfig.enableCompression = enableCompression ; - serverConfig.jettyConfigFile = jettyConfigFile ; - serverConfig.authConfigFile = authConfigFile ; - serverConfig.verboseLogging = ( super.isVerbose() || super.isDebug() ) ; - - SPARQLServer server = new SPARQLServer(serverConfig) ; - - // Temporary - Fuseki.setServer(server) ; - - Server mgtServer = null ; - - if ( mgtPort > 0 ) - { - Fuseki.configLog.info("Management services on port "+mgtPort) ; - mgtServer = ManagementServer.createManagementServer(mgtPort) ; - try { mgtServer.start() ; } - catch (java.net.BindException ex) - { serverLog.error("SPARQLServer: Failed to start management server: " + ex.getMessage()) ; System.exit(1) ; } - catch (Exception ex) - { serverLog.error("SPARQLServer: Failed to start management server: " + ex.getMessage(), ex) ; System.exit(1) ; } - } - - server.start() ; - try { server.getServer().join() ; } catch (Exception ex) {} - - if ( mgtServer != null ) - { - try { mgtServer.stop() ; } - catch (Exception e) { serverLog.warn("Failed to cleanly stop the management server", e) ; } - } - System.exit(0) ; - } - - - @Override - protected String getCommandName() - { - return "fuseki" ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/662cf71d/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiConfigException.java ---------------------------------------------------------------------- diff --git a/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiConfigException.java b/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiConfigException.java deleted file mode 100644 index 5e1b018..0000000 --- a/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiConfigException.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki; - - -public class FusekiConfigException extends FusekiException -{ - public FusekiConfigException(String msg, Throwable cause) { super(msg, cause) ; } - public FusekiConfigException(String msg) { super(msg) ; } - public FusekiConfigException(Throwable cause) { super(cause) ; } - public FusekiConfigException() { super() ; } -} http://git-wip-us.apache.org/repos/asf/jena/blob/662cf71d/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiException.java ---------------------------------------------------------------------- diff --git a/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiException.java b/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiException.java deleted file mode 100644 index 04953ce..0000000 --- a/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiException.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki; - -import com.hp.hpl.jena.sparql.ARQException ; - -public class FusekiException extends ARQException -{ - public FusekiException(String msg, Throwable cause) { super(msg, cause) ; } - public FusekiException(String msg) { super(msg) ; } - public FusekiException(Throwable cause) { super(cause) ; } - public FusekiException() { super() ; } -} http://git-wip-us.apache.org/repos/asf/jena/blob/662cf71d/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiLib.java ---------------------------------------------------------------------- diff --git a/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiLib.java b/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiLib.java deleted file mode 100644 index 5324793..0000000 --- a/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiLib.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki; - -import java.util.Iterator ; - -import javax.servlet.http.HttpServletRequest ; - -import org.apache.commons.lang.StringUtils ; -import org.apache.jena.atlas.lib.MultiMap ; -import org.apache.jena.atlas.lib.MultiMapToList ; -import org.apache.jena.atlas.web.ContentType ; -import org.apache.jena.fuseki.servlets.HttpAction ; -import org.apache.jena.riot.Lang ; -import org.apache.jena.riot.RDFLanguages ; - -import com.hp.hpl.jena.graph.Graph ; -import com.hp.hpl.jena.graph.Node ; -import com.hp.hpl.jena.graph.Triple ; -import com.hp.hpl.jena.shared.PrefixMapping ; -import com.hp.hpl.jena.sparql.core.DatasetGraph ; -import com.hp.hpl.jena.sparql.core.Quad ; -import com.hp.hpl.jena.sparql.util.Convert ; - -public class FusekiLib { - /** Get the content type of an action or return the default. - * @param action - * @return ContentType - */ - public static ContentType getContentType(HttpAction action) { - return getContentType(action.request) ; - } - - /** Get the content type of an action or return the default. - * @param request - * @return ContentType - */ - public static ContentType getContentType(HttpServletRequest request) { - String contentTypeHeader = request.getContentType() ; - if ( contentTypeHeader == null ) - return null ; - return ContentType.create(contentTypeHeader) ; - } - - /** Get the incoming Lang based on Content-Type of an action. - * @param action - * @param dft Default if no "Content-Type:" found. - * @return ContentType - */ - public static Lang getLangFromAction(HttpAction action, Lang dft) { - String contentTypeHeader = action.request.getContentType() ; - if ( contentTypeHeader == null ) - return dft ; - return RDFLanguages.contentTypeToLang(contentTypeHeader) ; - } - - static String fmtRequest(HttpServletRequest request) { - StringBuilder sbuff = new StringBuilder() ; - sbuff.append(request.getMethod()) ; - sbuff.append(" ") ; - sbuff.append(Convert.decWWWForm(request.getRequestURL())) ; - - String qs = request.getQueryString() ; - if ( qs != null ) { - String tmp = request.getQueryString() ; - tmp = Convert.decWWWForm(tmp) ; - tmp = tmp.replace('\n', ' ') ; - tmp = tmp.replace('\r', ' ') ; - sbuff.append("?").append(tmp) ; - } - return sbuff.toString() ; - } - - /** Parse the query string - do not process the body even for a form */ - public static MultiMap<String, String> parseQueryString(HttpServletRequest req) { - MultiMap<String, String> map = MultiMapToList.create() ; - - // Don't use ServletRequest.getParameter or getParamterNames - // as that reads form data. This code parses just the query string. - if ( req.getQueryString() != null ) { - String[] params = req.getQueryString().split("&") ; - for ( String p : params ) - { - String[] x = p.split( "=", 2 ); - String name = null; - String value = null; - - if ( x.length == 0 ) - { // No "=" - name = p; - value = ""; - } - else if ( x.length == 1 ) - { // param= - name = x[0]; - value = ""; - } - else - { // param=value - name = x[0]; - value = x[1]; - } - map.put( name, value ); - } - } - return map ; - } - - public static String safeParameter(HttpServletRequest request, String pName) { - String value = request.getParameter(pName) ; - value = StringUtils.replaceChars(value, "\r", "") ; - value = StringUtils.replaceChars(value, "\n", "") ; - return value ; - } - - // Do the addition directly on the dataset - public static void addDataInto(Graph data, DatasetGraph dsg, Node graphName) { - // Prefixes? - if ( graphName == null ) - graphName = Quad.defaultGraphNodeGenerated ; - - Iterator<Triple> iter = data.find(Node.ANY, Node.ANY, Node.ANY) ; - for (; iter.hasNext();) { - Triple t = iter.next() ; - dsg.add(graphName, t.getSubject(), t.getPredicate(), t.getObject()) ; - } - - PrefixMapping pmapSrc = data.getPrefixMapping() ; - PrefixMapping pmapDest = dsg.getDefaultGraph().getPrefixMapping() ; - pmapDest.setNsPrefixes(pmapSrc) ; - } -}
