summaryrefslogtreecommitdiff
path: root/report/report_application.rb
blob: 5a47063b90bc17d23670872be1c10228d6419597 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
require "report/environment.rb"

def perform
  @@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|
    "@import \""+params[:css_style_sheet]+"\";"
  end
end

get '/report/?' do
  perform do |rs|
    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|
    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])+"\n"
  end
end


get '/report/:type/:id' do
  perform do |rs| 
    
    accept_header = request.env['HTTP_ACCEPT']
    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
  end
end

#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],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))
  end
end

delete '/report/:type/:id' do
  perform do |rs|
    content_type "text/plain"
    rs.delete_report(params[:type],params[:id],@subjectid)
  end
end

post '/report/:type' do
  task = OpenTox::Task.create("Create report",url_for("/report/"+params[:type], :full)) do |task| #,params
    perform do |rs|
      rs.create_report(params[:type],params[:validation_uris]?params[:validation_uris].split(/\n|,/):nil,@subjectid,task)
    end
  end
  return_task(task)
end