summaryrefslogtreecommitdiff
path: root/report/report_application.rb
diff options
context:
space:
mode:
Diffstat (limited to 'report/report_application.rb')
-rwxr-xr-x[-rw-r--r--]report/report_application.rb123
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