jasper-command-line 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: []