Class: MPXJ::Reader
- Inherits:
-
Object
- Object
- MPXJ::Reader
- Defined in:
- lib/mpxj/reader.rb
Overview
Used to read a project plan from a file
Constant Summary collapse
- @@max_memory_size =
nil
Class Method Summary collapse
- .jvm_args ⇒ Object
-
.max_memory_size=(value) ⇒ Object
Allows the caller to set the maximum memory size used by the JVM when processing a schedule.
-
.read(file_name, zone = nil, time_units = :seconds) ⇒ Project
Reads a project plan from a file, and returns a Project instance which provides access to the structure and attributes of the project data.
- .report_error(java_output) ⇒ Object
Class Method Details
.jvm_args ⇒ Object
50 51 52 53 54 55 |
# File 'lib/mpxj/reader.rb', line 50 def self.jvm_args args = [] args << "-Dlog4j2.loggerContextFactory=org.apache.logging.log4j.simple.SimpleLoggerContextFactory" args << "-Xmx#{@@max_memory_size}" if @@max_memory_size.present? args.join(' ') end |
.max_memory_size=(value) ⇒ Object
Allows the caller to set the maximum memory size used by the JVM when processing a schedule. This is useful when handling large schedules which cause out of memory failures if the JVM’s default maximum memory size is used. The value is either a plain integer number of bytes, or an integer followed by K, M, or G, e.g. ‘MPXJ::Reader.max_memory_size=“500M”`
45 46 47 |
# File 'lib/mpxj/reader.rb', line 45 def self.max_memory_size=(value) @@max_memory_size = value end |
.read(file_name, zone = nil, time_units = :seconds) ⇒ Project
Reads a project plan from a file, and returns a Project instance which provides access to the structure and attributes of the project data. Note that an optional timezone can be supplied to ensue that all date-time values returned are in the specified timezone.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/mpxj/reader.rb', line 20 def self.read(file_name, zone = nil, time_units = :seconds) project = nil json_file = Tempfile.new([File.basename(file_name, ".*"), '.json']) tz = zone || Time.zone || ActiveSupport::TimeZone["UTC"] begin classpath = "#{File.dirname(__FILE__)}/*" java_output = `java -cp \"#{classpath}\" #{jvm_args} net.sf.mpxj.ruby.GenerateJson \"#{file_name}\" \"#{json_file.path}\" \"#{time_units}\"` if $?.exitstatus != 0 report_error(java_output) end project = Project.new(json_file, tz) ensure json_file.close json_file.unlink end project end |
.report_error(java_output) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/mpxj/reader.rb', line 58 def self.report_error(java_output) if java_output.include?('Conversion Error: ') = java_output.split('Conversion Error: ')[1] if .include?('Unsupported file type') raise MPXJ::ArgumentError, elsif .include?('password protected') raise MPXJ::PasswordProtected, else raise MPXJ::RuntimeError, end else raise MPXJ::UnknownError, "Failed to read file: #{java_output}" end end |