Module: Lutaml::Qea

Defined in:
lib/lutaml/qea.rb,
lib/lutaml/qea/parser.rb,
lib/lutaml/qea/database.rb,
lib/lutaml/qea/benchmark.rb,
lib/lutaml/qea/file_detector.rb,
lib/lutaml/qea/models/ea_xref.rb,
lib/lutaml/qea/models/ea_object.rb,
lib/lutaml/qea/models/ea_script.rb,
lib/lutaml/qea/models/base_model.rb,
lib/lutaml/qea/models/ea_diagram.rb,
lib/lutaml/qea/models/ea_package.rb,
lib/lutaml/qea/models/ea_datatype.rb,
lib/lutaml/qea/models/ea_document.rb,
lib/lutaml/qea/models/ea_attribute.rb,
lib/lutaml/qea/models/ea_connector.rb,
lib/lutaml/qea/models/ea_operation.rb,
lib/lutaml/qea/models/ea_stereotype.rb,
lib/lutaml/qea/models/ea_object_type.rb,
lib/lutaml/qea/models/ea_status_type.rb,
lib/lutaml/qea/models/ea_diagram_link.rb,
lib/lutaml/qea/models/ea_diagram_type.rb,
lib/lutaml/qea/models/ea_tagged_value.rb,
lib/lutaml/qea/services/configuration.rb,
lib/lutaml/qea/models/ea_attribute_tag.rb,
lib/lutaml/qea/factory/base_transformer.rb,
lib/lutaml/qea/factory/document_builder.rb,
lib/lutaml/qea/factory/enum_transformer.rb,
lib/lutaml/qea/models/ea_connector_type.rb,
lib/lutaml/qea/models/ea_diagram_object.rb,
lib/lutaml/qea/services/database_loader.rb,
lib/lutaml/qea/factory/class_transformer.rb,
lib/lutaml/qea/factory/ea_to_uml_factory.rb,
lib/lutaml/qea/models/ea_complexity_type.rb,
lib/lutaml/qea/models/ea_constraint_type.rb,
lib/lutaml/qea/models/ea_object_property.rb,
lib/lutaml/qea/models/ea_operation_param.rb,
lib/lutaml/qea/validation/base_validator.rb,
lib/lutaml/qea/factory/reference_resolver.rb,
lib/lutaml/qea/validation/class_validator.rb,
lib/lutaml/qea/factory/diagram_transformer.rb,
lib/lutaml/qea/factory/package_transformer.rb,
lib/lutaml/qea/infrastructure/table_reader.rb,
lib/lutaml/qea/models/ea_object_constraint.rb,
lib/lutaml/qea/factory/instance_transformer.rb,
lib/lutaml/qea/factory/transformer_registry.rb,
lib/lutaml/qea/infrastructure/schema_reader.rb,
lib/lutaml/qea/repositories/base_repository.rb,
lib/lutaml/qea/validation/diagram_validator.rb,
lib/lutaml/qea/validation/package_validator.rb,
lib/lutaml/qea/validation/validation_engine.rb,
lib/lutaml/qea/validation/validation_result.rb,
lib/lutaml/qea/factory/attribute_transformer.rb,
lib/lutaml/qea/factory/data_type_transformer.rb,
lib/lutaml/qea/factory/operation_transformer.rb,
lib/lutaml/qea/validation/validation_message.rb,
lib/lutaml/qea/validation/validator_registry.rb,
lib/lutaml/qea/factory/constraint_transformer.rb,
lib/lutaml/qea/repositories/object_repository.rb,
lib/lutaml/qea/validation/attribute_validator.rb,
lib/lutaml/qea/validation/operation_validator.rb,
lib/lutaml/qea/verification/comparison_result.rb,
lib/lutaml/qea/verification/document_verifier.rb,
lib/lutaml/qea/verification/structure_matcher.rb,
lib/lutaml/qea/factory/association_transformer.rb,
lib/lutaml/qea/verification/element_comparator.rb,
lib/lutaml/qea/factory/tagged_value_transformer.rb,
lib/lutaml/qea/validation/association_validator.rb,
lib/lutaml/qea/verification/document_normalizer.rb,
lib/lutaml/qea/factory/attribute_tag_transformer.rb,
lib/lutaml/qea/factory/generalization_transformer.rb,
lib/lutaml/qea/infrastructure/database_connection.rb,
lib/lutaml/qea/factory/object_property_transformer.rb,
lib/lutaml/qea/validation/database/orphan_validator.rb,
lib/lutaml/qea/validation/formatters/json_formatter.rb,
lib/lutaml/qea/validation/formatters/text_formatter.rb,
lib/lutaml/qea/validation/database/circular_reference_validator.rb,
lib/lutaml/qea/validation/database/referential_integrity_validator.rb

Overview

QEA module provides direct SQLite database parsing for Enterprise Architect .qea files, bypassing XMI for better performance and access to EA-specific metadata.

This is the main public API for working with QEA files.

Examples:

Connect and read schema

conn = Lutaml::Qea::Infrastructure::DatabaseConnection.new("model.qea")
conn.with_connection do |db|
  reader = Lutaml::Qea::Infrastructure::SchemaReader.new(db)
  puts reader.tables
end

Load configuration

config = Lutaml::Qea::Services::Configuration.load
puts config.enabled_tables.map(&:table_name)

Defined Under Namespace

Modules: Factory, Infrastructure, Models, Repositories, Services, Validation, Verification Classes: Benchmark, Database, FileDetector, Parser

Constant Summary collapse

VERSION =

QEA Parser version

"0.1.0"

Class Method Summary collapse

Class Method Details

.configurationServices::Configuration

Get the current configuration

Returns:



