@startuml 

' displays all elements, relationship and legend (can be included in the theme test)
!if %variable_exists("RELATIVE_INCLUDE")
  !include %get_variable_value("RELATIVE_INCLUDE")/C4_Component.puml
  !include %get_variable_value("RELATIVE_INCLUDE")/C4_Deployment.puml
!else
  !include https://gitea.utapp.cn/github-mirrors/C4-PlantUML/raw/branch/ut/C4_Component.puml
  !include https://gitea.utapp.cn/github-mirrors/C4-PlantUML/raw/branch/ut/C4_Deployment.puml
!endif

SetDefaultLegendEntries("person\nsystem\ncontainer\ncomponent\nexternal_person\nexternal_system\nexternal_container\nexternal_component\nnode\nenterprise_boundary\nsystem_boundary\ncontainer_boundary\nboundary")

title Overview of all elements, relationship and legend

footer theme $THEME drawn with PlantUML v. %version() and C4-PlantUML v. C4Version()

Boundary(b2, "Boundary 2") {
  System(system, "System", "Optional Description")
  System_Ext(externalSystem, "External System", "Optional Description")
  Rel_R(system, externalSystem, "uses")

  SystemDb(systemDb, "SystemDb", "Optional Description")
  SystemDb_Ext(externalSystemDb, "External SystemDb", "Optional Description")
  SystemQueue(systemQueue, "SystemQueue", "Optional Description")
  SystemQueue_Ext(externalSystemQueue, "External SystemQueue", "Optional Description")    
}

Boundary(b1, "Boundary 1") {
  Person(person, "Person", "Optional Description")
  Person_Ext(externalPerson, "External Person", "Optional Description")
  Rel_R(person, externalPerson, "uses")
}

Boundary(b3, "Boundary 3") {
  Container(container, "Container", "Technology", "Optional Description")
  Container_Ext(externalContainer, "External Container", "Technology", "Optional Description")
  Rel_R(container, externalContainer, "uses")

  ContainerDb(containerDb, "ContainerDb", "Technology", "Optional Description")
  ContainerDb_Ext(externalContainerDb, "External ContainerDb", "Technology", "Optional Description")
  ContainerQueue(containerQueue, "ContainerQueue", "Technology", "Optional Description")
  ContainerQueue_Ext(externalContainerQueue, "External ContainerQueue", "Technology", "Optional Description")
}

Boundary(b4, "Boundary 4") {
  Component(component, "Component", "Technology", "Optional Description")
  Component_Ext(externalComponent, "External Component", "Technology", "Optional Description")
  Rel_R(component, externalComponent, "uses")

  ComponentDb(componentDb, "ComponentDb", "Technology", "Optional Description")
  ComponentDb_Ext(externalComponentDb, "External ComponentDb", "Technology", "Optional Description")
  ComponentQueue(componentQueue, "ComponentQueue", "Technology", "Optional Description")
  ComponentQueue_Ext(externalComponentQueue, "External ComponentQueue", "Technology", "Optional Description")
}

Boundary(b5, "Boundary 5") {
  Node(node, "Node", "Type", "Optional Description")
}

Boundary(b6, "Boundary 6") {
  Enterprise_Boundary(eb, "Enterprise Boundary") {
  }

  System_Boundary(sb, "System Boundary") {
  }

  Container_Boundary(cb, "Container Boundary") {
  }

  Lay_R(eb,sb)
  Lay_R(sb,cb)
}

Lay_D(b2,b3)
Lay_R(b2,b1)
Lay_D(b3,b4)
Lay_D(b4,b5)
Lay_R(b5,b6)

SHOW_FLOATING_LEGEND()
@enduml
