class Rasper::Report

Public Class Methods

generate(jasper_name, data, params = {}) click to toggle source
# File lib/rasper/report.rb, line 19
def generate(jasper_name, data, params = {})
  run_with_locale do
    namespace, jasper_name = extract_namespace(jasper_name)
    set_file_resolver(params, namespace)
    file_name = File.join(Config.jasper_dir || '.', namespace,
      jasper_name + '.jasper')
    jasper_content = File.read(file_name)
    data = { jasper_name => data }.to_xml
    xpath_criteria = "/hash/#{jasper_name}/#{jasper_name.singularize}"
    source = JRXmlDataSource.new(
        ByteArrayInputStream.new(data.to_java_bytes), xpath_criteria)
    input = BufferedInputStream.new(
        ByteArrayInputStream.new(jasper_content.to_java_bytes))
    String.from_java_bytes(
      JasperRunManager.runReportToPdf(input, params, source))
  end
end

Private Class Methods

extract_namespace(name) click to toggle source
# File lib/rasper/report.rb, line 50
def extract_namespace(name)
  parts = name.split('/')
  jasper_name = parts.pop
  namespace = parts.join('/')
  [namespace, jasper_name]
end
set_file_resolver(params, namespace = '') click to toggle source
# File lib/rasper/report.rb, line 39
def set_file_resolver(params, namespace = '')
  resolver = Class.new { include FileResolver }.new
  image_directory = Config.image_dir
  resolver.singleton_class.instance_eval do
    define_method :resolve_file do |filename|
      java::io::File.new(File.join(image_directory, namespace, filename))
    end
  end
  params['REPORT_FILE_RESOLVER'] = resolver
end