module Lutaml::UmlRepository::IndexBuilders::ClassIndex

def build_qualified_name_index

Other tags:
    Api: - public
def build_qualified_name_index
  index_document_classifiers
  index_package_classifiers
end

def build_stereotype_index

Other tags:
    Api: - public
def build_stereotype_index
  index_document_stereotypes
  index_package_stereotypes
end

def has_stereotype?(classifier)

def has_stereotype?(classifier)
  classifier.stereotype && !classifier.stereotype.empty?
end

def index_by_stereotype(classifiers)

Parameters:
  • classifiers (Array) -- Array of classifier objects
def index_by_stereotype(classifiers)
  return unless classifiers
  classifiers.each do |classifier|
    next unless has_stereotype?(classifier)
    Array(classifier.stereotype).each do |stereotype|
      (@stereotypes[stereotype] ||= []) << classifier
    end
  end
end

def index_classifier(classifier, package_path)

def index_classifier(classifier, package_path)
  qualified_name = "#{package_path}::#{classifier.name}"
  @qualified_names[qualified_name] = classifier
  if classifier.xmi_id
    @class_to_qname[classifier.xmi_id] =
      qualified_name
  end
  @classes[classifier.xmi_id] = classifier if classifier.xmi_id
  (@simple_name_to_qnames[classifier.name] ||= []) << qualified_name
  (@package_to_classes[package_path] ||= []) << classifier
end

def index_classifiers(classifiers, package_path)

Parameters:
  • package_path (String) -- Package path for these classifiers
  • classifiers (Array) -- Array of classifier objects
def index_classifiers(classifiers, package_path)
  return unless classifiers
  classifiers.each do |classifier|
    next unless classifier.name
    index_classifier(classifier, package_path)
  end
end

def index_document_classifiers

def index_document_classifiers
  if @document.classes
    index_classifiers(@document.classes,
                      IndexBuilder::ROOT_PACKAGE_NAME)
  end
  if @document.data_types
    index_classifiers(@document.data_types,
                      IndexBuilder::ROOT_PACKAGE_NAME)
  end
  if @document.enums
    index_classifiers(@document.enums,
                      IndexBuilder::ROOT_PACKAGE_NAME)
  end
end

def index_document_stereotypes

def index_document_stereotypes
  index_by_stereotype(@document.classes) if @document.classes
  index_by_stereotype(@document.data_types) if @document.data_types
  index_by_stereotype(@document.enums) if @document.enums
end

def index_package_classifiers

def index_package_classifiers
  traverse_packages(@document.packages,
                    parent_path: IndexBuilder::ROOT_PACKAGE_NAME) do |package, path|
    index_classifiers(package.classes, path) if package.classes
    index_classifiers(package.data_types, path) if package.data_types
    index_classifiers(package.enums, path) if package.enums
  end
end

def index_package_stereotypes

def index_package_stereotypes
  traverse_packages(@document.packages) do |package, _path|
    index_by_stereotype(package.classes) if package.classes
    index_by_stereotype(package.data_types) if package.data_types
    index_by_stereotype(package.enums) if package.enums
  end
end