Skip to content

cable_tree

Collector for the CableTreeDiagram.

collector 🔗

collector(diagram: ContextDiagram) -> cabc.Iterator[m.ModelElement]

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))
        ),
    )