an ability to define an OrderedGroup component

+1 vote
asked Apr 17, 2018 in Wanted features by boshka (3,940 points)
retagged Dec 9, 2019 by boshka

am I able to define an OrderedGroup component and then define interfaces for each of the group members?

OrderedGroup component
Applications
Middleware
SOC

Etc. So that the grouped members are always displayed next to each other (like storeуs) and are always in the strict order.

This would help building architecture diagrams that should show strict order (levels or storeys) of components

Here are some more details on the expectations (the main point of the group component are the rules the children are layed out and ordered):

commented Nov 26, 2018 by boshka (3,940 points)
are there any ideas how to achieve this?
Probably we could somehow define in the iuml, that Component 1 shall autoexpand to the width of it's parent (i.e. "Component" on the attached diagram). Same about Component 2. Hence, since Component 1 is defined 1st, it will be displayed as the top layer. And, since it is defined 2nd, Component 2 will be displayed as the bottom layer.
commented Dec 21, 2018 by boshka (3,940 points)
The simplest way I could see would be to have a delimiter, that can be defined within a component (a horizontal for the start) that would separate other elements (child components) top/bottom side from the delimiter.
It can be something like the one used in the sequence diagram (==Text==):
So that, from iuml it would something like this

component "a" as a {
   ==Layer 1==
   component "L1" as L1 {
   }
   ==Layer 2==
   component "L2" as L2 {
   }
}

It would greatly help organizing things more structured on component diagrams. I know there is a hack to define an invisible link like -[hidden]-, however, it does not work good in all cases.

1 Answer

0 votes
answered Jan 10, 2019 by plantuml (294,960 points)
Unfortunately, the current layout engine (graphviz/dot) used for component diagrams does not allow this kind of things.

This would mean using a new layout engine, which is theorically possible, but would need a huge amount of work.

So currently we cannot help on the request. Sorry about that.
commented Jan 10, 2019 by boshka (3,940 points)
so, my proposal of Dec 21, 2018 would not work either?
commented Jan 11, 2019 by Serge Wenger Work (15,620 points)
A dummy workaround is something like:
@startuml
rectangle a as "
00000000
==111==
aaaaaa
====
bbbbbb
====
cccc
"
@enduml
http://www.plantuml.com/plantuml/png/SoWkIImgAStDuIfAJIv9p4lFILL8L4WiLb3YCe02BbjRGqD3MrkkH300Se7i9320i9E1W4k9oo4rBmLe4000
commented Jan 11, 2019 by boshka (3,940 points)
edited Jan 11, 2019 by boshka
That would not work since I cannot actually place "component b as b {...}" instead of, say, bbbbbb. Could we support something like this:
@startuml

rectangle a as "
==BBB==
component b as b {
}
==CCC==
component c as c {
}

b ->c
"
@enduml


I do want the components to be layered and have an ability to link those in a regular way using interfaces.
commented Mar 6, 2019 by boshka (3,940 points)
yet another approach (that works in state diagrams):

@startuml
state a {
   
    state b {
    }
    --
    state c {
    }
}
@enduml

can we do the same in component diagrams, i.e. like this:

@startuml

component a {
    --
    component b {
    }
    --
    component c {
    }
}
@enduml
...