@startuml
footer
    Keyple Distributed - Concepts - Many Remote Plugins connected to one Local Service (30/10/2020)
end footer

' == THEME ==

'Couleurs issues de : https://htmlcolorcodes.com/fr/tableau-de-couleur/tableau-de-couleur-design-plat/
!define COLOR_RED E74C3C
!define COLOR_PURPLE 8E44AD
!define COLOR_BLUE 3498DB
!define COLOR_GREEN 27AE60
!define COLOR_GREY 2C3E50
skinparam Shadowing false
skinparam component {
    BorderColor #D4AC0D
    ' Red
    BackgroundColor<<red>> #FDEDEC
    BorderColor<<red>> #E74C3C
    ' Purple
    BackgroundColor<<purple>> #F4ECF7
    BorderColor<<purple>> #8E44AD
    ' blue
    BackgroundColor<<blue>> #EBF5FB
    BorderColor<<blue>> #3498DB
    ' Green
    BackgroundColor<<green>> #E9F7EF
    BorderColor<<green>> #27AE60
    ' Grey
    BackgroundColor<<grey>> #EAECEE
    BorderColor<<grey>> #2C3E50
}
hide <<red>> stereotype
hide <<purple>> stereotype
hide <<blue>> stereotype
hide <<green>> stereotype
hide <<grey>> stereotype

' == CONTENT ==

[Hardware Reader A\n(PO)] as readerA <<green>>
[Hardware Reader B\n(SAM)] as readerB <<blue>>
[Hardware Reader C\n(PO)] as readerC <<purple>>
package "Terminal A with 'local' and 'remote' readers" {
    [Application] as appA
    [**Remote Plugin**] as remotePluginA <<red>>
    [Remote\nReader B] as remoteReaderA <<blue>>
    [Local\nPlugin A] as localPluginA <<green>>
    [Local\nReader A] as localReaderA <<green>>
}
package "Terminal B with 'local' reader" {
    [Application] as appB
    [**Local Service**] as localServiceB <<red>>
    [Local\nPlugin B] as localPluginB <<blue>>
    [Local\nReader B] as localReaderB <<blue>>
}
package "Terminal C with 'local' and 'remote' readers" {
    [Application] as appC
    [**Remote Plugin**] as remotePluginC <<red>>
    [Remote\nReader B] as remoteReaderC <<blue>>
    [Local\nPlugin C] as localPluginC <<purple>>
    [Local\nReader C] as localReaderC <<purple>>
}

'utilisation

appA -- remotePluginA
appA -- remoteReaderA #LightGrey
appA -- localPluginA #LightGrey
appA -- localReaderA #LightGrey
remotePluginA -- remoteReaderA #COLOR_BLUE
localPluginA -- localReaderA #COLOR_GREEN
localReaderA -- readerA #COLOR_GREEN

remotePluginA - localServiceB

appB -- localServiceB
appB -- localPluginB #LightGrey
appB -- localReaderB #LightGrey
localServiceB -- localPluginB #COLOR_BLUE
localServiceB -- localReaderB #COLOR_BLUE
localPluginB -- localReaderB #COLOR_BLUE
localReaderB -- readerB #COLOR_BLUE

localServiceB - remotePluginC

appC -- remotePluginC
appC -- remoteReaderC #LightGrey
appC -- localPluginC #LightGrey
appC -- localReaderC #LightGrey
remotePluginC -- remoteReaderC #COLOR_BLUE
localPluginC -- localReaderC #COLOR_PURPLE
localReaderC -- readerC #COLOR_PURPLE

@enduml