43
44
45
# File 'lib/lutaml/qea.rb', line 43

def configuration
  @configuration ||= Services::Configuration.load
end

.configuration=(config) ⇒ Object

Set a custom configuration

Parameters:



50
51
52
# File 'lib/lutaml/qea.rb', line 50

def configuration=(config)
  @configuration = config
end

.connect(file_path) ⇒ Infrastructure::DatabaseConnection

Connect to a QEA file

Examples:

conn = Qea.connect("model.qea")
conn.with_connection do |db|
  # Use db
end

Parameters:

  • file_path (String)

    Path to the .qea file

Returns:



72
73
74
# File 'lib/lutaml/qea.rb', line 72

def connect(file_path)
  Infrastructure::DatabaseConnection.new(file_path)
end

.database_info(qea_path, config = nil) ⇒ Hash<String, Integer>

Get quick database statistics without full loading

Optional custom configuration

Examples:

info = Qea.database_info("model.qea")
puts info
# => {"objects" => 693, "attributes" => 1910, ...}

Parameters:

Returns:

  • (Hash<String, Integer>)

    Collection names to record counts



151
152
153
154
# File 'lib/lutaml/qea.rb', line 151

def database_info(qea_path, config = nil)
  loader = Services::DatabaseLoader.new(qea_path, config)
  loader.quick_stats
end

.load_database(qea_path, config = nil, &progress_callback) ⇒ Database

Load complete database with all tables and models

Optional custom configuration

Examples:

Load database

database = Qea.load_database("model.qea")
puts database.stats
# => {"objects" => 693, "attributes" => 1910, ...}

With progress callback

database = Qea.load_database("model.qea") do |table, current, total|
  puts "Loading #{table}: #{current}/#{total}"
end

Parameters:

Returns:

  • (Database)

    Loaded database with all collections



134
135
136
137
138
# File 'lib/lutaml/qea.rb', line 134

def load_database(qea_path, config = nil, &progress_callback)
  loader = Services::DatabaseLoader.new(qea_path, config)
  loader.on_progress(&progress_callback) if progress_callback
  loader.load
end

.open(file_path) {|Infrastructure::DatabaseConnection| ... } ⇒ Object

Open a QEA file and yield the connection

Examples:

Qea.open("model.qea") do |conn|
  conn.with_connection do |db|
    reader = Qea::Infrastructure::SchemaReader.new(db)
    puts reader.tables
  end
end

Parameters:

  • file_path (String)

    Path to the .qea file

Yields:

Returns:

  • (Object)

    The result of the block



89
90
91
92
93
94
# File 'lib/lutaml/qea.rb', line 89

def open(file_path)
  connection = connect(file_path)
  yield connection
ensure
  connection&.close if connection&.connected?
end

.parse(qea_path, options = {}) ⇒ Lutaml::Uml::Document, Hash

Parse QEA file to complete UML Document

(default: true) (default: false) :document and :validation_result

Examples:

Parse QEA file

document = Lutaml::Qea.parse("model.qea")
puts "Packages: #{document.packages.size}"
puts "Classes: #{document.classes.size}"
puts "Associations: #{document.associations.size}"

Parse with validation

result = Lutaml::Qea.parse("model.qea", validate: true)
document = result[:document]
validation = result[:validation_result]
puts validation.summary

Use with UmlRepository

document = Lutaml::Qea.parse("model.qea")
repo = Lutaml::UmlRepository::Repository.new(document: document)
results = repo.search("Building")
puts "Found #{results[:total]} matches"

Parameters:

  • qea_path (String)

    Path to the .qea file

  • options (Hash) (defaults to: {})

    Transformation options

Options Hash (options):

  • :include_diagrams (Boolean)

    Include diagrams

  • :validate (Boolean)

    Validate during parsing

  • :document_name (String)

    Document name

  • :config (Services::Configuration)

    Custom configuration

Returns:



186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# File 'lib/lutaml/qea.rb', line 186

def parse(qea_path, options = {}) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
  # Extract config and validation options
  config = options.delete(:config)
  validate = options.delete(:validate)

  # Load database (connection stays open)
  loader = Services::DatabaseLoader.new(qea_path, config)
  ea_database = loader.load

  begin
    # Create and execute factory
    factory = Factory::EaToUmlFactory.new(ea_database, options)
    document = factory.create_document

    # Run validation if requested
    if validate
      engine = Validation::ValidationEngine.new(
        document,
        database: ea_database,
        **options,
      )
      validation_result = engine.validate

      {
        document: document,
        validation_result: validation_result,
      }
    else
      document
    end
  ensure
    # Close the connection when done (unless validation needs it)
    if !validate &&
        ea_database.connection && !ea_database.connection.closed?
      ea_database.connection&.close
    end
  end
end

.reload_configuration(config_path = nil) ⇒ Services::Configuration

Reload configuration from file

Parameters:

  • config_path (String, nil) (defaults to: nil)

    Optional custom config path

Returns:



58
59
60
# File 'lib/lutaml/qea.rb', line 58

def reload_configuration(config_path = nil)
  @configuration = Services::Configuration.load(config_path)
end

.schema_info(file_path) ⇒ Hash

Get schema information from a QEA file

Examples:

info = Qea.schema_info("model.qea")
puts info[:tables]
puts info[:statistics]

Parameters:

  • file_path (String)

    Path to the .qea file

Returns:

  • (Hash)

    Schema information including tables and row counts



105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/lutaml/qea.rb', line 105

def schema_info(file_path)
  connection = connect(file_path)
  connection.with_connection do |db|
    reader = Infrastructure::SchemaReader.new(db)
    {
      tables: reader.tables,
      statistics: reader.statistics,
    }
  end
ensure
  connection&.close if connection&.connected?
end