Inline PlantUML diagrams (#1180)

This commit is contained in:
Karol Lewandowski 2023-12-18 10:40:41 +01:00 committed by GitHub
parent e0fd6bbd95
commit f06749c194
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 386 additions and 1314 deletions

View File

@ -1,49 +0,0 @@
## Working with PlantUML
If you are unfamiliar with PlantUML, review the [quick start](https://plantuml.com/starting) instructions.
### Editing
#### Online
Use [https://kroki.io/](https://kroki.io/).
#### IDE
* Install [Graphviz](https://plantuml.com/graphviz-dot) on your machine.
* Get and install the [PlantUML Integration plugin](https://plugins.jetbrains.com/plugin/7017-plantuml-integration) for IntelliJ IDEA:
* Set the `GRAPHVIZ_DOT` system or environment property to point to the directory containing the Graphviz executable on your machine.
For example, `export GRAPHVIZ_DOT="/usr/local/Cellar/graphviz/2.42.3/bin/dot"`
* In the PlantUML plugin Settings (**Settings \| Other Settings \| PlantUML**) set:
* The "Additional 'plantuml.include.path'" to be the absolute path to the directory containing the `jb-plantuml-theme.puml` file on your machine.
For example, `/<path to sdk root>/buildUML` or, if you have the IntelliJ-Community source code, `/<path to intellij-community root>/platform/docs/`.
* The "PlantUML config" to `!include jb-plantuml-theme.puml`
### Generating SVG
> Temporary workflow until embedding inside Markdown sources is available.
#### IDE
When a `*.puml` file is open in the IDE editor, the PlantUML Integration plugin will show a preview.
To save a diagram in SVG format, change the file extension from the default PNG to SVG when saving the diagram from the preview window.
#### Online
Use [https://kroki.io/](https://kroki.io/) to generate SVG files by pasting:
```
@startuml
[contents of jb-plantuml-theme.puml]
[contents of your_diagram.puml (without `@startuml`)]
@enduml
```
and then c/p generated SVG output.
### Post Process
In SVG file `<defs>`, insert `<style>@import url('https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono&amp;display=swap');</style>` tag.

View File

@ -1,53 +0,0 @@
@startuml
:getService;
note right
In any thread.
Get on demand only.
Do not cache result.
Do not request in constructor unless needed.
end note
if (Is Light Service) then (yes)
else (no)
if (Is Service Declaration Found) then (yes)
else (no)
:Return ""null"";
detach
endif
endif
if (Is Created and Initialized?) then (yes)
else (no)
if (Is Container Active?) then (active)
partition "synchronized on service class" {
if (Is Created and Initialized?) then (yes)
else (no)
if (Is Initializing?) then (yes)
:Throw ""PluginException""
Cyclic Service Initialization;
detach
else (no)
partition "non cancelable" {
:Create Instance]
note right
Avoid getting other services to reduce initialization tree.
As less dependencies, as more faster and reliable.
end note
:Register to be Disposed on Container Dispose
if Implements ""Disposable""]
:Load Persistent State
if Implements ""PersistentStateComponent""]
}
endif
endif
}
else (disposed or dispose in progress)
:Throw ""ProcessCanceledException"";
detach
endif
endif
:Return Instance;
@enduml

View File

@ -1,15 +0,0 @@
@startuml
hide empty members
hide circle
top to bottom direction
:Subscriber:
(Create connection) as (C)
note top of (C): Necessary for subscribing
Subscriber --> C
:Publisher:
(Publish)
Publisher --> Publish
@enduml

View File

@ -1,17 +0,0 @@
@startuml
hide empty members
hide circle
top to bottom direction
' Define the objects in the diagram
class MessageBus
class MessageBusConnection
class "Default Handler" as DH
class "(Topic-Handler)" as TH
' Define the class relationships
MessageBus "1" o-- "*" MessageBusConnection
MessageBusConnection o-- "0..1" DH
MessageBusConnection *-- "*" TH
@enduml

View File

@ -1,21 +0,0 @@
@startuml
hide empty members
hide circle
top to bottom direction
' Define the objects in the diagram
class "bus" as B
class "connection1" as C1
class "connection2" as C2
class "topic-handler1" as TH1
class "topic-handler2" as TH2
' Define the class relationships
B *-- C1
B *-- C2
C1 *-- TH1
C2 *-- TH2
@enduml

View File

@ -1,28 +0,0 @@
@startuml
hide empty members
hide circle
top to bottom direction
' Define the objects in the diagram
class "application bus" as AB
class "project bus" as PB
class "connection1" as C1
class "connection2" as C2
class "connection3" as C3
class "topic1-handler1" as T1H1
class "topic1-handler2" as T1H2
class "topic1-handler3" as T1H3
' Define the class relationships
AB o-- PB
AB *-- C1
PB *-- C2
PB *-- C3
C1 *-- T1H1
C2 *-- T1H2
C3 *-- T1H3
@enduml

View File

@ -1,10 +0,0 @@
@startuml
left to right direction
' Define the activity
(*) --> "Get message\nbus reference"
--> "Ask the bus\nfor a particular\ntopic's publisher"
--> "Call target\nmethod on\npublisher"
--> "Messaging\ncalls the\nsame method\non target\nhandlers"
--> (*)
@enduml

View File

@ -1,14 +0,0 @@
@startuml
hide empty members
hide circle
left to right direction
' Define the objects in the diagram
class "application bus" as AB
class "project bus" as PB
class "module bus" as MB
' Define the class relationships
AB o-- "*" PB
PB o-- "*" MB
@enduml

View File

@ -1,13 +0,0 @@
@startuml
left to right direction
' Define the activity
(*) --> if "" then
--> [don't have connection] "Get message\nbus reference"
--> "Create connection\nto the bus"
--> "Subscribe"
else
--> [have connection] "Subscribe"
endif
--> (*)
@enduml

View File

@ -1,20 +0,0 @@
@startuml
skinparam classAttributeIconSize 0
hide empty fields
hide empty methods
left to right direction
' Define the objects in the diagram
class "com.intellij.util.messages.Topic" as Topic {
+getDisplayName()
+getBroadcastDirection()
}
class ListenerClass {
+method1()
{method} ...
+methodN()
}
' Define the class relationships
Topic o--> "1 " ListenerClass
@enduml

View File

@ -1,25 +0,0 @@
@startuml
hide empty members
hide circle
class "parent DataNode" as parent
class DataNode
together {
class "child n DataNode" as child3
class "..." as child2
class "child 1 DataNode" as child1
class Key
class ExternalEntityData
}
' Define the class relationships
parent -- DataNode
ExternalEntityData --o DataNode
Key --o DataNode
DataNode -- child1
DataNode -- child2
DataNode -- child3
@enduml

View File

@ -1,17 +0,0 @@
@startuml
rectangle "DataNode<ProjectData>" as root
rectangle "DataNode<ModuleData>" as child1
rectangle "DataNode<LibraryData>\n(JUnit)" as child2
rectangle "DataNode<ContentRootData>" as child11
rectangle "DataNode<LibraryDependencyData>\n(JUnit)" as child12
' Define the class relationships
root -- child1
root -- child2
child1 -- child11
child1 -- child12
@enduml

View File

@ -1,35 +0,0 @@
@startuml
hide empty members
hide circle
package Configuration <<Rectangle>> {
interface RunProfile
interface RunConfiguration
interface RunProfileState
}
package Execution <<Rectangle>> {
abstract class Executor
interface ProgramRunner
class ExecutionEnvironment
class RunContentBuilder
abstract class ExecutionResult
interface ExecutionConsole
abstract class ProcessHandler
}
RunProfile <|.. RunConfiguration
RunProfile --> RunProfileState: creates
RunProfileState --> ExecutionResult: prepares
ExecutionResult o-- "1" ExecutionConsole
ExecutionResult o-- "1" ProcessHandler
ProgramRunner --> RunProfile: executes
ProgramRunner --> Executor
ProgramRunner --> ExecutionEnvironment
ProgramRunner -r-> RunContentBuilder
@enduml

View File

@ -1,18 +0,0 @@
@startuml
hide empty members
hide circle
interface RunProfile
interface ConfigurationType
abstract class ConfigurationFactory
interface RunConfiguration
abstract class SettingsEditor
ConfigurationType *-- "*" ConfigurationFactory
ConfigurationFactory --> RunConfiguration: creates
RunConfiguration o-- "0..*" SettingsEditor
RunConfiguration -l|> RunProfile
@enduml

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@ -1,106 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="219px" preserveAspectRatio="none" style="width:555px;height:219px;background:#FFFFFF;" version="1.1" viewBox="0 0 555 219" width="555px" zoomAndPan="magnify">
<style>@import url('https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono&amp;display=swap');</style>
<defs>
<filter height="300%" id="f1reakk33qyecd" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[20281f4ff4cf8314bac235a1b18d3554]
class child3--><g id="elem_child3"><rect codeLine="25" fill="#F1F1F1" filter="url(#f1reakk33qyecd)" height="26.7999" id="child3" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="430.5" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="107" x="433.5" y="199.9999">child n DataNode</text></g><!--MD5=[46fc6f69eac59e78e2f3a9ee2b61ddb4]
class child2--><g id="elem_child2"><rect codeLine="26" fill="#F1F1F1" filter="url(#f1reakk33qyecd)" height="26.7999" id="child2" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="18" x="377" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="380" y="199.9999">...</text></g><!--MD5=[0de898fe6e62f2649c11379ac1939bff]
class child1--><g id="elem_child1"><rect codeLine="27" fill="#F1F1F1" filter="url(#f1reakk33qyecd)" height="26.7999" id="child1" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="228.5" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="107" x="231.5" y="199.9999">child 1 DataNode</text></g><!--MD5=[2086e18d236f9616263f91fe5276f8cf]
class Key--><g id="elem_Key"><rect codeLine="28" fill="#F1F1F1" filter="url(#f1reakk33qyecd)" height="26.7999" id="Key" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="29" x="164.5" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="23" x="167.5" y="199.9999">Key</text></g><!--MD5=[9897386af1ed058ef323e991bacee085]
class ExternalEntityData--><g id="elem_ExternalEntityData"><rect codeLine="29" fill="#F1F1F1" filter="url(#f1reakk33qyecd)" height="26.7999" id="ExternalEntityData" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="122" x="7" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="116" x="10" y="199.9999">ExternalEntityData</text></g><!--MD5=[2c987cbfcba91e56c1bc3dde7ea5e5d7]
class parent--><g id="elem_parent"><rect codeLine="22" fill="#F1F1F1" filter="url(#f1reakk33qyecd)" height="26.7999" id="parent" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="112" x="229" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="106" x="232" y="25.9999">parent DataNode</text></g><!--MD5=[1be1ed30a99d2917b9277309d78aa8b6]
class DataNode--><g id="elem_DataNode"><rect codeLine="23" fill="#F1F1F1" filter="url(#f1reakk33qyecd)" height="26.7999" id="DataNode" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="68" x="251" y="94"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="62" x="254" y="112.9999">DataNode</text></g><!--MD5=[e9d289148971afe54d9804cdf9aa0349]
link parent to DataNode--><g id="link_parent_DataNode"><path codeLine="33" d="M285,34.04 C285,50.11 285,77.81 285,93.91 " fill="none" id="parent-DataNode" style="stroke:#181818;stroke-width:1.0;"/></g><!--MD5=[09c8c8e79535da871b4995663c58175a]
link ExternalEntityData to DataNode--><g id="link_ExternalEntityData_DataNode"><path codeLine="35" d="M93.7,180.87 C109.02,173.54 128.94,164.33 147,157 C177.03,144.82 211.41,132.73 238.35,123.67 " fill="none" id="ExternalEntityData-to-DataNode" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="none" points="250.92,119.47,243.9623,117.5751,239.5371,123.2687,246.4948,125.1636,250.92,119.47" style="stroke:#181818;stroke-width:1.0;"/></g><!--MD5=[06a573aea8f804b67df62ca7c6895970]
link Key to DataNode--><g id="link_Key_DataNode"><path codeLine="36" d="M188.62,180.9 C194.61,173.49 202.73,164.19 211,157 C223.25,146.35 237.99,136.23 251.08,128.02 " fill="none" id="Key-to-DataNode" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="none" points="262.52,121.05,255.3147,120.7599,252.2757,127.2994,259.481,127.5895,262.52,121.05" style="stroke:#181818;stroke-width:1.0;"/></g><!--MD5=[f563d54bf1c03184d3f0399078057fa3]
link DataNode to child1--><g id="link_DataNode_child1"><path codeLine="37" d="M285,121.04 C285,137.11 285,164.81 285,180.91 " fill="none" id="DataNode-child1" style="stroke:#181818;stroke-width:1.0;"/></g><!--MD5=[35b66e17162c177771cf80d95f61b1c0]
link DataNode to child2--><g id="link_DataNode_child2"><path codeLine="38" d="M308.53,121.02 C323.88,129.86 343.82,142.65 359,157 C366.45,164.04 373.29,173.34 378.23,180.79 " fill="none" id="DataNode-child2" style="stroke:#181818;stroke-width:1.0;"/></g><!--MD5=[7e5eb2378c1f2596212150ee70baa567]
link DataNode to child3--><g id="link_DataNode_child3"><path codeLine="39" d="M319.04,120.39 C345.04,129.71 381.62,143.35 413,157 C429.95,164.37 448.6,173.58 462.95,180.91 " fill="none" id="DataNode-child3" style="stroke:#181818;stroke-width:1.0;"/></g><!--MD5=[d7fcb4a48415f31e4950d39bdb50a6f7]
@startuml
' https://plantuml-documentation.readthedocs.io/en/latest/formatting/all-skin-params.html
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
' https://material.io/design/typography/the-type-system.html
' Body 2
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
' default 1.5
skinparam ActivityBorderThickness 1
' default 2
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
class "parent DataNode" as parent
class DataNode
together {
class "child n DataNode" as child3
class "..." as child2
class "child 1 DataNode" as child1
class Key
class ExternalEntityData
}
' Define the class relationships
parent - - DataNode
ExternalEntityData - -o DataNode
Key - -o DataNode
DataNode - - child1
DataNode - - child2
DataNode - - child3
@enduml
@startuml
hide empty members
hide circle
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
skinparam ActivityBorderThickness 1
skinparam PartitionBorderThickness 1.5
class "parent DataNode" as parent
class DataNode
together {
class "child n DataNode" as child3
class "..." as child2
class "child 1 DataNode" as child1
class Key
class ExternalEntityData
}
parent - - DataNode
ExternalEntityData - -o DataNode
Key - -o DataNode
DataNode - - child1
DataNode - - child2
DataNode - - child3
@enduml
PlantUML version 1.2022.5(Sat Apr 30 10:55:52 GMT 2022)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>

Before

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -1,94 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="283px" preserveAspectRatio="none" style="width:546px;height:283px;background:#FFFFFF;" version="1.1" viewBox="0 0 546 283" width="546px" zoomAndPan="magnify"><defs><filter height="300%" id="fsdhu5i4soq0i" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[eab4eb7d0ef44c19c3b4c8ba4c3c2b5b]
entity root--><g id="elem_root"><rect fill="#F1F1F1" filter="url(#fsdhu5i4soq0i)" height="36.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="170" x="259" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="150" x="269" y="30.9999">DataNode&lt;ProjectData&gt;</text></g><!--MD5=[f32a4b6a4d1d5c806d2577c2ad48a88e]
entity child1--><g id="elem_child1"><rect fill="#F1F1F1" filter="url(#fsdhu5i4soq0i)" height="36.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="173" x="153.5" y="112.5"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="153" x="163.5" y="136.4999">DataNode&lt;ModuleData&gt;</text></g><!--MD5=[02fd969630d4b64c191f6d0a7ed5a485]
entity child2--><g id="elem_child2"><rect fill="#F1F1F1" filter="url(#fsdhu5i4soq0i)" height="53.5999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="172" x="362" y="104"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="152" x="372" y="127.9999">DataNode&lt;LibraryData&gt;</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="42" x="427" y="144.7999">(JUnit)</text></g><!--MD5=[54c46b283c7ca20ea3c249028a9b3f95]
entity child11--><g id="elem_child11"><rect fill="#F1F1F1" filter="url(#fsdhu5i4soq0i)" height="36.7999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="204" x="7" y="226.5"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="184" x="17" y="250.4999">DataNode&lt;ContentRootData&gt;</text></g><!--MD5=[0dfbb752575ab26f937634ee3148eb9e]
entity child12--><g id="elem_child12"><rect fill="#F1F1F1" filter="url(#fsdhu5i4soq0i)" height="53.5999" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="249" x="246.5" y="218"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="229" x="256.5" y="241.9999">DataNode&lt;LibraryDependencyData&gt;</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="42" x="350" y="258.7999">(JUnit)</text></g><!--MD5=[5894e04d7cc0064eb788526fae14705a]
link root to child1--><g id="link_root_child1"><path d="M326.36,44.06 C307.23,63.09 276.89,93.29 257.73,112.36 " fill="none" id="root-child1" style="stroke:#181818;stroke-width:1.0;"/></g><!--MD5=[f9bbf2572ec6961009bd9430f880bc86]
link root to child2--><g id="link_root_child2"><path d="M361.64,44.06 C378.1,60.44 402.87,85.09 421.67,103.79 " fill="none" id="root-child2" style="stroke:#181818;stroke-width:1.0;"/></g><!--MD5=[258b65d2fddd9c03ec1a2ec6ad67758f]
link child1 to child11--><g id="link_child1_child11"><path d="M219.24,149.75 C194.71,170.72 154.15,205.4 129.66,226.34 " fill="none" id="child1-child11" style="stroke:#181818;stroke-width:1.0;"/></g><!--MD5=[de3a2a2fac82bc1e93dbf12e56c391fd]
link child1 to child12--><g id="link_child1_child12"><path d="M260.76,149.75 C282.11,168 315.62,196.65 340.09,217.58 " fill="none" id="child1-child12" style="stroke:#181818;stroke-width:1.0;"/></g><!--MD5=[20f64962a505128427966189411259b6]
@startuml
hide empty members
hide circle
' https://plantuml-documentation.readthedocs.io/en/latest/formatting/all-skin-params.html
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName Roboto,sans-serif
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
' https://material.io/design/typography/the-type-system.html
' Body 2
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
' default 1.5
skinparam ActivityBorderThickness 1
' default 2
skinparam PartitionBorderThickness 1.5
rectangle "DataNode<ProjectData>" as root
rectangle "DataNode<ModuleData>" as child1
rectangle "DataNode<LibraryData>\n(JUnit)" as child2
rectangle "DataNode<ContentRootData>" as child11
rectangle "DataNode<LibraryDependencyData>\n(JUnit)" as child12
' Define the class relationships
root - - child1
root - - child2
child1 - - child11
child1 - - child12
@enduml
@startuml
hide empty members
hide circle
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName Roboto,sans-serif
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
skinparam ActivityBorderThickness 1
skinparam PartitionBorderThickness 1.5
rectangle "DataNode<ProjectData>" as root
rectangle "DataNode<ModuleData>" as child1
rectangle "DataNode<LibraryData>\n(JUnit)" as child2
rectangle "DataNode<ContentRootData>" as child11
rectangle "DataNode<LibraryDependencyData>\n(JUnit)" as child12
root - - child1
root - - child2
child1 - - child11
child1 - - child12
@enduml
PlantUML version 1.2022.5(Sat Apr 30 10:55:52 GMT 2022)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -1,86 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="194px" preserveAspectRatio="none" style="width:411px;height:194px;background:#FFFFFF;" version="1.1" viewBox="0 0 411 194" width="411px" zoomAndPan="magnify">
<style>@import url('https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono&amp;display=swap');</style>
<defs><filter height="300%" id="fvc6xfsi3zb5w" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[dffc2048202062908f47a53e24d356df]
entity Subscriber--><ellipse cx="39.5" cy="14" fill="#F8F8F8" filter="url(#fvc6xfsi3zb5w)" rx="8" ry="8" style="stroke:#383838;stroke-width:1.5;"/><path d="M39.5,22 L39.5,49 M26.5,30 L52.5,30 M39.5,49 L26.5,64 M39.5,49 L52.5,64 " fill="none" filter="url(#fvc6xfsi3zb5w)" style="stroke:#383838;stroke-width:1.5;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="67" x="6" y="83.4999">Subscriber</text><ellipse cx="119.473" cy="164.3946" fill="#F8F8F8" filter="url(#fvc6xfsi3zb5w)" rx="77.473" ry="17.8946" style="stroke:#383838;stroke-width:1.5;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="111" x="63.973" y="167.9946">Create connection</text><path d="M108.5,32 L108.5,58.7999 A0,0 0 0 0 108.5,58.7999 L186.94,58.7999 L131.08,146.56 L194.94,58.7999 L290.5,58.7999 A0,0 0 0 0 290.5,58.7999 L290.5,42 L280.5,32 L108.5,32 A0,0 0 0 0 108.5,32 " fill="#EBEBEB" filter="url(#fvc6xfsi3zb5w)" style="stroke:#383838;stroke-width:1.0;"/><path d="M280.5,32 L280.5,42 L290.5,42 L280.5,32 " fill="#EBEBEB" style="stroke:#383838;stroke-width:1.0;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="161" x="114.5" y="50.9999">Necessary for subscribing</text><!--MD5=[b9060e1352b009711fbb9730f967b58f]
entity Publisher--><ellipse cx="355.5" cy="14" fill="#F8F8F8" filter="url(#fvc6xfsi3zb5w)" rx="8" ry="8" style="stroke:#383838;stroke-width:1.5;"/><path d="M355.5,22 L355.5,49 M342.5,30 L368.5,30 M355.5,49 L342.5,64 M355.5,49 L368.5,64 " fill="none" filter="url(#fvc6xfsi3zb5w)" style="stroke:#383838;stroke-width:1.5;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="326.5" y="83.4999">Publisher</text><ellipse cx="355.5122" cy="164.3793" fill="#F8F8F8" filter="url(#fvc6xfsi3zb5w)" rx="44.0122" ry="14.8793" style="stroke:#383838;stroke-width:1.5;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="46" x="332.5122" y="167.9793">Publish</text><!--MD5=[988ff2512affc8e23f4557d46ed84e0a]
link Subscriber to C--><path d="M67.03,86.76 C79.84,105.5 94.54,127 105.12,142.47 " fill="none" id="Subscriber-to-C" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="107.99,146.66,106.2259,136.9704,105.1738,142.5286,99.6156,141.4764,107.99,146.66" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[95e659a114b4b9803e478504399e5690]
link Publisher to Publish--><path d="M355.5,86.76 C355.5,106.24 355.5,128.72 355.5,144.29 " fill="none" id="Publisher-to-Publish" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="355.5,149.29,359.5,140.29,355.5,144.29,351.5,140.29,355.5,149.29" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[bff15157785802e153b11866fd708f05]
@startuml
' https://plantuml-documentation.readthedocs.io/en/latest/formatting/all-skin-params.html
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
' https://material.io/design/typography/the-type-system.html
' Body 2
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
' default 1.5
skinparam ActivityBorderThickness 1
' default 2
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
hide empty members
hide circle
top to bottom direction
:Subscriber:
(Create connection) as (C)
note top of (C): Necessary for subscribing
Subscriber - -> C
:Publisher:
(Publish)
Publisher - -> Publish
@enduml
@startuml
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
skinparam ActivityBorderThickness 1
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
hide empty members
hide circle
top to bottom direction
:Subscriber:
(Create connection) as (C)
note top of (C): Necessary for subscribing
Subscriber - -> C
:Publisher:
(Publish)
Publisher - -> Publish
@enduml
PlantUML version 1.2021.8(Sat Jun 26 08:20:59 GMT 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>

Before

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -1,83 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="221px" preserveAspectRatio="none" style="width:263px;height:221px;background:#FFFFFF;" version="1.1" viewBox="0 0 263 221" width="263px" zoomAndPan="magnify">
<style>@import url('https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono&amp;display=swap');</style>
<defs><filter height="300%" id="f1jygd9iog27t8" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[62ac8497b13c043b65381b6f7663a459]
class MessageBus--><rect codeLine="25" fill="#F8F8F8" filter="url(#f1jygd9iog27t8)" height="26.7999" id="MessageBus" style="stroke:#383838;stroke-width:1.5;" width="86" x="84.5" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="80" x="87.5" y="25.9999">MessageBus</text><!--MD5=[5ec082c23ec24c6da48a0a09ba33c2f9]
class MessageBusConnection--><rect codeLine="26" fill="#F8F8F8" filter="url(#f1jygd9iog27t8)" height="26.7999" id="MessageBusConnection" style="stroke:#383838;stroke-width:1.5;" width="155" x="50" y="94"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="149" x="53" y="112.9999">MessageBusConnection</text><!--MD5=[8877a16d0f905795619db580f65f8005]
class DH--><rect codeLine="27" fill="#F8F8F8" filter="url(#f1jygd9iog27t8)" height="26.7999" id="DH" style="stroke:#383838;stroke-width:1.5;" width="103" x="7" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="97" x="10" y="199.9999">Default Handler</text><!--MD5=[6248ca3ba3593139a1835033a2c878c3]
class TH--><rect codeLine="28" fill="#F8F8F8" filter="url(#f1jygd9iog27t8)" height="26.7999" id="TH" style="stroke:#383838;stroke-width:1.5;" width="104" x="145.5" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="98" x="148.5" y="199.9999">(Topic-Handler)</text><!--MD5=[2f9b0f036ad36751351f32062502d1bf]
reverse link MessageBus to MessageBusConnection--><path codeLine="31" d="M127.5,47.43 C127.5,62.85 127.5,81.71 127.5,93.91 " fill="none" id="MessageBus-backto-MessageBusConnection" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#FFFFFF" points="127.5,34.04,123.5,40.04,127.5,46.04,131.5,40.04,127.5,34.04" style="stroke:#383838;stroke-width:1.0;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="8" x="118.075" y="55.8917">1</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="5" x="121.4688" y="83.2103">*</text><!--MD5=[694b0ba889badc6ddf35d27abf73e2bf]
reverse link MessageBusConnection to DH--><path codeLine="32" d="M109.11,131.16 C96.17,147.09 79.34,167.83 68.72,180.91 " fill="none" id="MessageBusConnection-backto-DH" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#FFFFFF" points="117.32,121.04,110.4346,123.1828,109.7643,130.3626,116.6497,128.2199,117.32,121.04" style="stroke:#383838;stroke-width:1.0;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="24" x="43.9857" y="170.2103">0..1</text><!--MD5=[a5132fa3e16fbe2ae7d5791cc22442e3]
reverse link MessageBusConnection to TH--><path codeLine="33" d="M146.16,131.16 C159.28,147.09 176.36,167.83 187.13,180.91 " fill="none" id="MessageBusConnection-backto-TH" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="137.83,121.04,138.5569,128.2144,145.4589,130.3028,144.7321,123.1284,137.83,121.04" style="stroke:#383838;stroke-width:1.0;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="5" x="176.8211" y="170.2103">*</text><!--MD5=[8c6aa1d211e20a9e0d6f9a28df7f0b4e]
@startuml
' https://plantuml-documentation.readthedocs.io/en/latest/formatting/all-skin-params.html
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
' https://material.io/design/typography/the-type-system.html
' Body 2
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
' default 1.5
skinparam ActivityBorderThickness 1
' default 2
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
' Define the objects in the diagram
class MessageBus
class MessageBusConnection
class "Default Handler" as DH
class "(Topic-Handler)" as TH
' Define the class relationships
MessageBus "1" o- - "*" MessageBusConnection
MessageBusConnection o- - "0..1" DH
MessageBusConnection *- - "*" TH
@enduml
@startuml
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
skinparam ActivityBorderThickness 1
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
class MessageBus
class MessageBusConnection
class "Default Handler" as DH
class "(Topic-Handler)" as TH
MessageBus "1" o- - "*" MessageBusConnection
MessageBusConnection o- - "0..1" DH
MessageBusConnection *- - "*" TH
@enduml
PlantUML version 1.2021.8(Sat Jun 26 08:20:59 GMT 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="221px" preserveAspectRatio="none" style="width:246px;height:221px;background:#FFFFFF;" version="1.1" viewBox="0 0 246 221" width="246px" zoomAndPan="magnify">
<style>@import url('https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono&amp;display=swap');</style>
<defs><filter height="300%" id="f1owehh97nz08l" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[69c451c751c414e37549b782190fef46]
class B--><rect codeLine="24" fill="#F8F8F8" filter="url(#f1owehh97nz08l)" height="26.7999" id="B" style="stroke:#383838;stroke-width:1.5;" width="29" x="105" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="23" x="108" y="25.9999">bus</text><!--MD5=[926f502e143d9ea62a9e3ce25d7b4f6f]
class C1--><rect codeLine="26" fill="#F8F8F8" filter="url(#f1owehh97nz08l)" height="26.7999" id="C1" style="stroke:#383838;stroke-width:1.5;" width="80" x="18.5" y="94"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="21.5" y="112.9999">connection1</text><!--MD5=[7a6ae922897b32380e18008d17b1b0ef]
class C2--><rect codeLine="27" fill="#F8F8F8" filter="url(#f1owehh97nz08l)" height="26.7999" id="C2" style="stroke:#383838;stroke-width:1.5;" width="80" x="140.5" y="94"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="143.5" y="112.9999">connection2</text><!--MD5=[ff7477c05a4730a20b075d2da276f30b]
class TH1--><rect codeLine="29" fill="#F8F8F8" filter="url(#f1owehh97nz08l)" height="26.7999" id="TH1" style="stroke:#383838;stroke-width:1.5;" width="95" x="7" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="89" x="10" y="199.9999">topic-handler1</text><!--MD5=[4c45aca55c8e2764fd8117a16b309977]
class TH2--><rect codeLine="30" fill="#F8F8F8" filter="url(#f1owehh97nz08l)" height="26.7999" id="TH2" style="stroke:#383838;stroke-width:1.5;" width="95" x="137" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="89" x="140" y="199.9999">topic-handler2</text><!--MD5=[5abb68ef7a7f90cc1b51845dea6e069f]
reverse link B to C1--><path codeLine="33" d="M102.91,44.62 C91.52,60.49 76.83,80.95 67.54,93.91 " fill="none" id="B-backto-C1" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="110.5,34.04,103.7521,36.5828,103.504,43.7896,110.2519,41.2468,110.5,34.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[0ee95caecf4a1a8ef3cc171bfc43413c]
reverse link B to C2--><path codeLine="34" d="M136.09,44.62 C147.48,60.49 162.17,80.95 171.46,93.91 " fill="none" id="B-backto-C2" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="128.5,34.04,128.7481,41.2468,135.496,43.7896,135.2479,36.5828,128.5,34.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[5d46ac34b92e80d9aff51a38fec452c6]
reverse link C1 to TH1--><path codeLine="36" d="M57.28,134.43 C56.55,149.85 55.67,168.71 55.09,180.91 " fill="none" id="C1-backto-TH1" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="57.91,121.04,53.631,126.8443,57.343,133.0266,61.622,127.2223,57.91,121.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[451bd3fd46f9c7411704c3f16b961f36]
reverse link C2 to TH2--><path codeLine="37" d="M181.72,134.43 C182.45,149.85 183.33,168.71 183.91,180.91 " fill="none" id="C2-backto-TH2" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="181.09,121.04,177.378,127.2223,181.657,133.0266,185.369,126.8443,181.09,121.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[b954dd52c85767d8abc4f374c9e5634b]
@startuml
' https://plantuml-documentation.readthedocs.io/en/latest/formatting/all-skin-params.html
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
' https://material.io/design/typography/the-type-system.html
' Body 2
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
' default 1.5
skinparam ActivityBorderThickness 1
' default 2
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
' Define the objects in the diagram
class "bus" as B
class "connection1" as C1
class "connection2" as C2
class "topic-handler1" as TH1
class "topic-handler2" as TH2
' Define the class relationships
B *- - C1
B *- - C2
C1 *- - TH1
C2 *- - TH2
@enduml
@startuml
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
skinparam ActivityBorderThickness 1
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
class "bus" as B
class "connection1" as C1
class "connection2" as C2
class "topic-handler1" as TH1
class "topic-handler2" as TH2
B *- - C1
B *- - C2
C1 *- - TH1
C2 *- - TH2
@enduml
PlantUML version 1.2021.8(Sat Jun 26 08:20:59 GMT 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>

Before

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -1,111 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="308px" preserveAspectRatio="none" style="width:383px;height:308px;background:#FFFFFF;" version="1.1" viewBox="0 0 383 308" width="383px" zoomAndPan="magnify">
<style>@import url('https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono&amp;display=swap');</style>
<defs><filter height="300%" id="fgin6xmzl3pa7" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[cd07344a80c53f6735430047176be71f]
class AB--><rect codeLine="23" fill="#F8F8F8" filter="url(#fgin6xmzl3pa7)" height="26.7999" id="AB" style="stroke:#383838;stroke-width:1.5;" width="100" x="196.5" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="94" x="199.5" y="25.9999">application bus</text><!--MD5=[562978db86ac36b29d57db113b203393]
class PB--><rect codeLine="24" fill="#F8F8F8" filter="url(#fgin6xmzl3pa7)" height="26.7999" id="PB" style="stroke:#383838;stroke-width:1.5;" width="74" x="153.5" y="94"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="68" x="156.5" y="112.9999">project bus</text><!--MD5=[926f502e143d9ea62a9e3ce25d7b4f6f]
class C1--><rect codeLine="25" fill="#F8F8F8" filter="url(#fgin6xmzl3pa7)" height="26.7999" id="C1" style="stroke:#383838;stroke-width:1.5;" width="80" x="269.5" y="94"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="272.5" y="112.9999">connection1</text><!--MD5=[7a6ae922897b32380e18008d17b1b0ef]
class C2--><rect codeLine="27" fill="#F8F8F8" filter="url(#fgin6xmzl3pa7)" height="26.7999" id="C2" style="stroke:#383838;stroke-width:1.5;" width="80" x="29.5" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="32.5" y="199.9999">connection2</text><!--MD5=[bea21b96b087d2a6cd694f21a9e60e60]
class C3--><rect codeLine="28" fill="#F8F8F8" filter="url(#fgin6xmzl3pa7)" height="26.7999" id="C3" style="stroke:#383838;stroke-width:1.5;" width="80" x="150.5" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="153.5" y="199.9999">connection3</text><!--MD5=[3119829b56730b205615da85fbee2fd5]
class T1H1--><rect codeLine="29" fill="#F8F8F8" filter="url(#fgin6xmzl3pa7)" height="26.7999" id="T1H1" style="stroke:#383838;stroke-width:1.5;" width="103" x="266" y="181"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="97" x="269" y="199.9999">topic1-handler1</text><!--MD5=[cbe9cf75be102b01d481a458d073720d]
class T1H2--><rect codeLine="31" fill="#F8F8F8" filter="url(#fgin6xmzl3pa7)" height="26.7999" id="T1H2" style="stroke:#383838;stroke-width:1.5;" width="103" x="7" y="268"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="97" x="10" y="286.9999">topic1-handler2</text><!--MD5=[6d68aa1aef529b2011d6536b7dc28f2e]
class T1H3--><rect codeLine="32" fill="#F8F8F8" filter="url(#fgin6xmzl3pa7)" height="26.7999" id="T1H3" style="stroke:#383838;stroke-width:1.5;" width="103" x="145" y="268"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="97" x="148" y="286.9999">topic1-handler3</text><!--MD5=[b34b903977778f6e15b67d5d61f7d5e9]
reverse link AB to PB--><path codeLine="35" d="M230.97,45.08 C220.55,60.89 207.25,81.08 198.8,93.91 " fill="none" id="AB-backto-PB" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#FFFFFF" points="238.24,34.04,231.5964,36.8439,231.6293,44.0549,238.273,41.251,238.24,34.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[adeab773214358b4ec5fc8a9ab419ebc]
reverse link AB to C1--><path codeLine="36" d="M263.63,44.62 C275.4,60.49 290.57,80.95 300.17,93.91 " fill="none" id="AB-backto-C1" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="255.8,34.04,256.1604,41.2421,262.9471,43.6794,262.5867,36.4773,255.8,34.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[02ae765cdd6f37931dacef091dd941fa]
reverse link PB to C2--><path codeLine="38" d="M161.79,128.67 C138.72,144.88 107.03,167.14 87.43,180.91 " fill="none" id="PB-backto-C2" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="172.65,121.04,165.441,121.2136,162.8285,127.9348,170.0375,127.7612,172.65,121.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[ef9f97f6182d99c2a922b717bc2d5146]
reverse link PB to C3--><path codeLine="39" d="M190.5,134.43 C190.5,149.85 190.5,168.71 190.5,180.91 " fill="none" id="PB-backto-C3" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="190.5,121.04,186.5,127.04,190.5,133.04,194.5,127.04,190.5,121.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[450b28281f7b85415e09b5c7f2cd02c5]
reverse link C1 to T1H1--><path codeLine="40" d="M311.94,134.43 C313.39,149.85 315.17,168.71 316.31,180.91 " fill="none" id="C1-backto-T1H1" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="310.68,121.04,307.2579,127.3874,311.8009,132.9875,315.223,126.6401,310.68,121.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[ee8db070aa383ed8f24504308525533d]
reverse link C2 to T1H2--><path codeLine="42" d="M66.21,220.96 C64.2,236.46 61.72,255.58 60.13,267.91 " fill="none" id="C2-backto-T1H2" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="67.88,208.04,63.1414,213.4756,66.3364,219.9403,71.075,214.5047,67.88,208.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[7e297d0e187f42122b737afea7d4ddd4]
reverse link C3 to T1H3--><path codeLine="43" d="M192.33,221.43 C193.42,236.85 194.75,255.71 195.61,267.91 " fill="none" id="C3-backto-T1H3" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="191.39,208.04,187.8218,214.3064,192.2337,220.0103,195.802,213.7439,191.39,208.04" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[54c3bf38fabac96ea2be09b800d90c74]
@startuml
' https://plantuml-documentation.readthedocs.io/en/latest/formatting/all-skin-params.html
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
' https://material.io/design/typography/the-type-system.html
' Body 2
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
' default 1.5
skinparam ActivityBorderThickness 1
' default 2
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
' Define the objects in the diagram
class "application bus" as AB
class "project bus" as PB
class "connection1" as C1
class "connection2" as C2
class "connection3" as C3
class "topic1-handler1" as T1H1
class "topic1-handler2" as T1H2
class "topic1-handler3" as T1H3
' Define the class relationships
AB o- - PB
AB *- - C1
PB *- - C2
PB *- - C3
C1 *- - T1H1
C2 *- - T1H2
C3 *- - T1H3
@enduml
@startuml
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
skinparam ActivityBorderThickness 1
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
class "application bus" as AB
class "project bus" as PB
class "connection1" as C1
class "connection2" as C2
class "connection3" as C3
class "topic1-handler1" as T1H1
class "topic1-handler2" as T1H2
class "topic1-handler3" as T1H3
AB o- - PB
AB *- - C1
PB *- - C2
PB *- - C3
C1 *- - T1H1
C2 *- - T1H2
C3 *- - T1H3
@enduml
PlantUML version 1.2021.8(Sat Jun 26 08:20:59 GMT 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>

Before

Width:  |  Height:  |  Size: 8.1 KiB

View File

@ -1,74 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="124px" preserveAspectRatio="none" style="width:668px;height:124px;background:#FFFFFF;" version="1.1" viewBox="0 0 668 124" width="668px" zoomAndPan="magnify">
<style>@import url('https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono&amp;display=swap');</style>
<defs><filter height="300%" id="fv5804orxf2oj" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><ellipse cx="16" cy="59" fill="#000000" filter="url(#fv5804orxf2oj)" rx="10" ry="10" style="stroke:none;stroke-width:1.0;"/><rect fill="#F8F8F8" filter="url(#fv5804orxf2oj)" height="53.5999" rx="12.5" ry="12.5" style="stroke:#383838;stroke-width:1.5;" width="104" x="66" y="32"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="81" x="77.5" y="55.9999">Get message</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="84" x="76" y="72.7999">bus reference</text><rect fill="#F8F8F8" filter="url(#fv5804orxf2oj)" height="70.3998" rx="12.5" ry="12.5" style="stroke:#383838;stroke-width:1.5;" width="120" x="210" y="24"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="73" x="233.5" y="47.9999">Ask the bus</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="91" x="224.5" y="64.7999">for a particular</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="100" x="220" y="81.5998">topic's publisher</text><rect fill="#F8F8F8" filter="url(#fv5804orxf2oj)" height="70.3998" rx="12.5" ry="12.5" style="stroke:#383838;stroke-width:1.5;" width="84" x="370" y="24"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="64" x="380" y="47.9999">Call target</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="64" x="380" y="64.7999">method on</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="57" x="383.5" y="81.5998">publisher</text><rect fill="#F8F8F8" filter="url(#fv5804orxf2oj)" height="103.9996" rx="12.5" ry="12.5" style="stroke:#383838;stroke-width:1.5;" width="102" x="494" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="68" x="511" y="30.9999">Messaging</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="51" x="519.5" y="47.7999">calls the</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="82" x="504" y="64.5998">same method</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="55" x="517.5" y="81.3997">on target</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="54" x="518" y="98.1996">handlers</text><ellipse cx="646" cy="59" filter="url(#fv5804orxf2oj)" rx="10" ry="10" style="stroke:#000000;stroke-width:1.0;fill:none;"/><ellipse cx="646.5" cy="59.5" fill="#000000" rx="6" ry="6" style="stroke:none;stroke-width:1.0;"/><!--MD5=[db7bc576abd41ebbc81687471622818c]
link start to Get message\nbus reference--><path d="M26.23,59 C34.42,59 47.14,59 60.49,59 " fill="none" id="start-to-Get message\nbus reference" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="65.83,59,56.83,55,60.83,59,56.83,63,65.83,59" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[97ec6985a6323c4c4cd3376c8b0065a9]
link Get message\nbus reference to Ask the bus\nfor a particular\ntopic's publisher--><path d="M170.2,59 C181.24,59 193.05,59 204.52,59 " fill="none" id="Get message\nbus reference-to-Ask the bus\nfor a particular\ntopic's publisher" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="209.76,59,200.76,55,204.76,59,200.76,63,209.76,59" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[3cc530e465bc010462a36a11e15e380c]
link Ask the bus\nfor a particular\ntopic's publisher to Call target\nmethod on\npublisher--><path d="M330.37,59 C341.77,59 353.56,59 364.48,59 " fill="none" id="Ask the bus\nfor a particular\ntopic's publisher-to-Call target\nmethod on\npublisher" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="369.77,59,360.77,55,364.77,59,360.77,63,369.77,59" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[540c37973707ace5e2cda49c4a5db4fe]
link Call target\nmethod on\npublisher to Messaging\ncalls the\nsame method\non target\nhandlers--><path d="M454.09,59 C465.02,59 477.01,59 488.57,59 " fill="none" id="Call target\nmethod on\npublisher-to-Messaging\ncalls the\nsame method\non target\nhandlers" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="493.85,59,484.85,55,488.85,59,484.85,63,493.85,59" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[ddd16144f23f8b64b933762bd4135676]
link Messaging\ncalls the\nsame method\non target\nhandlers to end--><path d="M596.08,59 C608.91,59 621.69,59 630.96,59 " fill="none" id="Messaging\ncalls the\nsame method\non target\nhandlers-to-end" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="636,59,627,55,631,59,627,63,636,59" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[30f754e3ac5d4e68f6a901057e513029]
@startuml
' https://plantuml-documentation.readthedocs.io/en/latest/formatting/all-skin-params.html
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
' https://material.io/design/typography/the-type-system.html
' Body 2
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
' default 1.5
skinparam ActivityBorderThickness 1
' default 2
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
left to right direction
' Define the activity
(*) - -> "Get message\nbus reference"
- -> "Ask the bus\nfor a particular\ntopic's publisher"
- -> "Call target\nmethod on\npublisher"
- -> "Messaging\ncalls the\nsame method\non target\nhandlers"
- -> (*)
@enduml
@startuml
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
skinparam ActivityBorderThickness 1
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
left to right direction
(*) - -> "Get message\nbus reference"
- -> "Ask the bus\nfor a particular\ntopic's publisher"
- -> "Call target\nmethod on\npublisher"
- -> "Messaging\ncalls the\nsame method\non target\nhandlers"
- -> (*)
@enduml
PlantUML version 1.2021.8(Sat Jun 26 08:20:59 GMT 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>

Before

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -1,81 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="47px" preserveAspectRatio="none" style="width:392px;height:47px;background:#FFFFFF;" version="1.1" viewBox="0 0 392 47" width="392px" zoomAndPan="magnify">
<style>@import url('https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono&amp;display=swap');</style>
<defs><filter height="300%" id="f1v8g63l95wzsl" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[cd07344a80c53f6735430047176be71f]
class AB--><rect codeLine="27" fill="#F8F8F8" filter="url(#f1v8g63l95wzsl)" height="26.7999" id="AB" style="stroke:#383838;stroke-width:1.5;" width="100" x="7" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="94" x="10" y="25.9999">application bus</text><!--MD5=[562978db86ac36b29d57db113b203393]
class PB--><rect codeLine="28" fill="#F8F8F8" filter="url(#f1v8g63l95wzsl)" height="26.7999" id="PB" style="stroke:#383838;stroke-width:1.5;" width="74" x="167" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="68" x="170" y="25.9999">project bus</text><!--MD5=[2916ee572578080aeed684cfcd51fe32]
class MB--><rect codeLine="29" fill="#F8F8F8" filter="url(#f1v8g63l95wzsl)" height="26.7999" id="MB" style="stroke:#383838;stroke-width:1.5;" width="77" x="301" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="71" x="304" y="25.9999">module bus</text><!--MD5=[b34b903977778f6e15b67d5d61f7d5e9]
reverse link AB to PB--><path codeLine="32" d="M120.22,20.5 C136.12,20.5 152.69,20.5 166.8,20.5 " fill="none" id="AB-backto-PB" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#FFFFFF" points="107.09,20.5,113.09,24.5,119.09,20.5,113.09,16.5,107.09,20.5" style="stroke:#383838;stroke-width:1.0;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="5" x="153.9841" y="36.1734">*</text><!--MD5=[d4275642ac8e9423a6422f9e799928f6]
reverse link PB to MB--><path codeLine="33" d="M254.25,20.5 C269.68,20.5 286.46,20.5 300.95,20.5 " fill="none" id="PB-backto-MB" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#FFFFFF" points="241.13,20.5,247.13,24.5,253.13,20.5,247.13,16.5,241.13,20.5" style="stroke:#383838;stroke-width:1.0;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="5" x="288.1248" y="36.1203">*</text><!--MD5=[88c50094b8ffd821e61a879bc1904da6]
@startuml
' https://plantuml-documentation.readthedocs.io/en/latest/formatting/all-skin-params.html
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
' https://material.io/design/typography/the-type-system.html
' Body 2
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
' default 1.5
skinparam ActivityBorderThickness 1
' default 2
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
left to right direction
hide empty members
hide circle
left to right direction
' Define the objects in the diagram
class "application bus" as AB
class "project bus" as PB
class "module bus" as MB
' Define the class relationships
AB o- - "*" PB
PB o- - "*" MB
@enduml
@startuml
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
skinparam ActivityBorderThickness 1
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
left to right direction
hide empty members
hide circle
left to right direction
class "application bus" as AB
class "project bus" as PB
class "module bus" as MB
AB o- - "*" PB
PB o- - "*" MB
@enduml
PlantUML version 1.2021.8(Sat Jun 26 08:20:59 GMT 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="111px" preserveAspectRatio="none" style="width:840px;height:111px;background:#FFFFFF;" version="1.1" viewBox="0 0 840 111" width="840px" zoomAndPan="magnify">
<style>@import url('https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono&amp;display=swap');</style>
<defs><filter height="300%" id="ff3ip6sac87lf" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><ellipse cx="16" cy="74" fill="#000000" filter="url(#ff3ip6sac87lf)" rx="10" ry="10" style="stroke:none;stroke-width:1.0;"/><polygon fill="#F8F8F8" filter="url(#ff3ip6sac87lf)" points="79,62,91,74,79,86,67,74,79,62" style="stroke:#383838;stroke-width:1.5;"/><rect fill="#F8F8F8" filter="url(#ff3ip6sac87lf)" height="53.5999" rx="12.5" ry="12.5" style="stroke:#383838;stroke-width:1.5;" width="104" x="267" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="81" x="278.5" y="30.9999">Get message</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="84" x="277" y="47.7999">bus reference</text><rect fill="#F8F8F8" filter="url(#ff3ip6sac87lf)" height="53.5999" rx="12.5" ry="12.5" style="stroke:#383838;stroke-width:1.5;" width="131" x="513" y="7"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="111" x="523" y="30.9999">Create connection</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="61" x="548" y="47.7999">to the bus</text><rect fill="#F8F8F8" filter="url(#ff3ip6sac87lf)" height="36.7999" rx="12.5" ry="12.5" style="stroke:#383838;stroke-width:1.5;" width="82" x="685" y="60.5"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="62" x="695" y="84.4999">Subscribe</text><ellipse cx="818" cy="79" filter="url(#ff3ip6sac87lf)" rx="10" ry="10" style="stroke:#000000;stroke-width:1.0;fill:none;"/><ellipse cx="818.5" cy="79.5" fill="#000000" rx="6" ry="6" style="stroke:none;stroke-width:1.0;"/><!--MD5=[774095af6fbdd33345d22082506b5bc4]
link start to #4668727--><path d="M26,74 C35.34,74 50.16,74 61.59,74 " fill="none" id="start-to-#4668727" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="66.89,74,57.89,70,61.89,74,57.89,78,66.89,74" style="stroke:#383838;stroke-width:1.0;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="0" x="58.9531" y="92.7249"/><!--MD5=[6febe3142e34ae6022ed7c8826578db7]
link #4668727 to Get message\nbus reference--><path d="M89.62,72.38 C118.16,67.59 203.9,53.18 261.82,43.44 " fill="none" id="#4668727-to-Get message\nbus reference" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="266.98,42.57,257.4414,40.1175,262.0492,43.3989,258.7677,48.0067,266.98,42.57" style="stroke:#383838;stroke-width:1.0;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="134" x="112" y="43.9999">don't have connection</text><!--MD5=[e6e995dc7ca7c46e7a5add9ba0a5c4d7]
link Get message\nbus reference to Create connection\nto the bus--><path d="M371.18,34 C410.22,34 464.43,34 507.49,34 " fill="none" id="Get message\nbus reference-to-Create connection\nto the bus" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="512.68,34,503.68,30,507.68,34,503.68,38,512.68,34" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[10d386b9872602d0e8aed9cde3a7a12f]
link Create connection\nto the bus to Subscribe--><path d="M644.17,54 C656.25,57.74 668.64,61.57 679.97,65.07 " fill="none" id="Create connection\nto the bus-to-Subscribe" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="684.76,66.56,677.3384,60.0854,679.982,65.0866,674.9809,67.7302,684.76,66.56" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[df82b97ffb641729455ae14782a9b7a0]
link #4668727 to Subscribe--><path d="M90.92,74.08 C160.8,74.63 546.37,77.62 679.66,78.65 " fill="none" id="#4668727-to-Subscribe" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="684.67,78.69,675.693,74.6386,679.6701,78.6614,675.6473,82.6385,684.67,78.69" style="stroke:#383838;stroke-width:1.0;"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="100" x="392" y="73.9999">have connection</text><!--MD5=[66353aef4f4573c09dd245c4b2d80a44]
link Subscribe to end--><path d="M767.26,79 C779.94,79 793.12,79 802.73,79 " fill="none" id="Subscribe-to-end" style="stroke:#383838;stroke-width:1.0;"/><polygon fill="#383838" points="807.94,79,798.94,75,802.94,79,798.94,83,807.94,79" style="stroke:#383838;stroke-width:1.0;"/><!--MD5=[536109b5b096364f5af59862421bf627]
@startuml
' https://plantuml-documentation.readthedocs.io/en/latest/formatting/all-skin-params.html
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
' https://material.io/design/typography/the-type-system.html
' Body 2
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
' default 1.5
skinparam ActivityBorderThickness 1
' default 2
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
left to right direction
' Define the activity
(*) - -> if "" then
- -> [don't have connection] "Get message\nbus reference"
- -> "Create connection\nto the bus"
- -> "Subscribe"
else
- -> [have connection] "Subscribe"
endif
- -> (*)
@enduml
@startuml
skinparam monochrome true
skinparam shadowing true
skinparam DefaultFontName "Roboto,sans-serif"
skinparam DefaultMonospacedFontName "Roboto Mono,monospace"
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
skinparam ActivityBorderThickness 1
skinparam PartitionBorderThickness 1.5
hide empty members
hide circle
top to bottom direction
left to right direction
(*) - -> if "" then
- -> [don't have connection] "Get message\nbus reference"
- -> "Create connection\nto the bus"
- -> "Subscribe"
else
- -> [have connection] "Subscribe"
endif
- -> (*)
@enduml
PlantUML version 1.2021.8(Sat Jun 26 08:20:59 GMT 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>

Before

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -1 +0,0 @@
<?xml version="1.0" encoding="us-ascii" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="106px" preserveAspectRatio="none" style="width:417px;height:106px;background:#FFFFFF;" version="1.1" viewBox="0 0 417 106" width="417px" zoomAndPan="magnify"><defs><filter height="300%" id="fr2jx0uql5s9w" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--class Topic--><g id="elem_Topic"><rect codeLine="7" fill="#F1F1F1" filter="url(#fr2jx0uql5s9w)" height="70.8125" id="Topic" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="224" x="7" y="15"/><ellipse cx="21" cy="30" fill="#C2C2C2" rx="10" ry="10" style="stroke:#181818;stroke-width:1.0;"/><path d="M23.3896,34.7061 Q22.9111,34.9521 22.3848,35.0752 Q21.8584,35.1982 21.2773,35.1982 Q19.2129,35.1982 18.126,33.8379 Q17.0391,32.4775 17.0391,29.9072 Q17.0391,27.3301 18.126,25.9697 Q19.2129,24.6094 21.2773,24.6094 Q21.8584,24.6094 22.3916,24.7324 Q22.9248,24.8555 23.3896,25.1016 L23.3896,27.3438 Q22.8701,26.8652 22.3813,26.6431 Q21.8926,26.4209 21.373,26.4209 Q20.2656,26.4209 19.7017,27.2993 Q19.1377,28.1777 19.1377,29.9072 Q19.1377,31.6299 19.7017,32.5083 Q20.2656,33.3867 21.373,33.3867 Q21.8926,33.3867 22.3813,33.1646 Q22.8701,32.9424 23.3896,32.4639 Z " fill="#000000"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="194" x="34" y="34.7852">com.intellij.util.messages.Topic</text><line style="stroke:#181818;stroke-width:0.5;" x1="8" x2="230" y1="45" y2="45"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="120" x="13" y="61.9883">+getDisplayName()</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="158" x="13" y="78.3945">+getBroadcastDirection()</text></g><!--class ListenerClass--><g id="elem_ListenerClass"><rect codeLine="11" fill="#F1F1F1" filter="url(#fr2jx0uql5s9w)" height="87.2188" id="ListenerClass" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="114" x="291" y="7"/><ellipse cx="305" cy="22" fill="#C2C2C2" rx="10" ry="10" style="stroke:#181818;stroke-width:1.0;"/><path d="M307.3896,26.7061 Q306.9111,26.9521 306.3848,27.0752 Q305.8584,27.1982 305.2773,27.1982 Q303.2129,27.1982 302.126,25.8379 Q301.0391,24.4775 301.0391,21.9072 Q301.0391,19.3301 302.126,17.9697 Q303.2129,16.6094 305.2773,16.6094 Q305.8584,16.6094 306.3916,16.7324 Q306.9248,16.8555 307.3896,17.1016 L307.3896,19.3438 Q306.8701,18.8652 306.3813,18.6431 Q305.8926,18.4209 305.373,18.4209 Q304.2656,18.4209 303.7017,19.2993 Q303.1377,20.1777 303.1377,21.9072 Q303.1377,23.6299 303.7017,24.5083 Q304.2656,25.3867 305.373,25.3867 Q305.8926,25.3867 306.3813,25.1646 Q306.8701,24.9424 307.3896,24.4639 Z " fill="#000000"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="84" x="318" y="26.7852">ListenerClass</text><line style="stroke:#181818;stroke-width:0.5;" x1="292" x2="404" y1="37" y2="37"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="74" x="297" y="53.9883">+method1()</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="12" x="297" y="70.3945">...</text><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="76" x="297" y="86.8008">+methodN()</text></g><!--link Topic to ListenerClass--><g id="link_Topic_ListenerClass"><path codeLine="18" d="M245.21,50.5 C255.9,50.5 266.45,50.5 276.48,50.5 " fill="none" id="Topic-ListenerClass" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="none" points="232.69,50.5,238.69,54.5,244.69,50.5,238.69,46.5,232.69,50.5" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="289.23,50.5,280.23,46.5,284.23,50.5,280.23,54.5,289.23,50.5" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="284.23" x2="276.23" y1="50.5" y2="50.5"/><text fill="#000000" font-family="Roboto,sans-serif" font-size="14" lengthAdjust="spacing" textLength="8" x="272.1023" y="64.4747">1</text></g><!--SRC=[LOzDJiD038NtSmgJ3I2K4Rq04j0DKjLDkS1auYGEywUnioXLxyumYGJT-JtBx_Exes3TqYFCNPkS2R9uryg47dKge-8l2ibauy4wm_mgagbR13zi32VwHdXM4vLpz4dEC12wdlyx7cMAnN8u24Y4JECaq5D6AnI3KlUmnu42Ge52xERYCr2eiYSp5hIgQ6Xiz9g2e7CqwqN8QO_CPaJMdp6HRS0mr0ak2k1fHDaJbrRde_7uyBXvRpcQtXeko-sBihfka0EnOC3yNbMDMIliwlrb5LVGMl_jZZNWjieQbz6PNm9Fb5YjlyMsVO5c1yqjx0S0]--></g></svg>

Before

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -5,6 +5,7 @@
<settings> <settings>
<id-generator-method>LOWER_CASE_DASHES_DOT_REMOVE</id-generator-method> <id-generator-method>LOWER_CASE_DASHES_DOT_REMOVE</id-generator-method>
<default-property element-name="chapter" property-name="show-structure-depth" value="2"/> <default-property element-name="chapter" property-name="show-structure-depth" value="2"/>
<wrs-supernova use-version="233.4787"/>
</settings> </settings>
<module name="intellij-sdk"/> <module name="intellij-sdk"/>
<topics dir="topics"/> <topics dir="topics"/>

View File

@ -17,7 +17,45 @@ The key Execution API classes are divided into two groups:
The following diagram shows the relations between the key classes: The following diagram shows the relations between the key classes:
![Execution Classes](execution_classes.svg) ```plantuml
@startuml
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
hide empty members
hide circle
package Configuration <<Rectangle>> {
interface RunProfile
interface RunConfiguration
interface RunProfileState
}
package Execution <<Rectangle>> {
abstract class Executor
interface ProgramRunner
class ExecutionEnvironment
class RunContentBuilder
abstract class ExecutionResult
interface ExecutionConsole
abstract class ProcessHandler
}
RunProfile <|.. RunConfiguration
RunProfile --> RunProfileState: creates
RunProfileState --> ExecutionResult: prepares
ExecutionResult o-- "1" ExecutionConsole
ExecutionResult o-- "1" ProcessHandler
ProgramRunner --> RunProfile: executes
ProgramRunner --> Executor
ProgramRunner --> ExecutionEnvironment
ProgramRunner -r-> RunContentBuilder
@enduml
```
### Configuration Classes ### Configuration Classes

View File

@ -19,7 +19,30 @@ Run configurations can be started from the <control>Run</control> toolbar, the e
The following diagram shows the key run configurations classes: The following diagram shows the key run configurations classes:
![Run Configuration Classes](run_configuration_classes.svg) Original:
```plantuml
@startuml
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
hide empty members
hide circle
interface RunProfile
interface ConfigurationType
abstract class ConfigurationFactory
interface RunConfiguration
abstract class SettingsEditor
ConfigurationType *-- "*" ConfigurationFactory
ConfigurationFactory --> RunConfiguration: creates
RunConfiguration o-- "0..*" SettingsEditor
RunConfiguration -l|> RunProfile
@enduml
```
Run Configuration API (except `SettingsEditor` class, which is a class shared by many IntelliJ Platform APIs) is a part of the [Execution API](execution.md). Run Configuration API (except `SettingsEditor` class, which is a class shared by many IntelliJ Platform APIs) is a part of the [Execution API](execution.md).

View File

@ -308,11 +308,87 @@ val projectService = project.service<MyProjectService>()
</tabs> </tabs>
<procedure title="Getting Service Flow" collapsible="true" default-state="collapsed"> <chapter title="Getting Service Flow" collapsible="true" default-state="collapsed">
![Getting Service](getting_service.svg){thumbnail="true" thumbnail-same-file="true"} ```plantuml
@startuml
skinparam monochrome true
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 13
skinparam DefaultTextAlignment center
skinparam NoteTextAlignment left
</procedure> ' default 1.5
skinparam ActivityBorderThickness 1
' default 2
skinparam PartitionBorderThickness 1.5
:getService;
note right
Allowed in any thread.
Call on demand only.
Never cache the result.
Do not call in constructors
unless needed.
end note
if (Is Light Service) then (yes)
else (no)
if (Is Service Declaration Found) then (yes)
else (no)
:Return null;
detach
endif
endif
if (Is Created and Initialized?) then (yes)
else (no)
if (Is Container Active?) then (yes)
partition "synchronized\non service class" {
if (Is Created and Initialized?) then (yes)
else (no)
if (Is Initializing?) then (yes)
:Throw
PluginException
(Cyclic Service
Initialization);
detach
else (no)
partition "non-cancelable" {
:Create Instance]
note right
Avoid getting other
services to reduce
the initialization tree.
The fewer the
dependencies,
the faster and more
reliable initialization.
end note
:Register to be Disposed
on Container Dispose
(Disposable only)]
:Load Persistent State
(PersistentStateComponent
only)]
}
endif
endif
}
else (disposed or dispose in progress)
:Throw
ProcessCanceledException;
detach
endif
endif
:Return Instance;
@enduml
```
</chapter>
## Sample Plugin ## Sample Plugin

View File

@ -18,6 +18,8 @@ The *External System* sub-system provides a simple API for wrapping external sys
## Project Management ## Project Management
Fonts installed on the build server:
### Project Data Domain ### Project Data Domain
The external system wrapper is required to be able to build project info on the basis of the given external system config. The external system wrapper is required to be able to build project info on the basis of the given external system config.
@ -26,14 +28,65 @@ That information is built with the following base classes:
* [`Key`](%gh-ic%/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/Key.java) * [`Key`](%gh-ic%/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/Key.java)
* [`ExternalEntityData`](%gh-ic%/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/project/ExternalEntityData.java) * [`ExternalEntityData`](%gh-ic%/platform/external-system-api/src/com/intellij/openapi/externalSystem/model/project/ExternalEntityData.java)
![DataNode](data_node.svg) ```plantuml
@startuml
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
hide empty members
hide circle
class "parent DataNode" as parent
class DataNode
together {
class "child n DataNode" as child3
class "..." as child2
class "child 1 DataNode" as child1
class Key
class ExternalEntityData
}
' Define the class relationships
parent -- DataNode
ExternalEntityData --o DataNode
Key --o DataNode
DataNode -- child1
DataNode -- child2
DataNode -- child3
@enduml
```
The `DataNode` class is just a holder for the target data (a data type is defined by the `Key`). The `DataNode` class is just a holder for the target data (a data type is defined by the `Key`).
Multiple `DataNode` objects might be organized in directed graph where every edge identifies parent-child relation. Multiple `DataNode` objects might be organized in directed graph where every edge identifies parent-child relation.
For example, a simple one-module project might look as below: For example, a simple one-module project might look as below:
![DataNode Example](data_node_example.svg) ```plantuml
@startuml
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
hide empty members
hide circle
rectangle "DataNode<ProjectData>" as root
rectangle "DataNode<ModuleData>" as child1
rectangle "DataNode<LibraryData>\n(JUnit)" as child2
rectangle "DataNode<ContentRootData>" as child11
rectangle "DataNode<LibraryDependencyData>\n(JUnit)" as child12
' Define the class relationships
root -- child1
root -- child2
child1 -- child11
child1 -- child12
@enduml
```
The IDE provides a set of built-in `Key` and `ExternalEntityData` classes but any external system integration or third-party plugin developer might enhance project data by defining custom `Key` and `ExternalEntityData` and store them at a child of appropriate `DataNode`. The IDE provides a set of built-in `Key` and `ExternalEntityData` classes but any external system integration or third-party plugin developer might enhance project data by defining custom `Key` and `ExternalEntityData` and store them at a child of appropriate `DataNode`.

View File

@ -1,7 +1,7 @@
# Messaging Infrastructure
<!-- Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Messaging Infrastructure
<link-summary>Subscribing and publishing messages via message bus.</link-summary> <link-summary>Subscribing and publishing messages via message bus.</link-summary>
IntelliJ Platform's messaging infrastructure is an implementation of [Publisher Subscriber Pattern](https://w.wiki/5xaV) that provides additional features like _broadcasting on hierarchy_ and special _nested events_ processing (a _nested event_ is an event directly or indirectly fired from the callback of another event). IntelliJ Platform's messaging infrastructure is an implementation of [Publisher Subscriber Pattern](https://w.wiki/5xaV) that provides additional features like _broadcasting on hierarchy_ and special _nested events_ processing (a _nested event_ is an event directly or indirectly fired from the callback of another event).
@ -21,7 +21,33 @@ The [`Topic`](%gh-ic%/platform/extensions/src/com/intellij/util/messages/Topic.j
Clients are allowed to subscribe to a specific topic within a bus and send messages to that topic within that particular bus. Clients are allowed to subscribe to a specific topic within a bus and send messages to that topic within that particular bus.
To clarify the corresponding message bus, a `Topic` field declaration should be annotated with `Topic.@AppLevel` and/or `Topic.@ProjectLevel`. To clarify the corresponding message bus, a `Topic` field declaration should be annotated with `Topic.@AppLevel` and/or `Topic.@ProjectLevel`.
![Topic](topic.svg) ```plantuml
@startuml
skinparam monochrome true
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
skinparam classAttributeIconSize 0
hide empty fields
hide empty methods
left to right direction
class "com.intellij.util.messages.Topic" as Topic {
+getDisplayName()
+getBroadcastDirection()
}
class ListenerClass {
+method1()
{method} ...
+methodN()
}
Topic o--> "1 " ListenerClass
@enduml
```
#### Topic Properties #### Topic Properties
@ -42,13 +68,49 @@ Listener class
[`MessageBus`](%gh-ic%/platform/extensions/src/com/intellij/util/messages/MessageBus.kt) is the core of the messaging system. [`MessageBus`](%gh-ic%/platform/extensions/src/com/intellij/util/messages/MessageBus.kt) is the core of the messaging system.
It is used in the following scenarios: It is used in the following scenarios:
![Bus](bus.svg) ```plantuml
@startuml
skinparam monochrome true
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
:Subscriber:
(Create connection) as (C)
note top of (C): Necessary for subscribing
Subscriber --> C
:Publisher:
(Publish)
Publisher --> Publish
@enduml
```
### Connection ### Connection
Connection is represented by [`MessageBusConnection`](%gh-ic%/platform/extensions/src/com/intellij/util/messages/MessageBusConnection.kt) class and manages all subscriptions for a particular client within a particular bus. Connection is represented by [`MessageBusConnection`](%gh-ic%/platform/extensions/src/com/intellij/util/messages/MessageBusConnection.kt) class and manages all subscriptions for a particular client within a particular bus.
![Connection](connection.svg) ```plantuml
@startuml
skinparam monochrome true
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
hide empty members
hide circle
class MessageBus
class MessageBusConnection
class "Default Handler" as DH
class "(Topic-Handler)" as TH
MessageBus "1" o-- "*" MessageBusConnection
MessageBusConnection o-- "0..1" DH
MessageBusConnection *-- "*" TH
@enduml
```
Connection stores *topic-handler* mappings - callbacks to invoke when message for the target topic is received (not more than one handler per topic within the same connection is allowed). Connection stores *topic-handler* mappings - callbacks to invoke when message for the target topic is received (not more than one handler per topic within the same connection is allowed).
@ -80,7 +142,28 @@ public interface ChangeActionNotifier {
### Subscribing to a Topic ### Subscribing to a Topic
![Subscribing](subscribe.svg) ```plantuml
@startuml
skinparam monochrome true
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam ActivityBorderThickness 1
left to right direction
' Define the activity
(*) --> if "" then
--> [no connection] "Get a message\nbus reference"
--> "Create\na connection\nto the bus"
--> "Subscribe"
else
--> [connection exists] "Subscribe"
endif
--> (*)
@enduml
```
> If targeting 2019.3 or later, use [declarative registration](plugin_listeners.md) whenever possible. > If targeting 2019.3 or later, use [declarative registration](plugin_listeners.md) whenever possible.
> >
@ -106,7 +189,25 @@ Many standard interfaces implement returning a message bus, e.g., [`Application.
### Publishing Messages ### Publishing Messages
![Publishing](publish.svg) ```plantuml
@startuml
skinparam monochrome true
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
skinparam DefaultTextAlignment center
skinparam ActivityBorderThickness 1
left to right direction
' Define the activity
(*) --> "Get message\nbus reference"
--> "Ask the bus\nfor a particular\ntopic's publisher"
--> "Call target\nmethod on\npublisher"
--> "Messaging calls\nthe same method\non target handlers"
--> (*)
@enduml
```
```java ```java
public void doChange(Context context) { public void doChange(Context context) {
@ -126,13 +227,65 @@ public void doChange(Context context) {
Message buses can be organised into hierarchies. Message buses can be organised into hierarchies.
Moreover, the IntelliJ Platform has them already: Moreover, the IntelliJ Platform has them already:
![Standard hierarchy](standard_hierarchy.svg) ```plantuml
@startuml
skinparam monochrome true
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
hide empty members
hide circle
left to right direction
' Define the objects in the diagram
class "application bus" as AB
class "project bus" as PB
class "module bus" as MB
' Define the class relationships
AB o-- "*" PB
PB o-- "*" MB
@enduml
```
That allows to notify subscribers registered in one message bus on messages sent to another message bus. That allows to notify subscribers registered in one message bus on messages sent to another message bus.
Example setup: Example setup:
![Parent-child broadcast](parent_child_broadcast.svg) ```plantuml
@startuml
skinparam monochrome true
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
hide empty members
hide circle
top to bottom direction
class "application bus" as AB
class "project bus" as PB
class "connection1" as C1
class "connection2" as C2
class "connection3" as C3
class "topic1-handler1" as T1H1
class "topic1-handler2" as T1H2
class "topic1-handler3" as T1H3
AB o-- PB
AB *-- C1
PB *-- C2
PB *-- C3
C1 *-- T1H1
C2 *-- T1H2
C3 *-- T1H3
@enduml
```
The example setup presents a simple hierarchy (the *application bus* is a parent of the *project bus*) with three subscribers for the same topic. The example setup presents a simple hierarchy (the *application bus* is a parent of the *project bus*) with three subscribers for the same topic.
@ -163,7 +316,32 @@ The IntelliJ Platform's messaging infrastructure guarantees that all messages se
Consider the following configuration: Consider the following configuration:
![Nested messages](nested_config.svg) ```plantuml
@startuml
skinparam DefaultFontName JetBrains Sans
skinparam DefaultFontSize 14
hide empty members
hide circle
top to bottom direction
class "bus" as B
class "connection1" as C1
class "connection2" as C2
class "topic-handler1" as TH1
class "topic-handler2" as TH2
B *-- C1
B *-- C2
C1 *-- TH1
C2 *-- TH2
@enduml
```
When a message is sent to the target topic, the following happens: When a message is sent to the target topic, the following happens: