' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally !if %variable_exists("RELATIVE_INCLUDE") !include %get_variable_value("RELATIVE_INCLUDE")/C4_Context.puml !else !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml !endif ' Scope: A single software system. ' Primary elements: Containers within the software system in scope. ' Supporting elements: People and software systems directly connected to the containers. ' Intended audience: Technical people inside and outside of the software development team; including software architects, developers and operations/support staff. ' Colors ' ################################## !global $CONTAINER_BG_COLOR = "#438DD5" !global $CONTAINER_BORDER_COLOR = "#3C7FC0" !global $EXTERNAL_CONTAINER_BG_COLOR = "#B3B3B3" !global $EXTERNAL_CONTAINER_BORDER_COLOR = "#A6A6A6" ' Styling ' ################################## UpdateElementStyle("container", $CONTAINER_BG_COLOR, $ELEMENT_FONT_COLOR, $CONTAINER_BORDER_COLOR) UpdateElementStyle("external_container", $EXTERNAL_CONTAINER_BG_COLOR, $ELEMENT_FONT_COLOR, $EXTERNAL_CONTAINER_BORDER_COLOR) ' shortcuts with default colors !unquoted procedure AddContainerTag($tagStereo, $bgColor=$CONTAINER_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, $borderColor=$CONTAINER_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) !endprocedure !unquoted procedure AddExternalContainerTag($tagStereo, $bgColor=$EXTERNAL_CONTAINER_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, $borderColor=$EXTERNAL_CONTAINER_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) !endprocedure ' Layout ' ################################## SetDefaultLegendEntries("person\nsystem\ncontainer\nexternal_person\nexternal_system\nexternal_container") !procedure LAYOUT_WITH_LEGEND() hide stereotype legend right |**Legend** | |<$PERSON_BG_COLOR> person | |<$SYSTEM_BG_COLOR> system | |<$CONTAINER_BG_COLOR> container | |<$EXTERNAL_PERSON_BG_COLOR> external person | |<$EXTERNAL_SYSTEM_BG_COLOR> external system | |<$EXTERNAL_CONTAINER_BG_COLOR> external container | endlegend !endprocedure ' Elements ' ################################## !function $getContainer($label, $techn, $descr, $sprite) !$container = "" !if ($sprite != "") !$container = $container + $getSprite($sprite) + '\n' !endif !$container = $container + '==' + $label !if ($techn != "") !$container = $container + '\n//[' + $techn + ']//' !endif !if ($descr != "") !$container = $container + '\n\n' + $descr !endif !return $container !endfunction !unquoted procedure Container($alias, $label, $techn="", $descr="", $sprite="", $tags="", $link="") !$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "container") !$techn=$toElementArg($techn, $tags, "ElementTagTechn", "container") rectangle "$getContainer($label, $techn, $descr, $sprite)$getProps()" $toStereos("container", $tags) as $alias $getLink($link) !endprocedure !unquoted procedure ContainerDb($alias, $label, $techn="", $descr="", $sprite="", $tags="", $link="") !$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "container") !$techn=$toElementArg($techn, $tags, "ElementTagTechn", "container") database "$getContainer($label, $techn, $descr, $sprite)$getProps()" $toStereos("container", $tags) as $alias $getLink($link) !endprocedure !unquoted procedure ContainerQueue($alias, $label, $techn="", $descr="", $sprite="", $tags="", $link="") !$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "container") !$techn=$toElementArg($techn, $tags, "ElementTagTechn", "container") queue "$getContainer($label, $techn, $descr, $sprite)$getProps()" $toStereos("container", $tags) as $alias $getLink($link) !endprocedure !unquoted procedure Container_Ext($alias, $label, $techn="", $descr="", $sprite="", $tags="", $link="") !$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "external_container") !$techn=$toElementArg($techn, $tags, "ElementTagTechn", "external_container") rectangle "$getContainer($label, $techn, $descr, $sprite)$getProps()" $toStereos("external_container", $tags) as $alias $getLink($link) !endprocedure !unquoted procedure ContainerDb_Ext($alias, $label, $techn="", $descr="", $sprite="", $tags="", $link="") !$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "external_container") !$techn=$toElementArg($techn, $tags, "ElementTagTechn", "external_container") database "$getContainer($label, $techn, $descr, $sprite)$getProps()" $toStereos("external_container", $tags) as $alias $getLink($link) !endprocedure !unquoted procedure ContainerQueue_Ext($alias, $label, $techn="", $descr="", $sprite="", $tags="", $link="") !$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "external_container") !$techn=$toElementArg($techn, $tags, "ElementTagTechn", "external_container") queue "$getContainer($label, $techn, $descr, $sprite)$getProps()" $toStereos("external_container", $tags) as $alias $getLink($link) !endprocedure ' Boundaries ' ################################## !unquoted procedure Container_Boundary($alias, $label, $tags="", $link="") Boundary($alias, $label, "Container", $tags, $link) !endprocedure