node_evaluation_helper.rb revision 022df7f893582e7e8efffce816ae27f6d1015766
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engenmodule Hets
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen module DG
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen module NodeEvaluationHelper
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen def clean_ontology(ontology)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology.symbols.destroy_all
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology.all_sentences.destroy_all
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology.symbols_count = 0
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology.sentences_count = 0
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology.save!
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen end
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen def assign_language(ontology, current_element)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen if current_element['language']
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen iri = "http://purl.net/dol/language/#{current_element['language']}"
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology.language = Language.where(iri: iri)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen .first_or_create(user: user, name: current_element['language'])
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen end
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen end
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen def assign_logic(ontology, current_element)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen if current_element['logic']
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen iri = "http://purl.net/dol/logics/#{current_element['logic']}"
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology.logic = Logic.where(iri: iri)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen .first_or_create(user: user, name: current_element['logic'])
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen end
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen end
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen def assign_distributed_ontology_logic(ontology)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen iri = "http://purl.net/dol/logics/#{Logic::DEFAULT_DISTRIBUTED_ONTOLOGY_LOGIC}"
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen name = Logic::DEFAULT_DISTRIBUTED_ONTOLOGY_LOGIC
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology.logic = Logic.where(iri: iri)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen .first_or_create(user: user, name: name)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen end
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen def procure_child_ontology(internal_iri)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen # generate IRI for child-ontology
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen child_iri = parent_ontology.iri_for_child(internal_iri)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen child_locid = parent_ontology.locid_for_child(internal_iri)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen # find or create child-ontology by IRI
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology = parent_ontology.children.find_with_locid(child_locid, child_iri)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen if ontology.nil?
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen options = {
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen iri: child_iri,
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen locid: child_locid,
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen name: internal_iri,
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen basepath: parent_ontology.basepath,
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen file_extension: parent_ontology.file_extension,
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen repository_id: parent_ontology.repository_id,
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen present: true,
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen }
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology = SingleOntology.create!(options, without_protection: true)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen parent_ontology.children << ontology
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen end
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen version = ontology.versions.build
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen version.user = user
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen version.basepath = ontology.basepath
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen version.parent = parent_version
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen version.commit_oid = parent_version.try(:commit_oid)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen version.commit = parent_version.try(:commit)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen version.file_extension = ontology.file_extension
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen # This version will not exist if the parsing fails
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen version.do_not_parse!
41ca89087a8700aaa7992cbfe9bc8f93da15343bDwight Engen
9e4bf8b12aecd4629cdb3e3c7a856b54f400f8e2Dwight Engen hets_evaluator.versions << version
9e4bf8b12aecd4629cdb3e3c7a856b54f400f8e2Dwight Engen
9e4bf8b12aecd4629cdb3e3c7a856b54f400f8e2Dwight Engen ontology
9e4bf8b12aecd4629cdb3e3c7a856b54f400f8e2Dwight Engen end
9e4bf8b12aecd4629cdb3e3c7a856b54f400f8e2Dwight Engen
9e4bf8b12aecd4629cdb3e3c7a856b54f400f8e2Dwight Engen def parent_version
41ca89087a8700aaa7992cbfe9bc8f93da15343bDwight Engen hets_evaluator.version if parent_ontology
41ca89087a8700aaa7992cbfe9bc8f93da15343bDwight Engen end
41ca89087a8700aaa7992cbfe9bc8f93da15343bDwight Engen
41ca89087a8700aaa7992cbfe9bc8f93da15343bDwight Engen def alias_iris_for_mappings!(current_element)
41ca89087a8700aaa7992cbfe9bc8f93da15343bDwight Engen aliases = hets_evaluator.ontology_aliases
41ca89087a8700aaa7992cbfe9bc8f93da15343bDwight Engen current_element['source_iri'] = aliases[current_element['source']]
41ca89087a8700aaa7992cbfe9bc8f93da15343bDwight Engen current_element['target_iri'] = aliases[current_element['target']]
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen end
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen def generate_ontology_iri(internal_iri, current_element)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen if current_element['reference'] == 'true'
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontology = Ontology.find_with_iri(internal_iri)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen if ontology.nil?
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontohub_iri = ExternalRepository.determine_iri(internal_iri)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen else
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontohub_iri = ontology.iri
7aff4f43fd84b021db12b2ffed1a4aa1b4cf65efSerge Hallyn end
7aff4f43fd84b021db12b2ffed1a4aa1b4cf65efSerge Hallyn else
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen if parent_ontology.distributed?
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen ontohub_iri = parent_ontology.iri_for_child(internal_iri)
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen else
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen # we use 0 here, because the first time around, we
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen # have ontologies_count 0 which is increased by one
7aff4f43fd84b021db12b2ffed1a4aa1b4cf65efSerge Hallyn # after obtaining the lock. We need to preempt
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen # this message, because otherwise we would
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen # fail here with a lock issue instead of the
fe4de9a66d112cb9ddd5977dcce075323f29a39aDwight Engen # 'more than one ontology' issue.
if hets_evaluator.ontologies_count > 0
raise "more than one #{Settings.OMS} found"
else
ontohub_iri = parent_ontology.iri
end
end
end
end
def procure_ontology(element, iri)
if element['reference'] == 'true'
ontology = Ontology.find_with_iri(iri)
if ontology.nil?
ontology = ExternalRepository.create_ontology(iri)
end
hets_evaluator.ontology_aliases[element['name']] = ontology.iri
else
hets_evaluator.ontologies_count += 1
if parent_ontology.distributed?
assign_distributed_ontology_logic(parent_ontology)
ontology = procure_child_ontology(iri)
else
ontology = parent_ontology
ontology.present = true
end
end
clean_ontology(ontology)
ontology
end
def code_reference_from_range(range)
return if range.nil?
match = range.match( %r{
(?<begin_line>\d+)\.
(?<begin_column>\d+)
-
(?<end_line>\d+)\.
(?<end_column>\d+)}x)
if match
reference = CodeReference.new(begin_line: match[:begin_line].to_i,
begin_column: match[:begin_column].to_i,
end_line: match[:end_line].to_i,
end_column: match[:end_column].to_i)
end
end
# if it is possible for ontologies to be a relation we should optimize the
# call by using #select instead of #map.
def update_ontologies_per_logic_count!(ontologies)
Logic.where(id: ontologies.map(&:logic_id)).pluck(:id).each do |logic_id|
Logic.reset_counters(logic_id, :ontologies)
end
end
end
end
end