From 73ce67accec8998c6a44642e8ca0e98a2d0aae60 Mon Sep 17 00:00:00 2001 From: Declan Lynch Date: Mon, 23 Oct 2023 14:01:14 -0400 Subject: [PATCH] Start of support for imageViews. Image Views associated with Software Systems will show on the Containers View page. --- .../images/component.png | Bin 0 -> 29919 bytes .../images/container.png | Bin 0 -> 30574 bytes .../internet-banking-system/images/system.png | Bin 0 -> 28989 bytes docs/example/workspace.dsl | 12 ++++++++++++ .../site/generatr/StructurizrUtilities.kt | 3 +++ .../SoftwareSystemComponentPageViewModel.kt | 7 ++++++- .../SoftwareSystemContainerPageViewModel.kt | 7 ++++++- .../site/views/SoftwareSystemComponentPage.kt | 13 ++++++++++--- .../site/views/SoftwareSystemContainerPage.kt | 13 ++++++++++--- .../site/generatr/site/views/rawImage.kt | 9 +++++++++ .../SoftwareSystemComponentPageViewModelTest.kt | 2 +- .../SoftwareSystemContainerPageViewModelTest.kt | 2 +- 12 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 docs/example/internet-banking-system/images/component.png create mode 100644 docs/example/internet-banking-system/images/container.png create mode 100644 docs/example/internet-banking-system/images/system.png create mode 100644 src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/rawImage.kt diff --git a/docs/example/internet-banking-system/images/component.png b/docs/example/internet-banking-system/images/component.png new file mode 100644 index 0000000000000000000000000000000000000000..88d452f49cc5e04a712955925449c715d943e03a GIT binary patch literal 29919 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

