Collect model elements for the CableTreeDiagram.
Source code in src/capellambse_context_diagrams/collectors/cable_tree.py
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 | def collector(
diagram: context.ContextDiagram,
) -> cabc.Iterator[m.ModelElement]:
"""Collect model elements for the CableTreeDiagram."""
ports = set()
links = set()
def _collect(
port_obj: m.ModelElement, filter: Filter = lambda i: i
) -> cabc.Iterator[m.ModelElement]:
if port_obj.uuid in ports:
return
ports.add(port_obj.uuid)
for link in filter(port_obj.links):
if link.uuid in links:
continue
links.add(link.uuid)
yield link
yield from _collect(link.source, filter=filter)
yield from _collect(link.target, filter=filter)
src, tgt = diagram.target.source, diagram.target.target
src_owner, tgt_owner = src.owner.uuid, tgt.owner.uuid
if src_owner in set(_generic.get_all_owners(tgt)):
common_owner = src_owner
elif tgt_owner in set(_generic.get_all_owners(src)):
common_owner = tgt_owner
else:
yield from _collect(src)
return
yield from _collect(
src,
filter=lambda items: (
item
for item in items
if common_owner in set(_generic.get_all_owners(item))
),
)
|