jasper-command-line 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'jasper-command-line'
4
+
5
+ command_line = JasperCommandLine::CommandLine.new(*ARGV)
@@ -0,0 +1,86 @@
1
+ module JasperCommandLine
2
+ class CommandLine
3
+ def initialize(*args)
4
+ begin
5
+ options = parse_arguments(args)
6
+
7
+ if options[:jasper_file]
8
+ puts JasperCommandLine::Jasper::render_pdf(options[:jasper_file], options[:data], options[:params], {})
9
+ end
10
+ rescue ArgumentError => e
11
+ puts "Error: #{e.message}"
12
+ rescue => e
13
+ puts "Error: #{e.message}"
14
+ puts e.backtrace
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def parse_arguments(arguments)
21
+ data = {
22
+ :params => {}
23
+ }
24
+
25
+ raise ArgumentError.new("No arguments supplied") unless arguments.any?
26
+
27
+ i = 0
28
+
29
+ while i < arguments.length
30
+ argument = arguments[i]
31
+
32
+ case get_option(argument)
33
+ when 'data'
34
+ i = get_option_data(arguments, i) do |argument_data|
35
+ raise ArgumentError.new("Data not found") if get_option(argument_data)
36
+ data[:data] = argument_data
37
+ end
38
+
39
+ when 'data-file'
40
+ i = get_option_data(arguments, i) do |argument_data|
41
+ raise ArgumentError.new("Data file not found: #{argument_data}") unless File.exists?(argument_data)
42
+ data[:data] = File.read argument_data
43
+ end
44
+
45
+ when 'param'
46
+ i = get_option_data(arguments, i) do |argument_data|
47
+ raise ArgumentError.new("Invalid param format: #{argument_data}") unless argument_data =~ /(.*?)=(.*)/
48
+ data[:params][$1] = $2
49
+ end
50
+
51
+ when 'jasper'
52
+ # Or a file
53
+ i = get_option_data(arguments, i) do |argument_data|
54
+ raise ArgumentError.new("File not found: #{argument_data}") unless File.exists?(argument_data)
55
+ data[:jasper_file] = argument_data
56
+ end
57
+
58
+ end
59
+ end
60
+
61
+ return data
62
+ end
63
+
64
+ def get_option(argument)
65
+ if argument.strip =~ /^--(.*?)$/
66
+ return $1
67
+ end
68
+
69
+ nil
70
+ end
71
+
72
+ def get_option_data(arguments, index)
73
+ index += 1
74
+ data = ''
75
+
76
+ while index < arguments.length && !get_option(arguments[index])
77
+ data << arguments[index]
78
+ index += 1
79
+ end
80
+
81
+ yield data
82
+
83
+ return index
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,96 @@
1
+ #
2
+ # Copyright (C) 2012 Marlus Saraiva, Rodrigo Maia
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+
23
+
24
+ module JasperCommandLine
25
+ classpath = '.'
26
+ Dir["#{File.dirname(__FILE__)}/java/*.jar"].each do |jar|
27
+ classpath << File::PATH_SEPARATOR + File.expand_path(jar)
28
+ end
29
+
30
+ Dir["lib/*.jar"].each do |jar|
31
+ classpath << File::PATH_SEPARATOR + File.expand_path(jar)
32
+ end
33
+
34
+ Rjb::load( classpath, ['-Djava.awt.headless=true','-Xms128M', '-Xmx256M'] )
35
+
36
+ JRException = Rjb::import 'net.sf.jasperreports.engine.JRException'
37
+ JasperCompileManager = Rjb::import 'net.sf.jasperreports.engine.JasperCompileManager'
38
+ JasperExportManager = Rjb::import 'net.sf.jasperreports.engine.JasperExportManager'
39
+ JasperFillManager = Rjb::import 'net.sf.jasperreports.engine.JasperFillManager'
40
+ JasperPrint = Rjb::import 'net.sf.jasperreports.engine.JasperPrint'
41
+ JRXmlUtils = Rjb::import 'net.sf.jasperreports.engine.util.JRXmlUtils'
42
+ # This is here to avoid the "already initialized constant QUERY_EXECUTER_FACTORY_PREFIX" warnings.
43
+ JRXPathQueryExecuterFactory = silence_warnings{Rjb::import 'net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory'}
44
+ InputSource = Rjb::import 'org.xml.sax.InputSource'
45
+ StringReader = Rjb::import 'java.io.StringReader'
46
+ HashMap = Rjb::import 'java.util.HashMap'
47
+ ByteArrayInputStream = Rjb::import 'java.io.ByteArrayInputStream'
48
+ JavaString = Rjb::import 'java.lang.String'
49
+ JFreeChart = Rjb::import 'org.jfree.chart.JFreeChart'
50
+
51
+ module Jasper
52
+ def self.render_pdf(jasper_file, datasource, parameters, options)
53
+ options ||= {}
54
+ parameters ||= {}
55
+ jrxml_file = jasper_file.sub(/\.jasper$/, ".jrxml")
56
+
57
+ begin
58
+ # Convert the ruby parameters' hash to a java HashMap.
59
+ # Pay attention that, for now, all parameters are converted to string!
60
+ jasper_params = HashMap.new
61
+ parameters.each do |k,v|
62
+ jasper_params.put(JavaString.new(k.to_s), JavaString.new(v.to_s))
63
+ end
64
+
65
+ # Compile it, if needed
66
+ if !File.exist?(jasper_file) || (File.exist?(jrxml_file) && File.mtime(jrxml_file) > File.mtime(jasper_file))
67
+ JasperCompileManager.compileReportToFile(jrxml_file, jasper_file)
68
+ end
69
+
70
+ datasource = datasource.to_xml(options).to_s unless datasource.is_a?(String)
71
+
72
+ # Fill the report
73
+ input_source = InputSource.new
74
+ input_source.setCharacterStream(StringReader.new(datasource))
75
+ data_document = silence_warnings do
76
+ # This is here to avoid the "already initialized constant DOCUMENT_POSITION_*" warnings.
77
+ JRXmlUtils._invoke('parse', 'Lorg.xml.sax.InputSource;', input_source)
78
+ end
79
+
80
+ jasper_params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, data_document)
81
+ jasper_print = JasperFillManager.fillReport(jasper_file, jasper_params)
82
+
83
+ # Export it!
84
+ JasperExportManager._invoke('exportReportToPdf', 'Lnet.sf.jasperreports.engine.JasperPrint;', jasper_print)
85
+ rescue Exception=>e
86
+ if e.respond_to? 'printStackTrace'
87
+ JasperCommandLine.logger.error e.message
88
+ e.printStackTrace
89
+ else
90
+ JasperCommandLine.logger.error e.message + "\n " + e.backtrace.join("\n ")
91
+ end
92
+ raise e
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,3 @@
1
+ module JasperCommandLine
2
+ VERSION = "0.1.2"
3
+ end
@@ -0,0 +1,30 @@
1
+ $LOAD_PATH.unshift File.dirname(__FILE__)
2
+
3
+ require 'logger'
4
+ require 'stringio'
5
+ require 'shellwords'
6
+ require 'open3'
7
+ require 'awesome_print'
8
+ require 'fileutils'
9
+ require "rjb"
10
+ require 'active_support/core_ext'
11
+
12
+ require 'jasper-command-line/version'
13
+ require 'jasper-command-line/command_line'
14
+ require 'jasper-command-line/jasper'
15
+
16
+ module JasperCommandLine
17
+ def self.logger=(log)
18
+ @logger = log
19
+ end
20
+
21
+ # Get AppleTvConverter logger.
22
+ #
23
+ # @return [Logger]
24
+ def self.logger
25
+ return @logger if @logger
26
+ logger = Logger.new(STDOUT)
27
+ logger.level = Logger::INFO
28
+ @logger = logger
29
+ end
30
+ end
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jasper-command-line
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Pedro Rodrigues
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rjb
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.4.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.4.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.7'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.7'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.9.2
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.2
62
+ description: Use jasper-rails from the command line.
63
+ email:
64
+ - pedro@bbde.org
65
+ executables:
66
+ - jasper-command-line
67
+ extensions: []
68
+ extra_rdoc_files: []
69
+ files:
70
+ - lib/jasper-command-line/command_line.rb
71
+ - lib/jasper-command-line/jasper.rb
72
+ - lib/jasper-command-line/java/commons-beanutils-1.8.2.jar
73
+ - lib/jasper-command-line/java/commons-collections-3.2.1.jar
74
+ - lib/jasper-command-line/java/commons-digester-2.1.jar
75
+ - lib/jasper-command-line/java/commons-logging-1.1.jar
76
+ - lib/jasper-command-line/java/groovy-all-1.7.5.jar
77
+ - lib/jasper-command-line/java/iText-2.1.7.jar
78
+ - lib/jasper-command-line/java/jasperreports-4.7.1.jar
79
+ - lib/jasper-command-line/java/jcommon-1.0.15.jar
80
+ - lib/jasper-command-line/java/jfreechart-1.0.12.jar
81
+ - lib/jasper-command-line/java/xalan.jar
82
+ - lib/jasper-command-line/version.rb
83
+ - lib/jasper-command-line.rb
84
+ - bin/jasper-command-line
85
+ homepage: http://github.com/gokuu/jasper-command-line
86
+ licenses: []
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ requirements: []
104
+ rubyforge_project:
105
+ rubygems_version: 1.8.24
106
+ signing_key:
107
+ specification_version: 3
108
+ summary: Use jasper-rails from the command line.
109
+ test_files: []