PWWEUp0)rB5f8;1hgS2?v?I)Y%KleU)vsz ztfCV9^?SnaJrCLW?11t>_+Jt)7VkvwY5DvXUVmn+zY+7tlhuc&0Hu5UF+TrEoGFCD za(7(O?bm8kvPoiTm`=my2@AvrieQe)L* z#nLqy6$yjsejA%;kVRbRW(M2xsfEI{G$onjAisA6KTN=I`p~8WLu7*v$%{0YV~*yGdB<2 zQr=aQJ~rSV=0m?S!2QF^GNdLQWp&s{KMLg-pn#x-vt^pSfb>$S;ut)0Pu2Y)>V80r zWxQ(Y4|3-H#H+?#;Sed2>AmzqJI4WC(cKDQmN`v-to*E2RgM7JXMQ%06yD%dbwYAs zfJ{d=vZ*6E5unjbVA#mK0318#CJL)ApPbPBgvjK-qz{u78{P!rHN5_t$T#QDFjEcq?T8EVpi4*kcapU+14Kn1OWUq1NzA`T!9xr!VYljhL^?O- zO}pta@B~o~`UuC(Xr@O=RUtp!<}uKzT*V^(sv-94+)@^*Me$n%_>+$SNoarrF8M3U z{@ROyN;bFt*6N=ZU#a$BEd{KUz-m1n|hH`@*Vm!|3^{}1ClO6RcA zs^%*F%LV>$ZKVH4qFO_sV+99vr7&c#`Ij0wBrqMhUuS!NHHsY2L`if?r~hpU6>e1C zocK5}%|BWJrBB3-H+y5k~N3i_D1bN?55<~P{Lgl>-ku%$`bVYM(DGnkLng4w6?*Pm2R-5EZnW(W7Qf!})($M;bqe8K$FY8&NIU z|L-v}H5_9kx<$Wpqu_rCPKX@tBAS-}$CxGpShet-vlg;|*}wD(p&M+%EUlPj;`09Q zolMGN2??YQx0rjUTzitSN`47p^7tz1RgumsmFOcVH?6F9HEfMxldJ)@zy1SImr!Xz zekgh#(5ze`H4hm3qsN|iX#9+Fze;D70jzVw% literal 0 HcmV?d00001 diff --git a/docs/example/internet-banking-system/images/container.png b/docs/example/internet-banking-system/images/container.png new file mode 100644 index 0000000000000000000000000000000000000000..b8db89af7145590c21a5b20cc43c279f1251f9cc GIT binary patch literal 30574 zcma&O1zc2H7dDQHgeWPUf}qkeNT-xE3KG&FB{0O$-6^2b-6CDm-NFp5Lw5@dF?7xU zp!dGl`@Y}*`+Yd#nRCwGd+oLNUVE))J=;(fC7FA7DDI%4q1}^xA^8do?G_9T?Z#~^ z4B!rr3Rn>M2i;6uQ5+4eJPPN+@HX(B&iKVEMKm-wCNwmk05r5S;Fixi8k!>~8rn|- zG&F$(G&EA%l=_!KzylQ%O<7Y#MKosM8Vl{_4MMbAz|{@l4_dGV8v3tmG&G<7$V>zO#kZ*0pR-jHU~Z3uU8x_h3PdFRp=ya>`mx+*g4rb=|%3) z(a{Onzcm$jB`N(^ap0RUy}5&ftpEpyv$He1Gl<>B-i+fZKR-VQCl?177aQ;f8^jgt zVCcdIhA{lD8~65&(Ci;O-WTGy*6JTx{yl`h?gC>daz}{cKl4H44oi&wIU1T6nyjR_n#+x?RLtr7 zU6;X_#Q0JISYPg2+@a4h`cCG~A-$vs>?_F^BBdUg@}sq#F^s z_)9VL`%v%nAHv5+rpHH!Bg9O@`M?@vr$MkmP!I`2YBep`{qd|b+hc®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 F{|9S7{+j>* literal 0 HcmV?d00001 diff --git a/docs/example/internet-banking-system/images/system.png b/docs/example/internet-banking-system/images/system.png new file mode 100644 index 0000000000000000000000000000000000000000..36c0ac03d222fd3defa616c307ab69acbddf9ace GIT binary patch literal 28989 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 a%Fl6 literal 0 HcmV?d00001 diff --git a/docs/example/workspace.dsl b/docs/example/workspace.dsl index 300034b3..82b50a91 100644 --- a/docs/example/workspace.dsl +++ b/docs/example/workspace.dsl @@ -176,6 +176,18 @@ workspace "Big Bank plc" "This is an example workspace to illustrate the key fea "generatr.markdown.flexmark.extensions" "Abbreviation,Admonition,AnchorLink,Attributes,Autolink,Definition,Emoji,Footnotes,GfmTaskList,GitLab,MediaTags,Tables,TableOfContents,Typographic" } + image internetBankingSystem { + image internet-banking-system/images/system.png + } + + image apiApplication { + image internet-banking-system/images/container.png + } + + image accountsSummaryController { + image internet-banking-system/images/component.png + } + systemlandscape "SystemLandscape" { include * autoLayout diff --git a/src/main/kotlin/nl/avisi/structurizr/site/generatr/StructurizrUtilities.kt b/src/main/kotlin/nl/avisi/structurizr/site/generatr/StructurizrUtilities.kt index 5ef8234c..bf3fe669 100644 --- a/src/main/kotlin/nl/avisi/structurizr/site/generatr/StructurizrUtilities.kt +++ b/src/main/kotlin/nl/avisi/structurizr/site/generatr/StructurizrUtilities.kt @@ -47,3 +47,6 @@ fun ViewSet.hasDynamicViews(softwareSystem: SoftwareSystem) = fun ViewSet.hasDeploymentViews(softwareSystem: SoftwareSystem) = deploymentViews.any { it.softwareSystem == softwareSystem } + +fun ViewSet.hasElementImageViews(elementId: String) = + imageViews.any { it.elementId == elementId} diff --git a/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemComponentPageViewModel.kt b/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemComponentPageViewModel.kt index c0caddae..2d161668 100644 --- a/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemComponentPageViewModel.kt +++ b/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemComponentPageViewModel.kt @@ -2,6 +2,7 @@ package nl.avisi.structurizr.site.generatr.site.model import com.structurizr.model.SoftwareSystem import nl.avisi.structurizr.site.generatr.hasComponentViews +import nl.avisi.structurizr.site.generatr.hasElementImageViews import nl.avisi.structurizr.site.generatr.site.GeneratorContext class SoftwareSystemComponentPageViewModel(generatorContext: GeneratorContext, softwareSystem: SoftwareSystem) : @@ -10,5 +11,9 @@ class SoftwareSystemComponentPageViewModel(generatorContext: GeneratorContext, s .filter { it.softwareSystem == softwareSystem } .sortedBy { it.key } .map { DiagramViewModel.forView(this, it, generatorContext.svgFactory) } - val visible = generatorContext.workspace.views.hasComponentViews(softwareSystem) + val images = generatorContext.workspace.views.imageViews + .filter { it.elementId == softwareSystem.id } + .sortedBy { it.key } + val diagramsVisible = generatorContext.workspace.views.hasComponentViews(softwareSystem) + val imagesVisible = generatorContext.workspace.views.hasElementImageViews(softwareSystem.id) } diff --git a/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemContainerPageViewModel.kt b/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemContainerPageViewModel.kt index 89867ba3..61c50b5d 100644 --- a/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemContainerPageViewModel.kt +++ b/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemContainerPageViewModel.kt @@ -2,6 +2,7 @@ package nl.avisi.structurizr.site.generatr.site.model import com.structurizr.model.SoftwareSystem import nl.avisi.structurizr.site.generatr.hasContainerViews +import nl.avisi.structurizr.site.generatr.hasElementImageViews import nl.avisi.structurizr.site.generatr.site.GeneratorContext class SoftwareSystemContainerPageViewModel(generatorContext: GeneratorContext, softwareSystem: SoftwareSystem) : @@ -10,5 +11,9 @@ class SoftwareSystemContainerPageViewModel(generatorContext: GeneratorContext, s .filter { it.softwareSystem == softwareSystem } .sortedBy { it.key } .map { DiagramViewModel.forView(this, it, generatorContext.svgFactory) } - val visible = generatorContext.workspace.views.hasContainerViews(softwareSystem) + val images = generatorContext.workspace.views.imageViews + .filter { it.elementId == softwareSystem.id } + .sortedBy { it.key } + val diagramsVisible = generatorContext.workspace.views.hasContainerViews(softwareSystem) + val imagesVisible = generatorContext.workspace.views.hasElementImageViews(softwareSystem.id) } diff --git a/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/SoftwareSystemComponentPage.kt b/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/SoftwareSystemComponentPage.kt index e61bddcd..e4c00f78 100644 --- a/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/SoftwareSystemComponentPage.kt +++ b/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/SoftwareSystemComponentPage.kt @@ -4,10 +4,17 @@ import kotlinx.html.HTML import nl.avisi.structurizr.site.generatr.site.model.SoftwareSystemComponentPageViewModel fun HTML.softwareSystemComponentPage(viewModel: SoftwareSystemComponentPageViewModel) { - if (viewModel.visible) + if (viewModel.diagramsVisible || viewModel.imagesVisible) softwareSystemPage(viewModel) { - viewModel.diagrams.forEach { - diagram(it) + if (viewModel.diagramsVisible) { + viewModel.diagrams.forEach { + diagram(it) + } + } + if (viewModel.imagesVisible) { + viewModel.images.forEach { + rawImage(it.content) + } } } else diff --git a/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/SoftwareSystemContainerPage.kt b/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/SoftwareSystemContainerPage.kt index 3a414c60..28e506d4 100644 --- a/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/SoftwareSystemContainerPage.kt +++ b/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/SoftwareSystemContainerPage.kt @@ -4,10 +4,17 @@ import kotlinx.html.HTML import nl.avisi.structurizr.site.generatr.site.model.SoftwareSystemContainerPageViewModel fun HTML.softwareSystemContainerPage(viewModel: SoftwareSystemContainerPageViewModel) { - if (viewModel.visible) + if (viewModel.diagramsVisible || viewModel.imagesVisible) softwareSystemPage(viewModel) { - viewModel.diagrams.forEach { - diagram(it) + if (viewModel.diagramsVisible) { + viewModel.diagrams.forEach { + diagram(it) + } + } + if (viewModel.imagesVisible) { + viewModel.images.forEach { + rawImage(it.content) + } } } else diff --git a/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/rawImage.kt b/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/rawImage.kt new file mode 100644 index 00000000..036e34cc --- /dev/null +++ b/src/main/kotlin/nl/avisi/structurizr/site/generatr/site/views/rawImage.kt @@ -0,0 +1,9 @@ +package nl.avisi.structurizr.site.generatr.site.views + +import kotlinx.html.* + +fun FlowContent.rawImage(data: String) { + img { + src = data + } +} diff --git a/src/test/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemComponentPageViewModelTest.kt b/src/test/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemComponentPageViewModelTest.kt index b9e145c4..062aae35 100644 --- a/src/test/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemComponentPageViewModelTest.kt +++ b/src/test/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemComponentPageViewModelTest.kt @@ -57,6 +57,6 @@ class SoftwareSystemComponentPageViewModelTest : ViewModelTest() { generatorContext.workspace.model.addSoftwareSystem("Software system 2") ) - assertThat(viewModel.visible).isFalse() + assertThat(viewModel.diagramsVisible).isFalse() } } diff --git a/src/test/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemContainerPageViewModelTest.kt b/src/test/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemContainerPageViewModelTest.kt index ee336b98..55f3d3ee 100644 --- a/src/test/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemContainerPageViewModelTest.kt +++ b/src/test/kotlin/nl/avisi/structurizr/site/generatr/site/model/SoftwareSystemContainerPageViewModelTest.kt @@ -56,6 +56,6 @@ class SoftwareSystemContainerPageViewModelTest : ViewModelTest() { generatorContext.workspace.model.addSoftwareSystem("Software system 2") ) - assertThat(viewModel.visible).isFalse() + assertThat(viewModel.diagramsVisible).isFalse() } }