Issue #3613014: Build composite (All/Any) flow conditions in the form modeler
Composite flow conditions (all / any) could be selected on a sequence flow but not populated: CompositeConditionBase::buildConfigurationForm() was empty, so the child tree could only be authored by hand-editing config. The engine and config schema already supported the nested tree; only the editor (and a lossless BPMN.io roundtrip) were missing.
This adds a recursive sub-condition editor in the form modeler (orchestra_cm) only, and keeps the tree intact across a BPMN.io save.
Form modeler editor
ConditionTreeBuilder: a self-contained helper that seeds a keyed working tree from the stored conditions, adds / removes / re-plugs children by path, harvests submitted settings back into the tree, renders the recursive editor, and converts the tree back to the stored list.OrchestraCmForm: renders the editor in place of the raw field for composite conditions, keeps the working tree in form state across the add / remove / re-plug Ajax, and assembles the tree into the flow condition on save. Nests to any depth.
Lossless BPMN.io roundtrip
CompositeConditionBasecarries its children as a single JSONconditionsfield (portable across the flatcamunda:fieldserializer) and declaresconditionsindefaultConfiguration().Orchestra::ownerComponentDefaultConfig()returns the condition plugin's defaults for LINK components, sobpmn_iorehydrates theconditionsfield to an array on import. A composite built in the form modeler survives a later BPMN.io save unchanged. BPMN.io gets no editor, only preservation.
Tests
ModelOwnerTest::testCompositeConditionRoundTrip()(kernel): a nestedany(all(comparison, count), comparison)survivesusedComponents()thenaddComponent().ConditionTreeBuilderTest(kernel): the tree operations (working/config roundtrip, add, nest, remove, re-plug, harvest).CompositeConditionTest(FunctionalJavascript): builds, nests, fills, saves and removes children in a real browser and asserts the persisted tree.
Docs (docs/modeling.md) and French translations included.