From cc9235cd2dc3c47abb50efcc3e818066a73caeb0 Mon Sep 17 00:00:00 2001 From: KIRCHSTH Date: Thu, 17 Dec 2020 23:55:48 +0100 Subject: [PATCH] #95 Dynamic diagrams supports Index(), LastIndex() and SetIndex() --- C4_Dynamic.puml | 109 +++++++++--------- README.md | 10 +- ...ram Sample - message bus - old format.puml | 35 ++++++ ..._Dynamic Diagram Sample - message bus.puml | 20 ++-- 4 files changed, 104 insertions(+), 70 deletions(-) create mode 100644 samples/C4_Dynamic Diagram Sample - message bus - old format.puml diff --git a/C4_Dynamic.puml b/C4_Dynamic.puml index b41eb63..7de5d38 100644 --- a/C4_Dynamic.puml +++ b/C4_Dynamic.puml @@ -10,22 +10,45 @@ ' Intended audience: Technical and non-technical people, inside and outside of the software development team. ' Dynamic diagram introduces (automatically) numbered interactions: -' SetIndex(): set the next index, -' GetIndex(): get the index and automatically increase index +' (lowercase) increment($offset=1): increase current index (procedure which has no direct output) +' (lowercase) setIndex($new_index): set the new index (procedure which has no direct output) +' +' (Uppercase) LastIndex(): return the last used index (function which can be used as argument) +' (Uppercase) Index($offset=1): returns current index and calculates next index (function which can be used as argument) +' (Uppercase) SetIndex($new_index): returns new set index and calculates next index (function which can be used as argument) ' Index ' ################################## -!$index=1 +!$lastIndex = 0 +!$index = 1 -!procedure increment($step=1) -!$index = $index + $step +!procedure increment($offset=1) + !$lastIndex = $index + !$index = $index + $offset !endprocedure !procedure setIndex($new_index) -!$index=$new_index + !$lastIndex = $index + !$index= $new_index !endprocedure +!function Index($offset=1) + !$lastIndex = $index + !$index = $lastIndex + $offset + !return $lastIndex +!endfunction + +!function LastIndex() + !return $lastIndex +!endfunction + +!function SetIndex($new_index, $offset=1) + !$lastIndex = $new_index + !$index = $new_index + $offset + !return $lastIndex +!endfunction + ' Relationship override ' ################################## @@ -40,12 +63,10 @@ $alias1 $direction $alias2 : **$e_index: $label**\n//[$te !endprocedure !unquoted procedure Rel($from, $to, $label) -Rel_($index, $from, $to, $label, "-->>") -increment() +Rel_(Index(), $from, $to, $label, "-->>") !endprocedure !unquoted procedure Rel($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "-->>") -increment() +Rel_(Index(), $from, $to, $label, $techn, "-->>") !endprocedure !unquoted procedure RelIndex($e_index, $from, $to, $label) Rel_($e_index, $from, $to, $label, "-->>") @@ -55,12 +76,10 @@ Rel_($e_index, $from, $to, $label, $tech, "-->>") !endprocedure !unquoted procedure Rel_Back($from, $to, $label) -Rel_($index, $from, $to, $label, "<<--") -increment() +Rel_(Index(), $from, $to, $label, "<<--") !endprocedure !unquoted procedure Rel_Back($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "<<--") -increment() +Rel_(Index(), $from, $to, $label, $techn, "<<--") !endprocedure !unquoted procedure RelIndex_Back($e_index, $from, $to, $label) Rel_($e_index, $from, $to, $label, "<<--") @@ -70,12 +89,10 @@ Rel_($e_index, $from, $to, $label, $techn, "<<--") !endprocedure !unquoted procedure Rel_Neighbor($from, $to, $label) -Rel_($index, $from, $to, $label, "->>") -increment() +Rel_(Index(), $from, $to, $label, "->>") !endprocedure !unquoted procedure Rel_Neighbor($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "->>") -increment() +Rel_(Index(), $from, $to, $label, $techn, "->>") !endprocedure !unquoted procedure RelIndex_Neighbor($e_index, $from, $to, $label) Rel_($e_index, $from, $to, $label, "->>") @@ -85,12 +102,10 @@ Rel_($e_index, $from, $to, $label, $techn, "->>") !endprocedure !unquoted procedure Rel_Back_Neighbor($from, $to, $label) -Rel_($index, $from, $to, $label, "<<-") -increment() +Rel_(Index(), $from, $to, $label, "<<-") !endprocedure !unquoted procedure Rel_Back_Neighbor($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "<<-") -increment() +Rel_(Index(), $from, $to, $label, $techn, "<<-") !endprocedure !unquoted procedure RelIndex_Back_Neighbor($e_index, $from, $to, $label) Rel_($e_index, $from, $to, $label, "<<-") @@ -100,20 +115,16 @@ Rel_($e_index, $from, $to, $label, $techn, "<<-") !endprocedure !unquoted procedure Rel_D($from, $to, $label) -Rel_($index, $from, $to, $label, "-DOWN->>") -increment() +Rel_(Index(), $from, $to, $label, "-DOWN->>") !endprocedure !unquoted procedure Rel_D($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "-DOWN->>") -increment() +Rel_(Index(), $from, $to, $label, $techn, "-DOWN->>") !endprocedure !unquoted procedure Rel_Down($from, $to, $label) -Rel_($index, $from, $to, $label, "-DOWN->>") -increment() +Rel_(Index(), $from, $to, $label, "-DOWN->>") !endprocedure !unquoted procedure Rel_Down($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "-DOWN->>") -increment() +Rel_(Index(), $from, $to, $label, $techn, "-DOWN->>") !endprocedure !unquoted procedure RelIndex_D($e_index, $from, $to, $label) Rel_($e_index, $from, $to, $label, "-DOWN->>") @@ -129,20 +140,16 @@ Rel_($e_index, $from, $to, $label, $techn, "-DOWN->>") !endprocedure !unquoted procedure Rel_U($from, $to, $label) -Rel_($index, $from, $to, $label, "-UP->>") -increment() +Rel_(Index(), $from, $to, $label, "-UP->>") !endprocedure !unquoted procedure Rel_U($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "-UP->>") -increment() +Rel_(Index(), $from, $to, $label, $techn, "-UP->>") !endprocedure !unquoted procedure Rel_Up($from, $to, $label) -Rel_($index, $from, $to, $label, "-UP->>") -increment() +Rel_(Index(), $from, $to, $label, "-UP->>") !endprocedure !unquoted procedure Rel_Up($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "-UP->>") -increment() +Rel_(Index(), $from, $to, $label, $techn, "-UP->>") !endprocedure !unquoted procedure RelIndex_U($e_index, $from, $to, $label) Rel_($e_index, $from, $to, $label, "-UP->>") @@ -158,20 +165,16 @@ Rel_($e_index, $from, $to, $label, $techn, "-UP->>") !endprocedure !unquoted procedure Rel_L($from, $to, $label) -Rel_($index, $from, $to, $label, "-LEFT->>") -increment() +Rel_(Index(), $from, $to, $label, "-LEFT->>") !endprocedure !unquoted procedure Rel_L($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "-LEFT->>") -increment() +Rel_(Index(), $from, $to, $label, $techn, "-LEFT->>") !endprocedure !unquoted procedure Rel_Left($from, $to, $label) -Rel_($index, $from, $to, $label, "-LEFT->>") -increment() +Rel_(Index(), $from, $to, $label, "-LEFT->>") !endprocedure !unquoted procedure Rel_Left($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "-LEFT->>") -increment() +Rel_(Index(), $from, $to, $label, $techn, "-LEFT->>") !endprocedure !unquoted procedure RelIndex_L($e_index, $from, $to, $label) Rel_($e_index, $from, $to, $label, "-LEFT->>") @@ -187,20 +190,16 @@ Rel_($e_index, $from, $to, $label, $techn, "-LEFT->>") !endprocedure !unquoted procedure Rel_R($from, $to, $label) -Rel_($index, $from, $to, $label, "-RIGHT->>") -increment() +Rel_(Index(), $from, $to, $label, "-RIGHT->>") !endprocedure !unquoted procedure Rel_R($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "-RIGHT->>") -increment() +Rel_(Index(), $from, $to, $label, $techn, "-RIGHT->>") !endprocedure !unquoted procedure Rel_Right($from, $to, $label) -Rel_($index, $from, $to, $label, "-RIGHT->>") -increment() +Rel_(Index(), $from, $to, $label, "-RIGHT->>") !endprocedure !unquoted procedure Rel_Right($from, $to, $label, $techn) -Rel_($index, $from, $to, $label, $techn, "-RIGHT->>") -increment() +Rel_(Index(), $from, $to, $label, $techn, "-RIGHT->>") !endprocedure !unquoted procedure RelIndex_R($e_index, $from, $to, $label) Rel_($e_index, $from, $to, $label, "-RIGHT->>") @@ -214,5 +213,3 @@ Rel_($e_index, $from, $to, $label, "-RIGHT->>") !unquoted procedure RelIndex_Right($e_index, $from, $to, $label, $techn) Rel_($e_index, $from, $to, $label, $techn, "-RIGHT->>") !endprocedure - - diff --git a/README.md b/README.md index 8cddaa4..f45f9c0 100644 --- a/README.md +++ b/README.md @@ -140,8 +140,14 @@ Diagram types * Import: `!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Dynamic.puml` * Additional Macros: * `RelIndex(index, from, to, label)` - * `increment()` - * `setIndex(number)` + * (lowercase) `increment($offset=1)`: increase current index (procedure which has no direct output) + * (lowercase) `setIndex($new_index)`: set the new index (procedure which has no direct output) + * `LastIndex()`: return the last used index (function which can be used as argument) + + following 2 macros requires V1.2020.24Beta4 (can be already tested with http://www.plantuml.com/plantuml/) + * `Index($offset=1)`: returns current index and calculates next index (function which can be used as argument) + * `SetIndex($new_index)`: returns new set index and calculates next index (function which can be used as argument) + * Deployment diagram * Import: `!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml` * Additional Macros: diff --git a/samples/C4_Dynamic Diagram Sample - message bus - old format.puml b/samples/C4_Dynamic Diagram Sample - message bus - old format.puml new file mode 100644 index 0000000..9d9b99f --- /dev/null +++ b/samples/C4_Dynamic Diagram Sample - message bus - old format.puml @@ -0,0 +1,35 @@ +@startuml +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Dynamic.puml + +LAYOUT_TOP_DOWN() +LAYOUT_WITH_LEGEND() + +Person(customer, Customer, "A customer") +System_Boundary(c1, "Customer Information") { + Container(app, "Customer Application", "Javascript, Angular", "Allows customers to manage their profile") + Container(customer_service, "Customer Service", "Java, Spring Boot", "The point of access for customer information") + Container(message_bus, "Message Bus", "RabbitMQ", "Transport for business events") + Container(reporting_service, "Reporting Service", "Ruby", "Creates normalised data for reporting purposes") + Container(audit_service, "Audit Service", "C#/.NET", "Provides organisation-wide auditing facilities") + ContainerDb(customer_db, "Customer Database", "Oracle 12c", "Stores customer information") + ContainerDb(reporting_db, "Reporting Database", "MySQL", "Stores a normalized version of all business data for ad hoc reporting purposes") + Container(audit_store, "Audit Store", "Event Store", "Stores information about events that have happened") +} + +Rel_D(customer, app, "Updates his profile using", "HTTPS") +Rel(app, customer_service, "Updates customer information using", "JSON/HTTPS") +Rel_R(customer_service, customer_db, "Stores data in", "JDBC") + +RelIndex_D($index-1, customer_service, message_bus, "Sends customer update events to", "async") +RelIndex_U($index-2, customer_service, app, "Confirm update to", "async") +increment() + +RelIndex_L($index-1, message_bus, reporting_service, "Sends customer update events to", "async") +increment() +RelIndex($index-1, reporting_service, reporting_db, "Stores data in") + +setIndex(5) +RelIndex_R($index-2, message_bus, audit_service, "Sends customer update events to", "async") +increment() +RelIndex($index-2, audit_service, audit_store, "Stores events in") +@enduml \ No newline at end of file diff --git a/samples/C4_Dynamic Diagram Sample - message bus.puml b/samples/C4_Dynamic Diagram Sample - message bus.puml index bf9bea6..c38341e 100644 --- a/samples/C4_Dynamic Diagram Sample - message bus.puml +++ b/samples/C4_Dynamic Diagram Sample - message bus.puml @@ -16,20 +16,16 @@ System_Boundary(c1, "Customer Information") { Container(audit_store, "Audit Store", "Event Store", "Stores information about events that have happened") } -Rel(customer, app, "Updates his profile using", "HTTPS") +Rel_D(customer, app, "Updates his profile using", "HTTPS") Rel(app, customer_service, "Updates customer information using", "JSON/HTTPS") -Rel(customer_service, customer_db, "Stores data in", "JDBC") +Rel_R(customer_service, customer_db, "Stores data in", "JDBC") -RelIndex($index-1, customer_service, message_bus, "Sends customer update events to", "async") -RelIndex($index-2, customer_service, app, "Confirm update to", "async") -increment() +RelIndex_D(Index()-1, customer_service, message_bus, "Sends customer update events to", "async") +RelIndex_U(LastIndex()-2, customer_service, app, "Confirm update to", "async") -RelIndex($index-1, message_bus, reporting_service, "Sends customer update events to", "async") -increment() -RelIndex($index-1, reporting_service, reporting_db, "Stores data in") +RelIndex_L(Index()-1, message_bus, reporting_service, "Sends customer update events to", "async") +RelIndex(Index()-1, reporting_service, reporting_db, "Stores data in") -setIndex(5) -RelIndex($index-2, message_bus, audit_service, "Sends customer update events to", "async") -increment() -RelIndex($index-2, audit_service, audit_store, "Stores events in") +RelIndex_R(SetIndex(5)-2, message_bus, audit_service, "Sends customer update events to", "async") +RelIndex(Index()-2, audit_service, audit_store, "Stores events in") @enduml \ No newline at end of file