Class: Ea::Sources::Xmi::PackageBuilder
- Inherits:
-
Object
- Object
- Ea::Sources::Xmi::PackageBuilder
- Defined in:
- lib/ea/sources/xmi/package_builder.rb
Overview
Translates XMI uml:Package elements into Ea::Model::Package instances. Walks the packaged_element tree recursively so nested packages are picked up.
Instance Attribute Summary collapse
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Instance Method Summary collapse
- #build_all ⇒ Object
- #build_one(packaged_element, parent_id:) ⇒ Object
-
#initialize(root) ⇒ PackageBuilder
constructor
A new instance of PackageBuilder.
- #walk_packages(element, parent_id, &block) ⇒ Object
Constructor Details
#initialize(root) ⇒ PackageBuilder
Returns a new instance of PackageBuilder.
12 13 14 |
# File 'lib/ea/sources/xmi/package_builder.rb', line 12 def initialize(root) @root = root end |
Instance Attribute Details
#root ⇒ Object (readonly)
Returns the value of attribute root.
10 11 12 |
# File 'lib/ea/sources/xmi/package_builder.rb', line 10 def root @root end |
Instance Method Details
#build_all ⇒ Object
16 17 18 19 20 21 22 |
# File 'lib/ea/sources/xmi/package_builder.rb', line 16 def build_all packages = [] walk_packages(root.model, nil) do |pe, parent_id| packages << build_one(pe, parent_id: parent_id) end packages end |
#build_one(packaged_element, parent_id:) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/ea/sources/xmi/package_builder.rb', line 34 def build_one(packaged_element, parent_id:) id = IdNormalizer.from_xmi_id(packaged_element.id) Ea::Model::Package.new( id: id, name: packaged_element.name, parent_id: parent_id, qualified_name: packaged_element.name, sub_package_ids: child_package_ids(packaged_element), classifier_ids: child_classifier_ids(packaged_element), annotations: AnnotationBuilder.from_element(packaged_element, id) ) end |
#walk_packages(element, parent_id, &block) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/ea/sources/xmi/package_builder.rb', line 24 def walk_packages(element, parent_id, &block) element.packaged_element.each do |inner| next unless inner.type == "uml:Package" id = IdNormalizer.from_xmi_id(inner.id) yield inner, parent_id walk_packages(inner, id, &block) end end |