lib/openstudio/analysis/translator/datapoints.rb in openstudio-analysis-1.0.4 vs lib/openstudio/analysis/translator/datapoints.rb in openstudio-analysis-1.0.5

- old
+ new

@@ -56,11 +56,11 @@ # remove these once we have classes to construct the JSON file attr_accessor :name attr_reader :analysis_name - require 'nokogiri' + require 'rexml/document' # Pass in the filename to read def initialize(csv_filename) @csv_filename = csv_filename @root_path = File.expand_path(File.dirname(@csv_filename)) @@ -366,20 +366,20 @@ # For each measure load measure json and parse out critical variable requirements data = [] measures.each_with_index do |measure, measure_index| data[measure_index] = {} - measure_xml, measure_type = find_measure(measure.to_s) + measure_parsed = find_measure(measure.to_s) - raise "Could not find measure #{measure} xml in measure_paths: '#{@measure_paths.join("\n")}'" unless measure_xml + raise "Could not find measure #{measure} xml in measure_paths: '#{@measure_paths.join("\n")}'" unless measure_parsed measure_data = {} - measure_data[:classname] = measure_xml.xpath('/measure/class_name').text - measure_data[:name] = measure_xml.xpath('/measure/name').text - measure_data[:display_name] = measure_xml.xpath('/measure/display_name').text - measure_data[:measure_type] = measure_type - measure_data[:uid] = measure_xml.xpath('/measure/uid').text - measure_data[:version_id] = measure_xml.xpath('/measure/version_id').text + measure_data[:classname] = measure_parsed[:classname] + measure_data[:name] = measure_parsed[:name] + measure_data[:display_name] = measure_parsed[:display_name] + measure_data[:measure_type] = measure_parsed[:measure_type] + measure_data[:uid] = measure_parsed[:uid] + measure_data[:version_id] = measure_parsed[:version_id] data[measure_index][:measure_data] = measure_data data[measure_index][:vars] = [] vars = measure_map[measure] # construct the list of variables @@ -387,12 +387,12 @@ # var looks like [:cooling_adjustment, 0] var = var[0] next if var.to_s == 'None' var_hash = {} found_arg = nil - measure_xml.xpath('/measure/arguments/argument').each do |arg| - if var.to_s == '__SKIP__' || arg.xpath('name').text == var.to_s + measure_parsed[:arguments].each do |arg| + if var.to_s == '__SKIP__' || arg[:name] == var.to_s found_arg = arg break end end @@ -402,12 +402,12 @@ var_units = '' if var.to_s == '__SKIP__' var_type = 'boolean' var_units = '' else - var_type = found_arg.xpath('type').text.downcase - var_units = found_arg.xpath('units') + var_type = found_arg[:variable_type].downcase + var_units = found_arg[:units] end var_hash[:name] = var.to_s var_hash[:variable_type] = 'variable' var_hash[:display_name] = measure_rows[2][measure_map[measure][var]] @@ -435,27 +435,28 @@ end var_hash[:distribution][:weights] = eval('[' + "#{1.0 / (measure_rows.length - 3)}," * (measure_rows.length - 3) + ']') var_hash[:distribution][:type] = 'discrete' var_hash[:distribution][:units] = var_hash[:units] if var_hash[:type] == 'choice' - var_hash[:distribution][:enumerations] = found_arg.xpath('choices/choice').map { |s| s.xpath('value').text } + # var_hash[:distribution][:enumerations] = found_arg.xpath('choices/choice').map { |s| s.xpath('value').text } + # This would need to be updated if we want to do this again... sorry. elsif var_hash[:type] == 'bool' var_hash[:distribution][:enumerations] = [] var_hash[:distribution][:enumerations] << true var_hash[:distribution][:enumerations] << false end data[measure_index][:vars] << var_hash end data[measure_index][:args] = [] - measure_xml.xpath('/measure/arguments/argument').each do |arg_xml| + measure_parsed[:arguments].each do |arg_xml| arg = {} - arg[:value_type] = arg_xml.xpath('type').text.downcase - arg[:name] = arg_xml.xpath('name').text.downcase - arg[:display_name] = arg_xml.xpath('display_name').text.downcase + arg[:value_type] = arg_xml[:variable_type] + arg[:name] = arg_xml[:name] + arg[:display_name] = arg_xml[:display_name].downcase arg[:display_name_short] = arg[:display_name] - arg[:default_value] = arg_xml.xpath('default_value').text.downcase + arg[:default_value] = arg_xml[:default_value].downcase arg[:value] = arg[:default_value] data[measure_index][:args] << arg end end @@ -468,30 +469,15 @@ def find_measure(measure_name) @measure_paths.each do |mp| measure_xml = File.join(mp, measure_name, 'measure.xml') measure_rb = File.join(mp, measure_name, 'measure.rb') if File.exist?(measure_xml) && File.exist?(measure_rb) - return Nokogiri::XML File.read(measure_xml), parse_measure_type(measure_rb) + measure_parsed = parse_measure_xml(measure_xml) + return measure_parsed end end - return nil, nil - end - - def parse_measure_type(measure_filename) - measure_string = File.read(measure_filename) - - if measure_string =~ /OpenStudio::Ruleset::WorkspaceUserScript/ - return 'EnergyPlusMeasure' - elsif measure_string =~ /OpenStudio::Ruleset::ModelUserScript/ - return 'RubyMeasure' - elsif measure_string =~ /OpenStudio::Ruleset::ReportingUserScript/ - return 'ReportingMeasure' - elsif measure_string =~ /OpenStudio::Ruleset::UtilityUserScript/ - return 'UtilityUserScript' - else - raise "measure type is unknown with an inherited class in #{measure_filename}" - end + return nil end end end end end