diff options
Diffstat (limited to 'report/report_application.rb')
-rwxr-xr-x[-rw-r--r--] | report/report_application.rb | 123 |
1 files changed, 60 insertions, 63 deletions
diff --git a/report/report_application.rb b/report/report_application.rb index efa0298..5a47063 100644..100755 --- a/report/report_application.rb +++ b/report/report_application.rb @@ -1,22 +1,27 @@ require "report/environment.rb" def perform - begin - $rep = Reports::ReportService.new(url_for("/report", :full)) unless $rep - yield( $rep ) - rescue Reports::NotFound => ex - halt 404, ex.message - rescue Reports::BadRequest => ex - halt 400, ex.message - rescue Exception => ex - #LOGGER.error(ex.message) - LOGGER.error "report error: "+ex.message - LOGGER.error ": "+ex.backtrace.join("\n") - raise ex # sinatra returns 501 - #halt 500, ex.message + @@report_service = Reports::ReportService.instance( url_for("/report", :full) ) unless defined?@@report_service + yield( @@report_service ) +end + +def get_docbook_resource(filepath) + perform do |rs| + halt 404,"not found: "+filepath unless File.exist?(filepath) + types = MIME::Types.type_for(filepath) + content_type(types[0].content_type) if types and types.size>0 and types[0] + result = body(File.new(filepath)) end end +get '/'+ENV['DOCBOOK_DIRECTORY']+'/:subdir/:resource' do + path_array = request.env['REQUEST_URI'].split("/") + get_docbook_resource ENV['DOCBOOK_DIRECTORY']+"/"+path_array[-2]+"/"+path_array[-1] +end + +get '/'+ENV['DOCBOOK_DIRECTORY']+'/:resource' do + get_docbook_resource ENV['DOCBOOK_DIRECTORY']+"/"+request.env['REQUEST_URI'].split("/")[-1] +end get '/report/:type/css_style_sheet/?' do perform do |rs| @@ -24,66 +29,73 @@ get '/report/:type/css_style_sheet/?' do end end - get '/report/?' do perform do |rs| - content_type "text/uri-list" - rs.get_report_types + case request.env['HTTP_ACCEPT'].to_s + when /text\/html/ + related_links = + "All validations: "+url_for("/",:full) + description = + "A list of all report types." + content_type "text/html" + OpenTox.text_to_html rs.get_report_types,@subjectid,related_links,description + else + content_type "text/uri-list" + rs.get_report_types + end end end get '/report/:report_type' do perform do |rs| - content_type "text/uri-list" - rs.get_all_reports(params[:report_type], params) + case request.env['HTTP_ACCEPT'].to_s + when /text\/html/ + related_links = + "Available report types: "+url_for("/report",:full)+"\n"+ + "Single validations: "+url_for("/",:full)+"\n"+ + "Crossvalidations: "+url_for("/crossvalidation",:full) + description = + "A list of all "+params[:report_type]+" reports. To create a report, use the POST method." + post_params = [[:validation_uris]] + content_type "text/html" + OpenTox.text_to_html rs.get_all_reports(params[:report_type], params),@subjectid,related_links,description,post_params + else + content_type "text/uri-list" + rs.get_all_reports(params[:report_type], params) + end end end post '/report/:type/:id/format_html' do - perform do |rs| rs.get_report(params[:type],params[:id],"text/html",true,params) content_type "text/uri-list" - rs.get_uri(params[:type],params[:id]) + rs.get_uri(params[:type],params[:id])+"\n" end end get '/report/:type/:id' do - perform do |rs| accept_header = request.env['HTTP_ACCEPT'] - if accept_header =~ /MSIE/ - LOGGER.info "Changing MSIE accept-header to text/html" - accept_header = "text/html" - end - #request.env['HTTP_ACCEPT'] = "application/pdf" - - #QMRF-STUB - if params[:type] == Reports::ReportFactory::RT_QMRF - #raise Reports::BadRequest.new("only 'application/qmrf-xml' provided so far") if accept_header != "application/qmrf-xml" - content_type "application/qmrf-xml" - result = body(OpenTox::RestClientWrapper.get("http://ecb.jrc.ec.europa.eu/qsar/qsar-tools/qrf/QMRF_v1.2_FishTox.xml")) + report = rs.get_report(params[:type],params[:id],accept_header) + format = Reports::ReportFormat.get_format(accept_header) + content_type format + #PENDING: get_report should return file or string, check for result.is_file instead of format + if format=="application/x-yaml" or format=="application/rdf+xml" + report else - report = rs.get_report(params[:type],params[:id],accept_header) - format = Reports::ReportFormat.get_format(accept_header) - content_type format - #PENDING: get_report should return file or string, check for result.is_file instead of format - if format=="application/x-yaml" or format=="application/rdf+xml" - report - else - result = body(File.new(report)) - end + result = body(File.new(report)) end end end -get '/report/:type/:id/:resource' do - #hack: using request.env['REQUEST_URI'].split("/")[-1] instead of params[:resource] because the file extension is lost +#OpenTox::Authorization.whitelist( Regexp.new("/report/.*/[0-9]+/.*"),"GET") +get '/report/:type/:id/:resource' do perform do |rs| - filepath = rs.get_report_resource(params[:type],params[:id],request.env['REQUEST_URI'].split("/")[-1]) + filepath = rs.get_report_resource(params[:type],params[:id],params[:resource]) types = MIME::Types.type_for(filepath) content_type(types[0].content_type) if types and types.size>0 and types[0] result = body(File.new(filepath)) @@ -93,30 +105,15 @@ end delete '/report/:type/:id' do perform do |rs| content_type "text/plain" - rs.delete_report(params[:type],params[:id]) + rs.delete_report(params[:type],params[:id],@subjectid) end end post '/report/:type' do - task_uri = OpenTox::Task.as_task do + task = OpenTox::Task.create("Create report",url_for("/report/"+params[:type], :full)) do |task| #,params perform do |rs| - content_type "text/uri-list" - rs.create_report(params[:type],params[:validation_uris]?params[:validation_uris].split(/\n|,/):nil) - end - end - halt 202,task_uri -end - - -post '/report/:type/:id' do - perform do |rs| - #QMRF-STUB - if params[:type] == Reports::ReportFactory::RT_QMRF - #raise Reports::BadRequest.new("only 'application/qmrf-xml' provided so far") if request.content_type != "application/qmrf-xml" - input = request.env["rack.input"].read - "save qmrf would have been successfull, received data with "+input.to_s.size.to_s+" characters, this is just a stub, changes discarded" - else - "operation not supported yet" + rs.create_report(params[:type],params[:validation_uris]?params[:validation_uris].split(/\n|,/):nil,@subjectid,task) end end + return_task(task) end |