lib/adiwg/mdtranslator.rb in adiwg-mdtranslator-1.4.0 vs lib/adiwg/mdtranslator.rb in adiwg-mdtranslator-2.0.0rc2
- old
+ new
@@ -1,157 +1,179 @@
-# MdTranslator - ADIwg MdTranslator RubyGem entry point
+# MdTranslator - ADIwg MdTranslator entry point
# History:
-# Stan Smith 2014-07-02 original script
-# Stan Smith 2014-07-21 added ADIWG namespace
-# Stan Smith 2014-07-21 added validation of json structure
+# Stan Smith 2016-11-11 refactor for mdTranslator 2.0
+# Stan Smith 2015-07-17 added support for user supplied CSS for html writer
+# Stan Smith 2015-07-16 moved module_coordinates from mdJson reader to internal
+# Stan Smith 2015-07-14 renamed readerVersionFound to readerVersionRequested
+# Stan Smith 2015-07-14 deleted readerFound
+# Stan Smith 2015-06-22 replace global ($response) with passed in object (hResponseObj)
+# ... created as an instance of class ResponseHash
+# Stan Smith 2015-03-04 moved addFinalMessages into this module from rails app
+# Stan Smith 2015-01-15 changed translate() to keyword parameter list
+# Stan Smith 2014-12-11 refactored to handle namespacing readers and writers
+# Stan Smith 2014-12-02 organized shared class/code/units folders for 19115-2, 19110
+# Stan Smith 2014-12-01 added translator version to $response
+# Stan Smith 2014-12-01 added writer iso19110 (feature catalogue)
+# Stan Smith 2014-12-01 changed adiwgJson to mdJson
+# Stan Smith 2014-10-11 added methods to return content of readme files
+# Stan Smith 2014-10-10 added method to return path to readers and writers
+# Stan Smith 2014-09-26 added processing of minor release numbers
# Stan Smith 2014-07-23 moved all validations to readers/adiwg/adiwg_validator.rb
# ... each reader will have it's own validator
-# Stan Smith 2014-09-26 added processing of minor release numbers
-# Stan Smith 2014-10-10 added method to return path to readers and writers
-# Stan Smith 2014-10-11 added methods to return content of readme files
-# Stan Smith 2014-12-01 changed adiwgJson to mdJson
-# Stan Smith 2014-12-01 added writer iso19110 (feature catalogue)
-# Stan Smith 2014-12-01 added translator version to $response
-# Stan Smith 2014-12-02 organized shared class/code/units folders for 19115-2, 19110
-# Stan Smith 2014-12-11 refactored to handle namespacing readers and writers
-# Stan Smith 2015-01-15 changed translate() to keyword parameter list
-# Stan Smith 2015-03-04 moved addFinalMessages into this module from rails app
-# Stan Smith 2015-06-22 replace global ($response) with passed in object (responseObj)
-# ... created as an instance of class ResponseHash
-# Stan Smith 2015-07-14 deleted readerFound
-# Stan Smith 2015-07-14 renamed readerVersionFound to readerVersionRequested
-# Stan Smith 2015-07-16 moved module_coordinates from mdJson reader to internal
-# Stan Smith 2015-07-17 added support for user supplied CSS for html writer
+# Stan Smith 2014-07-21 added validation of json structure
+# Stan Smith 2014-07-21 added ADIWG namespace
+# Stan Smith 2014-07-02 original script
# required by readers and writers
require 'adiwg/mdtranslator/version'
require 'adiwg/mdtranslator/readers/mdReaders'
require 'adiwg/mdtranslator/writers/mdWriters'
-require 'adiwg/mdtranslator/internal/internal_metadata_obj'
-require 'adiwg/mdtranslator/internal/module_dateTimeFun'
-require 'adiwg/mdtranslator/internal/module_geoFormat'
-require 'adiwg/mdtranslator/internal/module_coordinates'
-require 'adiwg/mdtranslator/internal/module_point'
-require 'adiwg/mdtranslator/internal/module_lineString'
module ADIWG
module Mdtranslator
- def self.translate(file:, reader:, validate: 'normal', writer: nil, showAllTags: false, css: nil, cssLink: nil)
+ def self.translate(file:, reader: 'mdJson', writer: nil, validate: 'normal', showAllTags: false, cssLink: nil)
- # the reader and writer specified in the translate parameter string should load and
+ # the reader and writer specified in the translate module parameter string will load and
# return this hash ...
+ # ====================================================================================
+ # readerRequested: name of the reader requested by the user
+ # - set from the parameter list (reader) (default = 'mdJson')
# ------------------------------------------------------------------------------------
- # readerFormat: the anticipated format of the input file, parsing by the reader will
- # proceed assuming this format, set by reader
- # readerStructurePass: 'true' if input file structure is determined to be valid.
- # Set by the reader.
- # readerStructureMessages: an array of quoted string messages. If readerStructurePass
- # is false, set one or more messages to assist the user in fixing file structure
- # problems. Set by reader.
- # readerRequested: name of the reader requested by the user, set from the translate
- # parameter list
- # readerVersionRequested: version of the reader requested by the input file, set by reader
- # readerVersionUsed: version of the reader the reader method decided to use in processing
- # the input file. Set by the reader. Default 'normal'.
+ # readerVersionRequested: version of the reader requested in input file
+ # - set in reader
+ # ------------------------------------------------------------------------------------
+ # readerVersionUsed: actual reader version use in processing the input file
+ # - set by the reader
+ # ------------------------------------------------------------------------------------
+ # readerStructurePass: false if input file structure is determined to be invalid
+ # - set by the reader
+ # ------------------------------------------------------------------------------------
+ # readerStructureMessages: an array of parser warning and error messages
+ # - set by the reader
+ # ------------------------------------------------------------------------------------
# readerValidationLevel: validation level requested to be applied to the input file, set
- # from the parameter list
- # readerValidationPass: true if the input file passes the level of validation requested,
- # set by reader
- # readerValidationMessages: an array of quoted string messages. If readerValidationPass
- # is 'false', set one or more messages to assist user fixing file schema validation
- # problems. Set by reader.
- # readerExecutionPass: 'true' if the reader completes the import of the input file into
- # the internal object without errors. set by reader.
- # readerExecutionMessages: an array of quoted string messages. If readerExecutionPass is
- # 'false', set one or more messages to assist user in fixing file data problems.
- # Set by reader.
- # writerName: name of the writer requested by the user, set from the translate parameter
- # list. if nil no write was requested and only validation of the input file will
- # be performed.
- # writerVersion: current version of the writer requested, set by writer
- # writerFormat: format of the output from the writer. Set by writer.
- # writerPass: true if the writer completes the creation of the output file without errors,
- # set by writer
- # writerMessages: an array of quoted string messages. If writerPass is 'false', set one
- # or more messages to assist user in fixing file data problems. Set by writer.
- # writerOutput: output file returned from the writer, set by writer
- # writerShowTags: include tags in XML output for empty elements
- # writerMissingIdCount: counter for creating unique elements IDs for ISO elements that did not
- # provide IDs in the input metadata file
+ # - set from the parameter list (reader)
+ # ------------------------------------------------------------------------------------
+ # readerValidationPass: false if fails requested level of validation
+ # - set by the reader
+ # ------------------------------------------------------------------------------------
+ # readerValidationMessages: an array of schema warning and error messages
+ # - set by the reader
+ # ------------------------------------------------------------------------------------
+ # readerExecutionPass: false if the reader finds fatal errors in input file
+ # - set by the reader
+ # ------------------------------------------------------------------------------------
+ # readerExecutionMessages: an array of reader warning and error messages
+ # - set by the reader
+ # ------------------------------------------------------------------------------------
+ # writerRequested: name of the writer requested by the user
+ # - set from the parameter list (writer)
+ # ------------------------------------------------------------------------------------
+ # writerVersion: current version of the requested writer
+ # - set by the writer
+ # ------------------------------------------------------------------------------------
+ # writerFormat: format of writer output
+ # - set by the writer
+ # ------------------------------------------------------------------------------------
+ # writerPass: false if the writer fails to complete creation of output file
+ # - set by the writer
+ # ------------------------------------------------------------------------------------
+ # writerMessages: an array of writer warning and error messages
+ # - set by the writer
+ # ------------------------------------------------------------------------------------
+ # writerOutput: the output file returned by the writer
+ # - set by the writer
+ # ------------------------------------------------------------------------------------
+ # writerShowTags: include tags in XML output for any empty elements
+ # - set from the parameter list (showAllTags)
+ # ------------------------------------------------------------------------------------
+ # writerCSSlink: CSS link to append to HTML writer output
+ # - set from the parameter list (showAllTags)
+ # ------------------------------------------------------------------------------------
+ # writerMissingIdCount: counter for creating unique element IDs as needed
+ # - set by the writer
+ # ------------------------------------------------------------------------------------
# translatorVersion: current version of the mdTranslator
+ # - set by the translator
+ # ------------------------------------------------------------------------------------
- responseObj = {
- readerFormat: nil,
- readerStructurePass: nil,
- readerStructureMessages: [],
+ hResponseObj = {
readerRequested: nil,
readerVersionRequested: nil,
readerVersionUsed: nil,
+ readerStructurePass: true,
+ readerStructureMessages: [],
readerValidationLevel: nil,
- readerValidationPass: nil,
+ readerValidationPass: true,
readerValidationMessages: [],
- readerExecutionPass: nil,
+ readerExecutionPass: true,
readerExecutionMessages: [],
- writerName: nil,
- writerVersion: nil,
- writerFormat: nil,
- writerPass: nil,
+ writerRequested: nil,
+ writerPass: true,
writerMessages: [],
+ writerOutputFormat: nil,
writerOutput: nil,
writerShowTags: false,
+ writerCSSlink: nil,
writerMissingIdCount: '_000',
translatorVersion: nil
}
- paramsObj = {
- cssLink: cssLink,
- css: css
- }
+ # parameter - file (required)
+ if file.nil? || file == ''
+ hResponseObj[:readerExecutionPass] = false
+ hResponseObj[:readerExecutionMessages] << "Parameter 'file:' was not provided"
+ return hResponseObj
+ end
- # add the passed in parameters to the response hash
- responseObj[:readerRequested] = reader
- responseObj[:readerValidationLevel] = validate
- responseObj[:writerName] = writer
- responseObj[:writerShowTags] = showAllTags
+ # parameter - reader (required)
+ if reader == ''
+ hResponseObj[:readerExecutionPass] = false
+ hResponseObj[:readerExecutionMessages] << "Parameter 'reader:' was not provided"
+ return hResponseObj
+ end
+ # add passed in parameters to the response hash
+ hResponseObj[:readerRequested] = reader
+ hResponseObj[:readerValidationLevel] = validate
+ hResponseObj[:writerRequested] = writer
+ hResponseObj[:writerShowTags] = showAllTags
+ hResponseObj[:writerCSSlink] = cssLink
+
# add mdTranslator version to response hash
- responseObj[:translatorVersion] = ADIWG::Mdtranslator::VERSION
+ hResponseObj[:translatorVersion] = ADIWG::Mdtranslator::VERSION
- # handle readers
- if reader.nil? || reader == ''
- responseObj[:readerExecutionPass] = false
- responseObj[:readerExecutionMessages] << 'Reader name was not provided'
- return responseObj
+ # handle reader
+ intObj = ADIWG::Mdtranslator::Readers.handleReader(file, hResponseObj)
- else
- intObj = ADIWG::Mdtranslator::Readers.handleReader(file, responseObj)
+ # if reader file structure failed - exit
+ if hResponseObj[:readerStructurePass] === false
+ return hResponseObj
+ end
- # if readerValidation failed - exit
- if !responseObj[:readerValidationPass]
- return responseObj
- end
+ # if reader file validation failed - exit
+ if hResponseObj[:readerValidationPass] === false
+ return hResponseObj
+ end
- # if readerExecutionPass is nil no error messages were set while
- # reading the input file into the internal object.
- # the read operation is assumed to have been successful and pass is set to true.
- if responseObj[:readerExecutionPass].nil?
- responseObj[:readerExecutionPass] = true
- elsif !responseObj[:readerExecutionPass]
- return responseObj
- end
+ # if reader file execution failed - exit
+ if hResponseObj[:readerExecutionPass] === false
+ return hResponseObj
end
- # handle writers
+ #handle writers
if writer.nil? || writer == ''
- responseObj[:writerMessages] << 'Writer name was not provided.'
- else
- require File.join(File.dirname(__FILE__), 'mdtranslator/writers/mdWriters')
- ADIWG::Mdtranslator::Writers.handleWriter(intObj, responseObj, paramsObj)
+ hResponseObj[:writerMessages] << "Parameter 'writer:' was not provided"
+ hResponseObj[:writerPass] = false
+ return hResponseObj
end
- return responseObj
+ require File.join(File.dirname(__FILE__), 'mdtranslator/writers/mdWriters')
+ ADIWG::Mdtranslator::Writers.handleWriter(intObj, hResponseObj)
+
+ return hResponseObj
end
end