Class: JSONReport
  
  
  
  
    - Inherits:
 
    - 
      JasperReport
      
        
        show all
      
      
 
    
  
  
    
  
    
  
  
  
    - Defined in:
 
    - backend/app/model/reports/json_report.rb
 
  
  Instance Attribute Summary
  
  Attributes inherited from JasperReport
  #data_source, #export_file, #format, #jrprint
  
    
      Instance Method Summary
      (collapse)
    
    
  
  
  
  
  
  
  
  
  
  
  compile, finalize, #report, report, report_base, #title
  
  
  
  
  
  
  
  
  
  
  included
  Constructor Details
  
    
  
  
    - (JSONReport) initialize(params) 
  
  
  
  
    Returns a new instance of JSONReport
   
 
  
  
    
      
5
6
7
8
9
10
11 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 5
def initialize(params)
  @repo_id = params[:repo_id] if params.has_key?(:repo_id) && params[:repo_id] != ""
  @base_path = File.join(self.class.report_base, self.class.name ) 
  @datasource = Tempfile.new(self.class.name + '.data')
  
  ObjectSpace.define_finalizer( self, self.class.finalize(self) ) 
end
 
     | 
  
 
  
 
  
    Instance Method Details
    
      
  
  
    - (Object) default_params 
  
  
  
  
    
      
29
30
31
32
33
34
35
36
37
38 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 29
def default_params
  params = {} 
  params[JsonQueryExecuterFactory::JSON_DATE_PATTERN] ||= "yyyy-MM-dd"      
  params[JsonQueryExecuterFactory::JSON_NUMBER_PATTERN] ||= "#,##0.##"       
  params[JsonQueryExecuterFactory::JSON_LOCALE] ||= Locale::ENGLISH          
  params[JRParameter::REPORT_LOCALE] ||= ::Locale::US
  params["repositoryId"] = @repo_id
  params["basePath"] = @base_path
  params
end
     | 
  
 
    
      
  
  
    - (Object) fill(params = {}) 
  
  
  
  
    
      
40
41
42
43
44
45
46 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 40
def fill( params = {} )
  params.merge!(default_params) 
  params["net.sf.jasperreports.json.source"] = load_datasource
  
  @jrprint =  JasperFillManager.fill_report(report, java.util.HashMap.new(params) )
end
     | 
  
 
    
      
  
  
    - (Object) load_datasource 
  
  
  
  
    there are several ways to attach data to your jasper report. most of them
don’t seem to work very well. One that does it to add a file uri to the
json.datasource property that’s passed as a param. since this works, it
will be the default.
   
 
  
  
    
      
18
19
20
21
22 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 18
def load_datasource
  @datasource.write(query.to_json)
  @datasource.rewind 
  @datasource.path
end
 
     | 
  
 
    
      
  
  
    - (Object) query 
  
  
  
  
    this is where we load the data. it most likely will be a sequel query
   
 
  
  
    
      
25
26
27 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 25
def query
  { :locations => [] }
end
     | 
  
 
    
      
  
  
    - (Object) render(format, params = {}) 
  
  
  
  
    
      
87
88
89
90
91
92
93
94
95 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 87
def render(format, params = {} )
  if format == :json
    load_datasource 
    to_json
  elsif [:pdf, :html, :xlsx, :csv ].include?(format) 
    fill(params)
    self.send("to_#{format.to_s}")
  end
end
     | 
  
 
    
      
  
  
    - (Object) to_csv 
  
  
  
  
    
      
59
60
61
62
63
64
65
66
67 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 59
def to_csv
  exporter = JRCsvExporter.new
  exporter.exporter_input = SimpleExporterInput.new(@jrprint)
  @export_file = Tempfile.new("location.csv")
  exporter.exporter_output = SimpleWriterExporterOutput.new(@export_file.to_outputstream)
  exporter.export_report
  @export_file.rewind 
  @export_file.read.to_java_bytes 
end
     | 
  
 
    
      
  
  
    - (Object) to_html 
  
  
  
  
    
      
52
53
54
55
56
57 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 52
def to_html
  @export_file = Tempfile.new("location.html")
  JasperExportManager.export_report_to_html_file(@jrprint, @export_file.path)
  @export_file.rewind 
  @export_file.read.to_java_bytes 
end
     | 
  
 
    
      
  
  
    - (Object) to_json 
  
  
  
  
    
      
83
84
85 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 83
def to_json
  @datasource.read.to_java_bytes
end
 
     | 
  
 
    
      
  
  
    - (Object) to_pdf 
  
  
  
  
    
      
48
49
50 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 48
def to_pdf
   JasperExportManager.export_report_to_pdf(@jrprint)
end
 
     | 
  
 
    
      
  
  
    - (Object) to_xlsx 
  
  
  
  
    
      
69
70
71
72
73
74
75
76
77
78
79
80
81 
     | 
    
      # File 'backend/app/model/reports/json_report.rb', line 69
def to_xlsx
  exporter = JRXlsxExporter.new
  exporter.exporter_input = SimpleExporterInput.new(@jrprint)
  @export_file = Tempfile.new("location.xlsx")
  exporter.exporter_output = SimpleOutputStreamExporterOutput.new(@export_file.to_outputstream)
  configuration = SimpleXlsxReportConfiguration.new 
  configuration.one_page_per_sheet = false 
  exporter.configuration = configuration
  exporter.export_report
  @export_file.rewind 
  @export_file.read.to_java_bytes 
end
     |