lib/schematron/java_processor.rb in cqm-validators-0.1.1 vs lib/schematron/java_processor.rb in cqm-validators-1.0.1.0

- old
+ new

@@ -1,92 +1,90 @@ +# frozen_string_literal: true + require 'java' require_relative '../../../../java/saxon9he.jar' -java_import "java.io.StringReader" -java_import "java.io.StringWriter" +java_import 'java.io.StringReader' +java_import 'java.io.StringWriter' -java_import "javax.xml.parsers.DocumentBuilder" -java_import "javax.xml.parsers.DocumentBuilderFactory" +java_import 'javax.xml.parsers.DocumentBuilder' +java_import 'javax.xml.parsers.DocumentBuilderFactory' -java_import "javax.xml.transform.TransformerFactory" -java_import "javax.xml.transform.Transformer" -java_import "javax.xml.transform.dom.DOMSource" -java_import "javax.xml.transform.stream.StreamSource" -java_import "javax.xml.transform.stream.StreamResult" +java_import 'javax.xml.transform.TransformerFactory' +java_import 'javax.xml.transform.Transformer' +java_import 'javax.xml.transform.dom.DOMSource' +java_import 'javax.xml.transform.stream.StreamSource' +java_import 'javax.xml.transform.stream.StreamResult' -java_import "org.w3c.dom.Document" +java_import 'org.w3c.dom.Document' +TRANSFORMER_FACTORY_IMPL = 'net.sf.saxon.TransformerFactoryImpl' -TRANSFORMER_FACTORY_IMPL = "net.sf.saxon.TransformerFactoryImpl" - module CqmValidators - module Schematron - module JavaProcessor + module Schematron + module JavaProcessor + ISO_SCHEMATRON2 = File.join(DIR, 'lib/schematron/iso-schematron-xslt2/iso_svrl_for_xslt2.xsl') - ISO_SCHEMATRON2 = File.join(DIR, 'lib/schematron/iso-schematron-xslt2/iso_svrl_for_xslt2.xsl') + class HdsUrlResolver + include javax.xml.transform.URIResolver - class HdsUrlResolver - include javax.xml.transform.URIResolver - - def initialize(schematron) - @file = schematron - end - - def resolve(href, base) - path = File.join(File.dirname(@file), href) - return StreamSource.new(java.io.File.new(path)) - end - + def initialize(schematron) + @file = schematron end - def get_errors(document) - document_j = get_document_j(document) - output = build_transformer(StringReader.new(processor), StreamSource.new(document_j), true) - Nokogiri::XML(output) + def resolve(href, _base) + path = File.join(File.dirname(@file), href) + StreamSource.new(java.io.File.new(path)) end + end - def get_document_j(doc) - case doc - when File - java.io.File.new(doc.path) - else - StringReader.new(doc.to_s) - end - end + def get_errors(document) + document_j = get_document_j(document) + output = build_transformer(StringReader.new(processor), StreamSource.new(document_j), true) + Nokogiri::XML(output) + end - def processor - @processor ||= build_transformer(java.io.File.new(ISO_SCHEMATRON2), schematron_file) + def get_document_j(doc) + case doc + when File + java.io.File.new(doc.path) + else + StringReader.new(doc.to_s) end + end - def schematron_file - byebug - # this allows us to run the validation utility app in jBoss/TorqueBox - # for some reason it breaks the first time you call DocumentBuilderFactory, - # so the solution is to catch the error and retry - # TODO: pull this out when the above is no longer the case. - begin - dbf = DocumentBuilderFactory.new_instance - rescue Exception => ex - retry - end - dbf.setIgnoringElementContentWhitespace(true); - db = dbf.new_document_builder - document = db.parse(java.io.File.new(@schematron_file)) + def processor + @processor ||= build_transformer(java.io.File.new(ISO_SCHEMATRON2), schematron_file) + end - root = document.document_element - phase = root.set_attribute("defaultPhase", "errors") - - DOMSource.new(root) + def schematron_file + # this allows us to run the validation utility app in jBoss/TorqueBox + # for some reason it breaks the first time you call DocumentBuilderFactory, + # so the solution is to catch the error and retry + # TODO: pull this out when the above is no longer the case. + begin + dbf = DocumentBuilderFactory.new_instance + rescue Exception + retry end + dbf.setIgnoringElementContentWhitespace(true) + db = dbf.new_document_builder + document = db.parse(java.io.File.new(@schematron_file)) - def build_transformer(xslt, input_file, url=false) - factory = TransformerFactory.newInstance(TRANSFORMER_FACTORY_IMPL, nil) - factory.uri_resolver = HdsUrlResolver.new(@schematron_file) if url - transformer = factory.new_transformer(StreamSource.new(xslt)) - sw = StringWriter.new - output = StreamResult.new(sw) - transformer.transform(input_file, output) - sw.to_s - end + root = document.document_element + root.set_attribute('defaultPhase', 'errors') + + DOMSource.new(root) end + + def build_transformer(xslt, input_file, url = false) + factory = TransformerFactory.newInstance(TRANSFORMER_FACTORY_IMPL, nil) + factory.uri_resolver = HdsUrlResolver.new(@schematron_file) if url + transformer = factory.new_transformer(StreamSource.new(xslt)) + sw = StringWriter.new + output = StreamResult.new(sw) + transformer.transform(input_file, output) + sw.to_s + end end end +end