Class: Lutaml::Qea::Database
- Inherits:
-
Object
- Object
- Lutaml::Qea::Database
- Defined in:
- lib/lutaml/qea/database.rb,
lib/lutaml/qea/lookup_indexes.rb
Overview
Database container for all loaded EA models
This class provides a unified container for all EA table collections loaded from a QEA database. It stores collections by name and provides accessor methods, statistics, and lookup functionality.
Instance Attribute Summary collapse
-
#collections ⇒ Hash<Symbol, Array>
readonly
Collections of records by name.
-
#connection ⇒ SQLite3::Database?
Database connection.
-
#qea_path ⇒ String
readonly
Path to the QEA file.
Instance Method Summary collapse
-
#add_collection(name, records) ⇒ void
Add a collection to the database.
-
#attribute_tags ⇒ Array<Models::EaAttributeTag>
Get attribute tags collection.
-
#attributes ⇒ Array<Models::EaAttribute>
Get attributes collection.
-
#attributes_for_object(object_id) ⇒ Array<Models::EaAttribute>
Get attributes for a specific object.
-
#child_packages_for(parent_id) ⇒ Array<Models::EaPackage>
Get child packages for a parent.
-
#collection_names ⇒ Array<Symbol>
Get collection names.
-
#complexity_types ⇒ Array<Models::EaComplexityType>
Get complexity types collection (Priority 3 lookup table).
-
#connector_types ⇒ Array<Models::EaConnectorType>
Get connector types collection (Priority 3 lookup table).
-
#connectors ⇒ Array<Models::EaConnector>
Get connectors collection.
-
#connectors_for_object(object_id) ⇒ Array<Models::EaConnector>
Get connectors involving a specific object (start or end).
-
#constraint_types ⇒ Array<Models::EaConstraintType>
Get constraint types collection (Priority 3 lookup table).
-
#datatypes ⇒ Array<Models::EaDatatype>
Get datatypes collection.
-
#diagram_links ⇒ Array<Models::EaDiagramLink>
Get diagram links collection (visual routing).
-
#diagram_links_for(diagram_id) ⇒ Array<Models::EaDiagramLink>
Get diagram links for a specific diagram.
-
#diagram_objects ⇒ Array<Models::EaDiagramObject>
Get diagram objects collection (visual placement).
-
#diagram_objects_for(diagram_id) ⇒ Array<Models::EaDiagramObject>
Get diagram objects for a specific diagram.
-
#diagram_types ⇒ Array<Models::EaDiagramType>
Get diagram types collection (Priority 3 lookup table).
-
#diagrams ⇒ Array<Models::EaDiagram>
Get diagrams collection.
-
#diagrams_in_package(package_id) ⇒ Array<Models::EaDiagram>
Get diagrams in a specific package.
-
#documents ⇒ Array<Models::EaDocument>
Get documents collection (Priority 4).
-
#empty? ⇒ Boolean
Check if database is empty.
-
#find_attribute(id) ⇒ Models::EaAttribute?
Find an attribute by ID.
-
#find_connector(id) ⇒ Models::EaConnector?
Find a connector by ID.
-
#find_diagram(id) ⇒ Models::EaDiagram?
Find a diagram by ID.
-
#find_object(id) ⇒ Models::EaObject?
Find an object by ID.
-
#find_object_by_guid(ea_guid) ⇒ Models::EaObject?
Find object by ea_guid.
-
#find_package(id) ⇒ Models::EaPackage?
Find a package by ID.
-
#freeze ⇒ self
Freeze all collections to make database immutable.
-
#initialize(qea_path, connection = nil) ⇒ Database
constructor
A new instance of Database.
-
#object_constraints ⇒ Array<Models::EaObjectConstraint>
Get object constraints collection.
-
#object_properties ⇒ Array<Models::EaObjectProperty>
Get object properties collection.
-
#object_types ⇒ Array<Models::EaObjectType>
Get object types collection (Priority 3 lookup table).
-
#objects ⇒ Repositories::ObjectRepository
Get objects collection.
-
#objects_in_package(package_id) ⇒ Array<Models::EaObject>
Get objects in a specific package.
-
#operation_params ⇒ Array<Models::EaOperationParam>
Get operation parameters collection.
-
#operation_params_for(operation_id) ⇒ Array<Models::EaOperationParam>
Get operation parameters for a specific operation.
-
#operations ⇒ Array<Models::EaOperation>
Get operations collection.
-
#operations_for_object(object_id) ⇒ Array<Models::EaOperation>
Get operations for a specific object.
-
#packages ⇒ Array<Models::EaPackage>
Get packages collection.
-
#scripts ⇒ Array<Models::EaScript>
Get scripts collection (Priority 4).
-
#stats ⇒ Hash<String, Integer>
Get statistics for all collections.
-
#status_types ⇒ Array<Models::EaStatusType>
Get status types collection (Priority 3 lookup table).
-
#stereotypes ⇒ Array<Models::EaStereotype>
Get stereotypes collection.
-
#tagged_values ⇒ Array<Models::EaTaggedValue>
Get tagged values collection.
-
#total_records ⇒ Integer
Get total number of records across all collections.
-
#xrefs ⇒ Array<Models::EaXref>
Get cross-references collection.
Constructor Details
#initialize(qea_path, connection = nil) ⇒ Database
Returns a new instance of Database.
31 32 33 34 35 36 |
# File 'lib/lutaml/qea/database.rb', line 31 def initialize(qea_path, connection = nil) @qea_path = qea_path @connection = connection @collections = {} @mutex = Mutex.new end |
Instance Attribute Details
#collections ⇒ Hash<Symbol, Array> (readonly)
Returns Collections of records by name.
23 24 25 |
# File 'lib/lutaml/qea/database.rb', line 23 def collections @collections end |
#connection ⇒ SQLite3::Database?
Returns Database connection.
29 30 31 |
# File 'lib/lutaml/qea/database.rb', line 29 def connection @connection end |
#qea_path ⇒ String (readonly)
Returns Path to the QEA file.
26 27 28 |
# File 'lib/lutaml/qea/database.rb', line 26 def qea_path @qea_path end |
Instance Method Details
#add_collection(name, records) ⇒ void
This method returns an undefined value.
Add a collection to the database
51 52 53 54 55 |
# File 'lib/lutaml/qea/database.rb', line 51 def add_collection(name, records) @mutex.synchronize do @collections[name.to_sym] = records.freeze end end |
#attribute_tags ⇒ Array<Models::EaAttributeTag>
Get attribute tags collection
149 150 151 |
# File 'lib/lutaml/qea/database.rb', line 149 def @collections[:attribute_tags] || [] end |
#attributes ⇒ Array<Models::EaAttribute>
Get attributes collection
71 72 73 |
# File 'lib/lutaml/qea/database.rb', line 71 def attributes @collections[:attributes] || [] end |
#attributes_for_object(object_id) ⇒ Array<Models::EaAttribute>
Get attributes for a specific object
333 334 335 336 337 |
# File 'lib/lutaml/qea/database.rb', line 333 def attributes_for_object(object_id) @attributes_by_object_id ||= build_group_index(attributes, :ea_object_id) @attributes_by_object_id[object_id] || [] end |
#child_packages_for(parent_id) ⇒ Array<Models::EaPackage>
Get child packages for a parent
374 375 376 377 |
# File 'lib/lutaml/qea/database.rb', line 374 def child_packages_for(parent_id) @packages_by_parent ||= build_group_index(packages, :parent_id) @packages_by_parent[parent_id] || [] end |
#collection_names ⇒ Array<Symbol>
Get collection names
316 317 318 |
# File 'lib/lutaml/qea/database.rb', line 316 def collection_names @collections.keys end |
#complexity_types ⇒ Array<Models::EaComplexityType>
Get complexity types collection (Priority 3 lookup table)
216 217 218 |
# File 'lib/lutaml/qea/database.rb', line 216 def complexity_types @collections[:complexity_types] || [] end |
#connector_types ⇒ Array<Models::EaConnectorType>
Get connector types collection (Priority 3 lookup table)
186 187 188 |
# File 'lib/lutaml/qea/database.rb', line 186 def connector_types @collections[:connector_types] || [] end |
#connectors ⇒ Array<Models::EaConnector>
Get connectors collection
92 93 94 |
# File 'lib/lutaml/qea/database.rb', line 92 def connectors @collections[:connectors] || [] end |
#connectors_for_object(object_id) ⇒ Array<Models::EaConnector>
Get connectors involving a specific object (start or end)
363 364 365 366 367 368 |
# File 'lib/lutaml/qea/database.rb', line 363 def connectors_for_object(object_id) @connectors_by_start ||= build_group_index(connectors, :start_object_id) @connectors_by_end ||= build_group_index(connectors, :end_object_id) (@connectors_by_start[object_id] || []) + (@connectors_by_end[object_id] || []) end |
#constraint_types ⇒ Array<Models::EaConstraintType>
Get constraint types collection (Priority 3 lookup table)
178 179 180 |
# File 'lib/lutaml/qea/database.rb', line 178 def constraint_types @collections[:constraint_types] || [] end |
#datatypes ⇒ Array<Models::EaDatatype>
Get datatypes collection
170 171 172 |
# File 'lib/lutaml/qea/database.rb', line 170 def datatypes @collections[:datatypes] || [] end |
#diagram_links ⇒ Array<Models::EaDiagramLink>
Get diagram links collection (visual routing)
120 121 122 |
# File 'lib/lutaml/qea/database.rb', line 120 def diagram_links @collections[:diagram_links] || [] end |
#diagram_links_for(diagram_id) ⇒ Array<Models::EaDiagramLink>
Get diagram links for a specific diagram
411 412 413 414 |
# File 'lib/lutaml/qea/database.rb', line 411 def diagram_links_for(diagram_id) @diagram_links_by_id ||= build_group_index(diagram_links, :diagramid) @diagram_links_by_id[diagram_id] || [] end |
#diagram_objects ⇒ Array<Models::EaDiagramObject>
Get diagram objects collection (visual placement)
113 114 115 |
# File 'lib/lutaml/qea/database.rb', line 113 def diagram_objects @collections[:diagram_objects] || [] end |
#diagram_objects_for(diagram_id) ⇒ Array<Models::EaDiagramObject>
Get diagram objects for a specific diagram
401 402 403 404 405 |
# File 'lib/lutaml/qea/database.rb', line 401 def diagram_objects_for(diagram_id) @diagram_objects_by_id ||= build_group_index(diagram_objects, :diagram_id) @diagram_objects_by_id[diagram_id] || [] end |
#diagram_types ⇒ Array<Models::EaDiagramType>
Get diagram types collection (Priority 3 lookup table)
194 195 196 |
# File 'lib/lutaml/qea/database.rb', line 194 def diagram_types @collections[:diagram_types] || [] end |
#diagrams ⇒ Array<Models::EaDiagram>
Get diagrams collection
106 107 108 |
# File 'lib/lutaml/qea/database.rb', line 106 def diagrams @collections[:diagrams] || [] end |
#diagrams_in_package(package_id) ⇒ Array<Models::EaDiagram>
Get diagrams in a specific package
392 393 394 395 |
# File 'lib/lutaml/qea/database.rb', line 392 def diagrams_in_package(package_id) @diagrams_by_package_id ||= build_group_index(diagrams, :package_id) @diagrams_by_package_id[package_id] || [] end |
#documents ⇒ Array<Models::EaDocument>
Get documents collection (Priority 4)
223 224 225 |
# File 'lib/lutaml/qea/database.rb', line 223 def documents @collections[:documents] || [] end |
#empty? ⇒ Boolean
Check if database is empty
309 310 311 |
# File 'lib/lutaml/qea/database.rb', line 309 def empty? @collections.empty? || total_records.zero? end |
#find_attribute(id) ⇒ Models::EaAttribute?
Find an attribute by ID
281 282 283 284 |
# File 'lib/lutaml/qea/database.rb', line 281 def find_attribute(id) @attributes_by_id ||= build_group_index(attributes, :id, single: true) @attributes_by_id[id] end |
#find_connector(id) ⇒ Models::EaConnector?
Find a connector by ID
290 291 292 293 294 |
# File 'lib/lutaml/qea/database.rb', line 290 def find_connector(id) @connectors_by_id ||= build_group_index(connectors, :connector_id, single: true) @connectors_by_id[id] end |
#find_diagram(id) ⇒ Models::EaDiagram?
Find a diagram by ID
300 301 302 303 304 |
# File 'lib/lutaml/qea/database.rb', line 300 def find_diagram(id) @diagrams_by_id ||= build_group_index(diagrams, :diagram_id, single: true) @diagrams_by_id[id] end |
#find_object(id) ⇒ Models::EaObject?
Find an object by ID
263 264 265 |
# File 'lib/lutaml/qea/database.rb', line 263 def find_object(id) objects.find_by_key(:ea_object_id, id) end |
#find_object_by_guid(ea_guid) ⇒ Models::EaObject?
Find object by ea_guid
324 325 326 327 |
# File 'lib/lutaml/qea/database.rb', line 324 def find_object_by_guid(ea_guid) @objects_by_guid ||= build_group_index(objects, :ea_guid, single: true) @objects_by_guid[ea_guid] end |
#find_package(id) ⇒ Models::EaPackage?
Find a package by ID
271 272 273 274 275 |
# File 'lib/lutaml/qea/database.rb', line 271 def find_package(id) @packages_by_id ||= build_group_index(packages, :package_id, single: true) @packages_by_id[id] end |
#freeze ⇒ self
Freeze all collections to make database immutable
419 420 421 422 423 424 425 426 427 428 |
# File 'lib/lutaml/qea/database.rb', line 419 def freeze # Memoize repositories before freezing objects # Eagerly build all lookup indexes before freezing build_lookup_indexes @collections.freeze super end |
#object_constraints ⇒ Array<Models::EaObjectConstraint>
Get object constraints collection
128 129 130 |
# File 'lib/lutaml/qea/database.rb', line 128 def object_constraints @collections[:object_constraints] || [] end |
#object_properties ⇒ Array<Models::EaObjectProperty>
Get object properties collection
142 143 144 |
# File 'lib/lutaml/qea/database.rb', line 142 def object_properties @collections[:object_properties] || [] end |
#object_types ⇒ Array<Models::EaObjectType>
Get object types collection (Priority 3 lookup table)
201 202 203 |
# File 'lib/lutaml/qea/database.rb', line 201 def object_types @collections[:object_types] || [] end |
#objects ⇒ Repositories::ObjectRepository
Get objects collection
60 61 62 63 64 65 66 |
# File 'lib/lutaml/qea/database.rb', line 60 def objects return @objects if defined?(@objects) @objects = Repositories::ObjectRepository.new( @collections[:objects] || [], ) end |
#objects_in_package(package_id) ⇒ Array<Models::EaObject>
Get objects in a specific package
383 384 385 386 |
# File 'lib/lutaml/qea/database.rb', line 383 def objects_in_package(package_id) @objects_by_package_id ||= build_group_index(objects, :package_id) @objects_by_package_id[package_id] || [] end |
#operation_params ⇒ Array<Models::EaOperationParam>
Get operation parameters collection
85 86 87 |
# File 'lib/lutaml/qea/database.rb', line 85 def operation_params @collections[:operation_params] || [] end |
#operation_params_for(operation_id) ⇒ Array<Models::EaOperationParam>
Get operation parameters for a specific operation
353 354 355 356 357 |
# File 'lib/lutaml/qea/database.rb', line 353 def operation_params_for(operation_id) @operation_params_by_id ||= build_group_index(operation_params, :operationid) @operation_params_by_id[operation_id] || [] end |
#operations ⇒ Array<Models::EaOperation>
Get operations collection
78 79 80 |
# File 'lib/lutaml/qea/database.rb', line 78 def operations @collections[:operations] || [] end |
#operations_for_object(object_id) ⇒ Array<Models::EaOperation>
Get operations for a specific object
343 344 345 346 347 |
# File 'lib/lutaml/qea/database.rb', line 343 def operations_for_object(object_id) @operations_by_object_id ||= build_group_index(operations, :ea_object_id) @operations_by_object_id[object_id] || [] end |
#packages ⇒ Array<Models::EaPackage>
Get packages collection
99 100 101 |
# File 'lib/lutaml/qea/database.rb', line 99 def packages @collections[:packages] || [] end |
#scripts ⇒ Array<Models::EaScript>
Get scripts collection (Priority 4)
230 231 232 |
# File 'lib/lutaml/qea/database.rb', line 230 def scripts @collections[:scripts] || [] end |
#stats ⇒ Hash<String, Integer>
Get statistics for all collections
246 247 248 249 250 |
# File 'lib/lutaml/qea/database.rb', line 246 def stats @collections.each_with_object({}) do |(name, records), hash| hash[name.to_s] = records.size end end |
#status_types ⇒ Array<Models::EaStatusType>
Get status types collection (Priority 3 lookup table)
208 209 210 |
# File 'lib/lutaml/qea/database.rb', line 208 def status_types @collections[:status_types] || [] end |
#stereotypes ⇒ Array<Models::EaStereotype>
Get stereotypes collection
163 164 165 |
# File 'lib/lutaml/qea/database.rb', line 163 def stereotypes @collections[:stereotypes] || [] end |
#tagged_values ⇒ Array<Models::EaTaggedValue>
Get tagged values collection
135 136 137 |
# File 'lib/lutaml/qea/database.rb', line 135 def tagged_values @collections[:tagged_values] || [] end |
#total_records ⇒ Integer
Get total number of records across all collections
255 256 257 |
# File 'lib/lutaml/qea/database.rb', line 255 def total_records @collections.values.sum(&:size) end |
#xrefs ⇒ Array<Models::EaXref>
Get cross-references collection
156 157 158 |
# File 'lib/lutaml/qea/database.rb', line 156 def xrefs @collections[:xrefs] || [] end |