blob: 838be484e3d1a3b7d7ccaa133309c610c4cc8d9f [file] [log] [blame]
<html>
<head>
<meta charset="utf-8">
<title>openKonsequenz - Architecture of the module &#39;Grid Failure Information&#39;Create Repository</title>
<style>
#wrapper {width: 960px; margin: 0 auto;}
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment @import statement to use as custom stylesheet */
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
dfn{font-style:italic}
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
abbr{text-transform:none}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
blockquote cite::before{content:"\2014 \0020"}
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
:not(pre)>code.nobreak{word-wrap:normal}
:not(pre)>code.nowrap{white-space:nowrap}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
pre.pygments .lineno::before{content:"";margin-right:-.125em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt,.quoteblock .quoteblock{margin:0 0 1.25em;padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
table.tableblock{max-width:100%;border-collapse:separate}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}
table.frame-sides{border-width:0 1px}
table.frame-topbot,table.frame-ends{border-width:1px 0}
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
ul.checklist{margin-left:.625em}
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
.gist .file-data>table td.line-data{width:99%}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
<link href='https://fonts.googleapis.com/css?family=Noto+Serif' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,300italic,400italic,600,600italic,700,700italic,800,800italic' rel='stylesheet' type='text/css'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/default.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/asciidoc.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/yaml.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/dockerfile.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/makefile.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/go.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/rust.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/haskell.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/typescript.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/scss.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/less.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/handlebars.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/groovy.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/scala.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/bash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/ini.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
</head>
<body>
<div id="wrapper">
<div class="article">
<h1 id="__asciidoctor-preview-0__">openKonsequenz - Architecture of the module 'Grid Failure Information'</h1>
<div id="preamble">
<div class="sectionbody">
<div style="page-break-after: always;"></div>
<div id="__asciidoctor-preview-2__" class="paragraph">
<p>Based on the ARC42-Template (v7.0):</p>
</div>
<div id="__asciidoctor-preview-3__" class="ulist">
<ul>
<li id="__asciidoctor-preview-4__">
<p>Version: 0.1</p>
</li>
<li id="__asciidoctor-preview-5__">
<p>Date: 24.03.2020</p>
</li>
<li id="__asciidoctor-preview-6__">
<p>Status: Inital Draft</p>
</li>
</ul>
</div>
<div style="page-break-after: always;"></div>
<!-- toc disabled -->
<div style="page-break-after: always;"></div>
</div>
<div id="toc" class="toc">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#_introduction_and_goals">1. Introduction and Goals</a>
<ul class="sectlevel2">
<li><a href="#_requirements_overview">1.1. Requirements Overview</a></li>
<li><a href="#_quality_goals">1.2. Quality Goals</a></li>
<li><a href="#_stakeholders">1.3. Stakeholders</a></li>
</ul>
</li>
<li><a href="#_architecture_constraints">2. Architecture Constraints</a>
<ul class="sectlevel2">
<li><a href="#_technical_constraints">2.1. Technical Constraints</a></li>
<li><a href="#_technical_dependencies">2.2. Technical Dependencies</a></li>
</ul>
</li>
<li><a href="#_system_scope_and_context">3. System Scope and Context</a>
<ul class="sectlevel2">
<li><a href="#_business_context">3.1. Business Context</a></li>
<li><a href="#_technical_context">3.2. Technical Context</a></li>
<li><a href="#_solution_strategy">3.3. Solution Strategy</a></li>
</ul>
</li>
<li><a href="#_building_block_view">4. Building Block View</a>
<ul class="sectlevel2">
<li><a href="#_whitebox_overall_system">4.1. Whitebox Overall System</a></li>
<li><a href="#_level_2">4.2. Level 2</a></li>
</ul>
</li>
<li><a href="#_runtime_view">5. Runtime view</a>
<ul class="sectlevel2">
<li><a href="#_login_authentication">5.1. Login / authentication</a></li>
<li><a href="#_deployment_of_the_application_components">5.2. Deployment of the application components</a></li>
<li><a href="#_ci_and_cd_components">5.3. CI- and CD-Components</a></li>
<li><a href="#_continuous_deployment">5.4. Continuous deployment</a></li>
</ul>
</li>
<li><a href="#_design_decisions">6. Design decisions</a></li>
<li><a href="#_risks_and_technical_debts">7. Risks and Technical Debts</a></li>
<li><a href="#_glossary">8. Glossary</a></li>
</ul>
</div>
</div>
<div class="sect1">
<h2 id="_introduction_and_goals"><a class="anchor" href="#_introduction_and_goals"></a>1. Introduction and Goals</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_requirements_overview"><a class="anchor" href="#_requirements_overview"></a>1.1. Requirements Overview</h3>
<div id="__asciidoctor-preview-10__" class="paragraph">
<p>The module 'Grid Failure Information' (in German: Modul 'Störungsinformationstool')
informs employees and customers about failures and planned interruptions of supply.
The module realizes the whole process from the creation of a failure information,
via the publication until the closure of the failure information.</p>
</div>
<div id="__asciidoctor-preview-11__" class="paragraph">
<p>It supports the user by the acquisition of data and leads the user through
the workflow for processing a failure information.</p>
</div>
<div id="__asciidoctor-preview-12__" class="paragraph">
<p>The module has many interfaces to other modules and external systems.</p>
</div>
<div id="__asciidoctor-preview-13__" class="paragraph">
<p>The full requirements of the module 'Grid Failure Information' is described in the document</p>
</div>
<div id="__asciidoctor-preview-14__" class="ulist">
<ul>
<li id="__asciidoctor-preview-15__">
<p>"Anforderungsspezifikation Modul Störungsinformationstool" version 1.3 / 31-07-2019.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_quality_goals"><a class="anchor" href="#_quality_goals"></a>1.2. Quality Goals</h3>
<div id="__asciidoctor-preview-16__" class="paragraph">
<p>The module 'Grid Failure Information' represents a user module that is based on the architecture platform of openKONSEQUENZ. The main quality
goals of the platform are:</p>
</div>
<div id="__asciidoctor-preview-17__" class="ulist">
<ul>
<li id="__asciidoctor-preview-18__">
<p><strong>Flexibility</strong> The reference platform shall grant that different systems and modules from different vendors/developers can interact and interoperate, and may be exchanged or recombined.</p>
</li>
<li id="__asciidoctor-preview-19__">
<p><strong>Availability</strong> All platform modules that are running on the platform can only be as available as the platform same for user modules that are based on platform modules.</p>
</li>
<li id="__asciidoctor-preview-20__">
<p><strong>Maintainability</strong> (and testability as part of maintainability) The platform and its platform modules shall be used longer than 15 years.</p>
</li>
<li id="__asciidoctor-preview-21__">
<p><strong>Integration performance</strong> New implemented functionality of oK own modules and external modules shall be included fast / automatically.</p>
</li>
<li id="__asciidoctor-preview-22__">
<p><strong>Security</strong> The platform and its modules need to underly security-by-design</p>
</li>
</ul>
</div>
<div id="__asciidoctor-preview-23__" class="paragraph">
<p>The main quality goals of the core module Contact Base Data are:</p>
</div>
<div id="__asciidoctor-preview-24__" class="ulist">
<ul>
<li id="__asciidoctor-preview-25__">
<p><strong>Functionality</strong> The core module must fulfil the functional requirements mentioned in the section before</p>
</li>
<li id="__asciidoctor-preview-26__">
<p><strong>Ergonomics</strong> The web interface must be realized according to oK-GUI-Styleguide.</p>
</li>
<li id="__asciidoctor-preview-27__">
<p><strong>Good documentation</strong> (i.e. code and architecture documentation) makes code changes easier and automatic
tests facilitate rigorous verification.</p>
</li>
<li id="__asciidoctor-preview-28__">
<p><strong>Modifiability</strong> (and testability as part of modifiability)</p>
</li>
<li id="__asciidoctor-preview-29__">
<p><strong>Integration performance</strong> The core module must be easy integratable in different production environments.</p>
</li>
</ul>
</div>
<div id="__asciidoctor-preview-30__" class="paragraph">
<p>The following documents contain the quality goals in detail:</p>
</div>
<div id="__asciidoctor-preview-31__" class="ulist">
<ul>
<li id="__asciidoctor-preview-32__">
<p>Architecture Committee Handbook v1.6.0 from 10-07-2019</p>
</li>
<li id="__asciidoctor-preview-33__">
<p>Quality Committee Handbook v2.0.1 from 15-10-2018</p>
</li>
</ul>
</div>
<div id="__asciidoctor-preview-34__" class="paragraph">
<p>The architecture is based on the AC-Handbook. The quality demands are described in the QC-Handbook.
Both specifications were fully complied with in the project, so that a high quality is given.</p>
</div>
<div id="__asciidoctor-preview-35__" class="paragraph">
<p>The code quality regarding static code analysis and unit test code coverage on the backend and fronend sides
are ensured by the use of sonarqube. The rule set and the qualtity gate are defined by the default, the
so called "sonar way".</p>
</div>
<div id="__asciidoctor-preview-36__" class="paragraph">
<p>The module 'Grid Failure Information' is part of the Eclipse project 'Eclipse openK User Modules'.
This project bases on the Eclipse Public Licence 2.0.</p>
</div>
</div>
<div class="sect2">
<h3 id="_stakeholders"><a class="anchor" href="#_stakeholders"></a>1.3. Stakeholders</h3>
<table id="__asciidoctor-preview-37__" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 1. Stakeholders</caption>
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Role/Name</th>
<th class="tableblock halign-left valign-top">Contact</th>
<th class="tableblock halign-left valign-top">Expectations</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Product Owner (represents the Distribution System Operators)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Maike Salbeck, Carsten Otten, Benedikt Herget, Rainer Fuhrmann</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The software must fulfil their functional and nonfunctional requirements.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Module Developer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Michel Alessandrini, Jonas Tewolde, Frank Dietrich</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All relevant business and technical information must be available for implementing the software.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">External Reviewer (represents the AC/QC)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">n.n.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The software and the documentation is realized according to the Quality and Architecture Handbook of openKONSEQUENZ.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">External Reviewer (represents the Eclipse-Requirements)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">n.n.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The software is licensed under the EPL 2.0. It must be validated that all requirements are fulfilled.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">System Integrator</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">n.n.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A documentation for the integration of the module in the DSO specific environments must be available.</p></td>
</tr>
</tbody>
</table>
<div style="page-break-after: always;"></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_architecture_constraints"><a class="anchor" href="#_architecture_constraints"></a>2. Architecture Constraints</h2>
<div class="sectionbody">
<div id="__asciidoctor-preview-57__" class="paragraph">
<p>The main architecture constraints are:</p>
</div>
<div id="__asciidoctor-preview-58__" class="ulist">
<ul>
<li id="__asciidoctor-preview-59__">
<p><strong>Public License</strong> The module must be available under the “Eclipse Public License 2.0”.</p>
</li>
<li id="__asciidoctor-preview-60__">
<p><strong>Standardization</strong> The module must use the reference platform.</p>
</li>
<li id="__asciidoctor-preview-61__">
<p><strong>Availability</strong> The source code of the module must be accessible to any interested person/company.</p>
</li>
</ul>
</div>
<div id="__asciidoctor-preview-62__" class="paragraph">
<p>Therefore the project is published under the following repositories:</p>
</div>
<div id="__asciidoctor-preview-63__" class="ulist">
<ul>
<li id="__asciidoctor-preview-64__">
<p><a href="https://git.eclipse.org/r/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.backend" class="bare">https://git.eclipse.org/r/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.backend</a></p>
</li>
<li id="__asciidoctor-preview-65__">
<p><a href="https://git.eclipse.org/r/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.frontend" class="bare">https://git.eclipse.org/r/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.frontend</a></p>
</li>
<li id="__asciidoctor-preview-66__">
<p><a href="https://git.eclipse.org/r/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.documentation" class="bare">https://git.eclipse.org/r/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.documentation</a></p>
</li>
</ul>
</div>
<div class="sect2">
<h3 id="_technical_constraints"><a class="anchor" href="#_technical_constraints"></a>2.1. Technical Constraints</h3>
<div id="__asciidoctor-preview-67__" class="paragraph">
<p>The following technical constraints are given:</p>
</div>
<table id="__asciidoctor-preview-68__" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 2. Technical Contraints</caption>
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Component</th>
<th class="tableblock halign-left valign-top">Constraints</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Base components of the reference platform</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p>Application Server Tomcat</p>
</li>
<li>
<p>JPA EclipseLink</p>
</li>
<li>
<p>Database PostgreSQL</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Programming language frontend</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p>Angular</p>
</li>
<li>
<p>Bootstrap</p>
</li>
<li>
<p>jQuery</p>
</li>
<li>
<p>REST/JSON Interfaces</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">GUI design</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p>According to oK-GUI-Styleguide</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Java QA environment</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p>Sonarqube 5.6.6</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Programming language</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p>Backend: Java 1.8</p>
</li>
<li>
<p>Frontend: Angular 7+ (Javascript, Typescript, HTML5, CSS3)</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">IDE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p>Not restricted (Eclipse, IntelliJ, Microsoft Developer Studio, Microsoft Visual Code &#8230;&#8203;)</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Build system</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p>Backend: Maven</p>
</li>
<li>
<p>Frontend: NodeJS + Angular/cli</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Libraries, frameworks, components</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p>Used Libraries/Frameworks have to be compatible to the Eclipse Public License</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Architecture Documentation</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p>According ARC42-Template</p>
</li>
</ul>
</div></div></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="_technical_dependencies"><a class="anchor" href="#_technical_dependencies"></a>2.2. Technical Dependencies</h3>
<div class="sect3">
<h4 id="_modules"><a class="anchor" href="#_modules"></a>2.2.1. Modules</h4>
<div id="__asciidoctor-preview-89__" class="paragraph">
<p>The following modules are required to use the 'Grid Failure Information':</p>
</div>
<table id="__asciidoctor-preview-90__" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 3. Modules</caption>
<colgroup>
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 25%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Name of the module</th>
<th class="tableblock halign-left valign-top">Purpose</th>
<th class="tableblock halign-left valign-top">Status of the module</th>
<th class="tableblock halign-left valign-top">status</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">'Auth&amp;Auth'</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Authentification and Authorization</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">available</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">required</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">'Contact base data'</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Contact Base Data</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">available</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">required</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">'eLogbook'</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Log Book</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">available</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">optional</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">'Planned Grid Measures'</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Planned Grid Measures</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">available</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">optional</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">'CIM-Cache'</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Interface to the SCADA system</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">available</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">optional</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect3">
<h4 id="_libraries"><a class="anchor" href="#_libraries"></a>2.2.2. Libraries</h4>
<div id="__asciidoctor-preview-115__" class="paragraph">
<p>The following libraries are used:
TODO: Am Ende die Bibliotheken aktualisieren</p>
</div>
<table id="__asciidoctor-preview-116__" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 4. Libraries</caption>
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.667%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Name of the library</th>
<th class="tableblock halign-left valign-top">Version</th>
<th class="tableblock halign-left valign-top">Artefact-id</th>
<th class="tableblock halign-left valign-top">Usage</th>
<th class="tableblock halign-left valign-top">License</th>
<th class="tableblock halign-left valign-top">Tier</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.boot.spring-boot-starter-parent</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.2.1.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.boot.spring-boot-starter-data-jpa</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.2.1.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.boot.spring-boot-starter-oauth2-client</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.2.1.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.boot.spring-boot-starter-security</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.2.1.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.boot.spring-boot-starter-web</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.2.1.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.flywaydb.flyway-core</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">6.0.8</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.cloud.spring-cloud-starter-openfeign</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.2.0.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.cloud.spring-cloud-starter-netflix-ribbon</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.2.0.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.keycloak.keycloak-core</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">3.4.2_Final</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.postgresql.postgresql</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">42.2.8</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">New BSD License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.projectlombok.lombok</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.18.10</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.mapstruct.mapstruct-processor</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.2.0.Final</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">io.jsonwebtoken.jjwt</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">0.9.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">io.springfox.springfox-swagger2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.9.2</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">io.springfox.springfox-swagger-ui</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.9.2</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.boot.spring-boot-starter-test</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.2.1.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.security.spring-security-test</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">5.2.1.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.powermock.powermock-reflect</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.0.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">com.h2database.h2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.4.200</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">EPL</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.cloud.spring-cloud-dependencies</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Hoxton.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.springframework.boot.spring-boot-maven-plugin</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.2.1.RELEASE</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.jacoco.jacoco-maven-plugin</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">0.7.9</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">EPL 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.sonarsource.scanner.maven.sonar-maven-plugin</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">3.2</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">LGPL 3.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.asciidoctor.asciidoctor-maven-plugin</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.5.3</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache License 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.jruby.jruby-complete</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">9.0.0.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">EPL 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.asciidoctor.asciidoctorj-pdf</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.5.0-alpha.11</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.asciidoctor.asciidoctorj</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.5.4</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.asciidoctor.asciidoctorj-pdf</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.5.0-alpha.11</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">org.asciidoctor.asciidoctorj-diagram</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.5.4.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Apache 2.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Backend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Angular Font Awesome</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">3.1.2</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">@auth0/angular-jwt</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">3.0.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">font-awesome</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4.7.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">@ngrx/core</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.2.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">@ngrx/effects</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8-2-0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">@ngrx/store</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8.3.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">@ngrx/store-devtools</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8.2.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">@ngx-translate/core</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">11.0.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">@ngx-translate/http-loader</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4.0.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ag-grid-angular</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">21.2.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ag-grid-community</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">21.2.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">angular2-notifications</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.0.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bootstrap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4.4.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">jquery</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">3.4.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">classlist.js</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.1.20150312</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">core-js</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">3.2.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">moment</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.24.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ng2-popover</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">0.0.14</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ngrx-forms</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">5.2.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">npm-install-peers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.2.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">reselect</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4.0.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">rxjs</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">6.5.3</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">rxjs-compat</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">6.5.4</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ts-helpers</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.1.2</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">tslib</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.10.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">web-animations-js</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.3.2</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">zone.js</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">0.10.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">@swimlane/ngx-datatable</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">15.0.2</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">puppeteer</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2.0.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ngx-toastr</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">11.2.1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">popper.js</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.16.0</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">@ng-bootstrap</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">5.1.5</p></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MIT License</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Frontend</p></td>
</tr>
</tbody>
</table>
<div style="page-break-after: always;"></div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_system_scope_and_context"><a class="anchor" href="#_system_scope_and_context"></a>3. System Scope and Context</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_business_context"><a class="anchor" href="#_business_context"></a>3.1. Business Context</h3>
<div id="__asciidoctor-preview-490__" class="paragraph">
<p>The core module 'Grid Failure Information' communicates via Restful Webservices with the follwowing modules:</p>
</div>
<div id="__asciidoctor-preview-491__" class="ulist">
<ul>
<li id="__asciidoctor-preview-492__">
<p><strong>Core Module 'Auth &amp; Auth'</strong> The 'Grid Failure Information' can only be used by authorized users.
Therefore, it is essential to invoke the module 'Auth &amp; Auth' for authorization and authentication
purposes.</p>
</li>
<li id="__asciidoctor-preview-493__">
<p><strong>Core Module 'Contact base data'</strong> The user management can only by done by the module contact base data.
Therefore, it is essential to user the module ''Contact base data' for managing all users and customers.</p>
</li>
<li id="__asciidoctor-preview-494__">
<p><strong>Core Module 'CIM-Cache'</strong> The 'Grid Failure Information' can only communicate via the CIM-Cachewith the SCADA system .
Therefore, it is essential to invoke the module 'CIM-Cache' for getting information from the SCADA system.</p>
</li>
<li id="__asciidoctor-preview-495__">
<p><strong>User Module 'eLogbook'</strong> The 'Grid Failure Information' can import failure information from the module 'eLogbook'.</p>
</li>
<li id="__asciidoctor-preview-496__">
<p><strong>User Module 'Planned Grid Measures'</strong> The 'Grid Failure Information' can import failure information from the module 'Planned Grid Measures'.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_technical_context"><a class="anchor" href="#_technical_context"></a>3.2. Technical Context</h3>
<div id="__asciidoctor-preview-497__" class="paragraph">
<p>The following aspects have to be taken into account for external communication of the module 'Grid Failure Information':</p>
</div>
<div id="__asciidoctor-preview-498__" class="ulist">
<ul>
<li id="__asciidoctor-preview-499__">
<p>RESTful web services are used as interface-technology.</p>
</li>
<li id="__asciidoctor-preview-500__">
<p>Each external interface (interfaces between modules or external systems) has to be documented.</p>
</li>
<li id="__asciidoctor-preview-501__">
<p>Dependencies of modules to services realized by other modules have to be specified and documented explicitly.</p>
</li>
</ul>
</div>
<div id="__asciidoctor-preview-502__" class="paragraph">
<p>The interfaces of the module 'Grid Failure Information' are described in the interface documentation.
TODO: Link zur interface documentation einfügen</p>
</div>
</div>
<div class="sect2">
<h3 id="_solution_strategy"><a class="anchor" href="#_solution_strategy"></a>3.3. Solution Strategy</h3>
<div id="__asciidoctor-preview-503__" class="paragraph">
<p>The module 'Grid Failure Information' bases on a small microservice architecture, including
an asynchronous messaging system.</p>
</div>
<div style="page-break-after: always;"></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_building_block_view"><a class="anchor" href="#_building_block_view"></a>4. Building Block View</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_whitebox_overall_system"><a class="anchor" href="#_whitebox_overall_system"></a>4.1. Whitebox Overall System</h3>
<div id="__asciidoctor-preview-505__" class="paragraph">
<p>The module 'grid failure information' contains several components:</p>
</div>
<div id="__asciidoctor-preview-506__" class="olist arabic">
<ol class="arabic">
<li id="__asciidoctor-preview-507__">
<p><strong>SIT-Web-FE</strong> - This component (SPA with Angular) provides two HTML pages: a table and a map
with failure information. This component is in the DMZ and can be called up from the Internet.</p>
</li>
<li id="__asciidoctor-preview-508__">
<p><strong>SIT-Web-Guard</strong> - The SIT-Web-Guard (Java Spring Cloud) is a Zuul proxy
(API gateway) that only forwards explicitly configured services. For the failure information
tool, only certain services are available on the Internet that do not require authentication.
Since the SIT-BE is protected by Spring Security, the SIT-Web-Guard procures guest authentication for forwarding.</p>
</li>
<li id="__asciidoctor-preview-509__">
<p><strong>SIT-FE</strong> -
This component (SPA with Angular) provides the user interface for the failure information application. The SIT-FE
receives its authentication when it is called from the PortalFE in the form of a JWT.</p>
</li>
<li id="__asciidoctor-preview-510__">
<p><strong>SIT_BE</strong> - The SIT-BE (Java Spring Boot Microservice) provides all CRUD services in the form of
ReST services that the two frontends require. The SIT-BE is the only component that has
access to the database. Every call is authorized against the PortalBE. This microservice also includes
the JobManager subcomponent.</p>
</li>
<li id="__asciidoctor-preview-511__">
<p><strong>JobManager</strong> - The various imports and exports are controlled via the JobManager. The JobManager
knows all available import and export jobs and can control them via the internal message bus
(RabbitMQ internal). Because the communication between the JobManager and the jobs takes place
via the message bus, the JM does not need to know their configuration and URLs. For this, the JM must
ensure synchronization (incl. timeout behavior) for asynchronous message communication.</p>
</li>
<li id="__asciidoctor-preview-512__">
<p><strong>Import- and export jobs</strong> - All jobs provide a uniform (MessageBus) interface to start a job,
return the result of a job, or to provide information about the respective job (name, version, timeout, status, etc.).
The job manager cyclically requests all configured jobs to send current status information to it.
The interfaces of the individual jobs "outside" can be very different (file system, Internet, message queue, etc.)</p>
</li>
</ol>
</div>
<div id="__asciidoctor-preview-513__" class="imageblock">
<div class="content">
<img src="../img/architectureSIT.png" alt="architectureSIT">
</div>
<div class="title">Figure 1. Architecture of the grid failure information tool</div>
</div>
<div id="__asciidoctor-preview-514__" class="paragraph">
<p>TODO: Ab hier komplett überarbeiten</p>
</div>
<div class="sect3">
<h4 id="_contactbasedatafe"><a class="anchor" href="#_contactbasedatafe"></a>4.1.1. contactBaseDataFE</h4>
<div id="__asciidoctor-preview-515__" class="paragraph">
<p>This component implements the presentation logic for the <strong>contact-base-data</strong>-module using the <strong>Angular</strong>-TypeScript
framework. The Frontend is a so called <strong>Single Page Application</strong> (SPA) because
it behaves like a single HTML-page.</p>
</div>
</div>
<div class="sect3">
<h4 id="_contact_base_data_jar_backend_tier"><a class="anchor" href="#_contact_base_data_jar_backend_tier"></a>4.1.2. contact-base-data.jar (backend tier)</h4>
<div id="__asciidoctor-preview-516__" class="paragraph">
<p>This component implements the business functionality of the contact base data. And it provides services, that the
contactBaseDataFE can use the functions in the frontend.</p>
</div>
<div id="__asciidoctor-preview-517__" class="paragraph">
<p>The "spring boot/spring cloud" framework is used to implement this application.</p>
</div>
</div>
<div class="sect3">
<h4 id="_contactbasedatadev_db_database_tier"><a class="anchor" href="#_contactbasedatadev_db_database_tier"></a>4.1.3. ContactBaseDataDev-DB (Database tier)</h4>
<div id="__asciidoctor-preview-518__" class="paragraph">
<p>This component stores the data of the contact base data. It provides an interface to the contact-base-data.jar to create or
change data in the database.</p>
</div>
<div id="__asciidoctor-preview-519__" class="paragraph">
<p>The ContactBaseDataDev-DB runs on a Postgres DBMS.
(The decision to use the Postgres DBMS was made by the openKONSEQUENZ architecture committee)</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_level_2"><a class="anchor" href="#_level_2"></a>4.2. Level 2</h3>
<div class="sect3">
<h4 id="_contactbasedatafe_frontend_tier"><a class="anchor" href="#_contactbasedatafe_frontend_tier"></a>4.2.1. ContactBaseDataFE (frontend tier)</h4>
<div id="__asciidoctor-preview-520__" class="paragraph">
<p>The frontend component implements the concept of a single-page application (SPA). The framework used is Angular5.</p>
</div>
<div id="__asciidoctor-preview-521__" class="paragraph">
<p>It divides the contactBaseDataFE into three layers:</p>
</div>
<div id="__asciidoctor-preview-522__" class="olist arabic">
<ol class="arabic">
<li id="__asciidoctor-preview-523__">
<p><strong>Components</strong> - The components (pages, lists, dialogs, common comp.) represent the presentation layer and the control layer. A component contains the control logic (.ts-file), an HTML-fragment as presentation description (.html-file) and a style definition (.css-file).</p>
</li>
<li id="__asciidoctor-preview-524__">
<p><strong>Services</strong> - The service component communicates with the interfaces of the backend via HTTP requests by using the model component.</p>
</li>
<li id="__asciidoctor-preview-525__">
<p><strong>Model</strong> - The model corresponds to the view-model of the backend tier.</p>
</li>
</ol>
</div>
<div id="__asciidoctor-preview-526__" class="listingblock">
<div class="title">Frontend tier</div>
<div class="content">
<pre>node contactBaseData_Frontend {
component Model
node Components {
component "Pages"
component Lists
component "Common Components"
}
component Services
Components --&gt; Services
Components --&gt; Model
Services --&gt; Model
}
node "Contact Base Data Backend (simplified)" {
component RestService
component ViewModel_API__DTO
}
Services .. RestService
Model .. ViewModel_API__DTO
RestService --&gt; ViewModel_API__DTO</pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_contact_base_data_jar_backend_tier_2"><a class="anchor" href="#_contact_base_data_jar_backend_tier_2"></a>4.2.2. contact-base-data.jar (backend tier)</h4>
<div id="__asciidoctor-preview-527__" class="paragraph">
<p>The backend tier contains five components which can be summarized in three layers:</p>
</div>
<div id="__asciidoctor-preview-528__" class="olist arabic">
<ol class="arabic">
<li id="__asciidoctor-preview-529__">
<p><strong>Presentation layer</strong> - Represented by</p>
<div id="__asciidoctor-preview-530__" class="olist loweralpha">
<ol class="loweralpha" type="a">
<li id="__asciidoctor-preview-531__">
<p>REST-Srv</p>
</li>
<li id="__asciidoctor-preview-532__">
<p>View model/DTO</p>
</li>
</ol>
</div>
</li>
<li id="__asciidoctor-preview-533__">
<p><strong>Controller layer</strong> - Represented by</p>
<div id="__asciidoctor-preview-534__" class="olist loweralpha">
<ol class="loweralpha" type="a">
<li id="__asciidoctor-preview-535__">
<p>Controller</p>
</li>
<li id="__asciidoctor-preview-536__">
<p>Service</p>
</li>
</ol>
</div>
</li>
<li id="__asciidoctor-preview-537__">
<p><strong>Model layer</strong> - Represented by</p>
<div id="__asciidoctor-preview-538__" class="olist loweralpha">
<ol class="loweralpha" type="a">
<li id="__asciidoctor-preview-539__">
<p>Repository</p>
</li>
<li id="__asciidoctor-preview-540__">
<p>Model</p>
</li>
</ol>
</div>
</li>
</ol>
</div>
<div id="__asciidoctor-preview-541__" class="listingblock">
<div class="title">Backend tier</div>
<div class="content">
<pre>node "Contact Base Data Backend" {
component Model
component RestService
component ViewModel_DTO
component Controller
component Service
component Repository
RestService --&gt; ViewModel_DTO
RestService --&gt; Controller
Controller --&gt; Service
Service --&gt; Repository
Repository --&gt; Model
}
node DBMS {
component ContactBaseDataDB
}
Repository --&gt; ContactBaseDataDB</pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_contactbasedata_db_database_tier"><a class="anchor" href="#_contactbasedata_db_database_tier"></a>4.2.3. ContactBaseData-DB (database tier)</h4>
<div id="__asciidoctor-preview-542__" class="paragraph">
<p>The ContactBaseData-DB is realized as a relational database system.</p>
</div>
<div id="__asciidoctor-preview-543__" class="listingblock">
<div class="title">Database tier</div>
<div class="content">
<pre>node DBMS {
component ContactBaseDataDB
}</pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="_program_configuration"><a class="anchor" href="#_program_configuration"></a>4.2.4. Program Configuration</h4>
<div style="page-break-after: always;"></div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_runtime_view"><a class="anchor" href="#_runtime_view"></a>5. Runtime view</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_login_authentication"><a class="anchor" href="#_login_authentication"></a>5.1. Login / authentication</h3>
<div id="__asciidoctor-preview-545__" class="paragraph">
<p>There is no login page, since the openK-Portal-Application is responsible for authentication and
the whole SSO (single sign on) process.
Therefore the application has to be started by providing a valid authentication token.
This token is a JWT (JSON Web Token).</p>
</div>
<div id="__asciidoctor-preview-546__" class="literalblock">
<div class="title">contactBaseData application is called by the <strong>portal</strong> application. The User is already logged in</div>
<div class="content">
<pre>actor User
participant PortalFrontend
participant PortalBackend
participant ContactBaseDataFrontend
entity ContactBaseDataStorage
participant ContactBaseDataBackend
User-&gt;PortalFrontend: Start ContactBaseData(JWT)
PortalFrontend-&gt;ContactBaseDataFrontend: nav. to frontend-URL with JWT
ContactBaseDataFrontend-&gt;ContactBaseDataStorage: Extract JWT and store token in session
... some delay ...
ContactBaseDataFrontend-&gt;ContactBaseDataBackend: Call any secured service with JWT
group Call secured service
ContactBaseDataBackend-&gt;PortalBackend: "/checkAut(JWT)"
group Authorization succeeded
ContactBaseDataBackend-&gt;ContactBaseDataBackend: run service
ContactBaseDataBackend-&gt;ContactBaseDataFrontend: return service result
end
group Authorization failed
ContactBaseDataBackend-&gt;ContactBaseDataFrontend: return HTTP Code 401
end
end</pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_deployment_of_the_application_components"><a class="anchor" href="#_deployment_of_the_application_components"></a>5.2. Deployment of the application components</h3>
<div class="sect3">
<h4 id="_deployment_of_the_frontend"><a class="anchor" href="#_deployment_of_the_frontend"></a>5.2.1. Deployment of the frontend</h4>
<div id="__asciidoctor-preview-547__" class="paragraph">
<p>TODO:</p>
</div>
</div>
<div class="sect3">
<h4 id="_deployment_of_the_backend"><a class="anchor" href="#_deployment_of_the_backend"></a>5.2.2. Deployment of the backend</h4>
<div id="__asciidoctor-preview-548__" class="paragraph">
<p>TODO:</p>
</div>
</div>
<div class="sect3">
<h4 id="_deployment_of_the_database"><a class="anchor" href="#_deployment_of_the_database"></a>5.2.3. Deployment of the database</h4>
<div id="__asciidoctor-preview-549__" class="paragraph">
<p>The component "Flyway" is used to make to distribute structural
or content related changes to the database.</p>
</div>
<div id="__asciidoctor-preview-550__" class="paragraph">
<p>The database is built out of the scripts in the directory "db/migrations". Every sql
script contains the complete db script for the contact base data database (in different versions).
The highest version number indicates the currently valid script.</p>
</div>
</div>
<div class="sect3">
<h4 id="_configuration_of_the_system"><a class="anchor" href="#_configuration_of_the_system"></a>5.2.4. Configuration of the system</h4>
<div class="sect4">
<h5 id="_db_based_configuration"><a class="anchor" href="#_db_based_configuration"></a>DB based configuration</h5>
<div id="__asciidoctor-preview-551__" class="paragraph">
<p>TODO:</p>
</div>
</div>
<div class="sect4">
<h5 id="_configuration_of_the_contact_base_data_backend"><a class="anchor" href="#_configuration_of_the_contact_base_data_backend"></a>Configuration of the contact base data backend</h5>
<div id="__asciidoctor-preview-552__" class="paragraph">
<p>The backend service is configured in the * .yaml files, which are located in the JAR file.</p>
</div>
<div id="__asciidoctor-preview-553__" class="paragraph">
<p>This yml-file can be divided into different configuration profiles.
When starting the backend-service one has the possibility to specify
the active profile</p>
</div>
<div id="__asciidoctor-preview-554__" class="ulist">
<ul>
<li id="__asciidoctor-preview-555__">
<p><strong>spring.datasource</strong> configuration section for the database connection</p>
</li>
<li id="__asciidoctor-preview-556__">
<p><strong>flyway.enabled</strong> If enabled=true then the database migrations
will automatically performed when starting the application
(this parameter should normally be set to "false"</p>
</li>
<li id="__asciidoctor-preview-557__">
<p><strong>server.max-http-header-size</strong> Maximum size for the http-headers</p>
</li>
<li id="__asciidoctor-preview-558__">
<p><strong>jwt.tokenHeader</strong> Name of the http-header which carries the authentication-token.
(should be "Authorization")</p>
</li>
<li id="__asciidoctor-preview-559__">
<p><strong>jwt.useStaticJwt</strong> If set to "true" then the backend will use <strong>jwt.staticJwt</strong>
as Authorization-token. (This won&#8217;t work for calls to other modules
like the Auth&#8217;n&#8217;Auth-Modul, because the token will be out of date)</p>
</li>
<li id="__asciidoctor-preview-560__">
<p><strong>authNAuthService.ribbon.listOfServers</strong> Here one can configure the base
url to the Auth&#8217;n&#8217;Auth-Service</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_ci_and_cd_components"><a class="anchor" href="#_ci_and_cd_components"></a>5.3. CI- and CD-Components</h3>
<div class="sect3">
<h4 id="_git_repository"><a class="anchor" href="#_git_repository"></a>5.3.1. GIT-Repository</h4>
<div id="__asciidoctor-preview-561__" class="paragraph">
<p>Backend:
<a href="https://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.contactBaseData.backend.git/" class="bare">https://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.contactBaseData.backend.git/</a></p>
</div>
<div id="__asciidoctor-preview-562__" class="paragraph">
<p>Frontend:
<a href="https://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.contactBaseData.frontend.git/" class="bare">https://git.eclipse.org/c/openk-usermodules/org.eclipse.openk-usermodules.contactBaseData.frontend.git/</a></p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_continuous_deployment"><a class="anchor" href="#_continuous_deployment"></a>5.4. Continuous deployment</h3>
<div id="__asciidoctor-preview-563__" class="paragraph">
<p>The continuous deployment is realized on two platforms:</p>
</div>
<div id="__asciidoctor-preview-564__" class="ulist">
<ul>
<li id="__asciidoctor-preview-565__">
<p>the development platform (Dev-Environment)</p>
</li>
<li id="__asciidoctor-preview-566__">
<p>the quality platform (Q-Environment)</p>
</li>
</ul>
</div>
<div id="__asciidoctor-preview-567__" class="paragraph">
<p>The automatic deployment on both of the environments is
directly linked to the branches on the GIT-repositories:</p>
</div>
<div id="__asciidoctor-preview-568__" class="olist arabic">
<ol class="arabic">
<li id="__asciidoctor-preview-569__">
<p>"SNAPSHOT" or "DEVELOP"</p>
</li>
<li id="__asciidoctor-preview-570__">
<p>"MASTER" or "TRUNC"</p>
</li>
</ol>
</div>
<div id="__asciidoctor-preview-571__" class="paragraph">
<p>The running development is exclusively made on the Snapshot-Branch. Every time
a developer checks in (pushes) code to the repository, an automatic build
starts on the hudson ci-server. If the Snapshot-build is successful, then the result
of that build is directly deployed on the Dev-environment.</p>
</div>
<div id="__asciidoctor-preview-572__" class="paragraph">
<p>At the end of a scrum sprint or when a big user story is realized, all
the code changes are merged from the <strong>Snapshot</strong>-Branch to the <strong>Trunc</strong>.
This automatically triggers the build and the deployment on the
Q-environment.</p>
</div>
<div style="page-break-after: always;"></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_design_decisions"><a class="anchor" href="#_design_decisions"></a>6. Design decisions</h2>
<div class="sectionbody">
<div id="__asciidoctor-preview-574__" class="paragraph">
<p>All architecture decisions are based on the Architecture Committee Handbook. There are no deviations.</p>
</div>
<div style="page-break-after: always;"></div>
</div>
</div>
<div class="sect1">
<h2 id="_risks_and_technical_debts"><a class="anchor" href="#_risks_and_technical_debts"></a>7. Risks and Technical Debts</h2>
<div class="sectionbody">
<div id="__asciidoctor-preview-576__" class="paragraph">
<p>(Currently there aren&#8217;t any known issues)</p>
</div>
<div style="page-break-after: always;"></div>
</div>
</div>
<div class="sect1">
<h2 id="_glossary"><a class="anchor" href="#_glossary"></a>8. Glossary</h2>
<div class="sectionbody">
<table id="__asciidoctor-preview-578__" class="tableblock frame-all grid-all stretch">
<caption class="title">Table 5. Abbreviations and glossary terms</caption>
<colgroup>
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 25%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Short</th>
<th class="tableblock halign-left valign-top">Long</th>
<th class="tableblock halign-left valign-top">German</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">AC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Architecture Committee</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Architektur-Komittee</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Gives framework and constraints according to architecture for oK projects.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">CNCU</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Central Network Control Unit</p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">DAO</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Data Access Objects</p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">DTO</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Data Transfer Object</p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">DSO</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Distribution System Operator</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Verteilnetz-betreiber (VNB)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Manages the distribution network for energy, gas or water.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EPL</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Eclipse Public License</p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Underlying license model for Eclipse projects like contact-base-data@openK</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ESB</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Enterprise Service Bus</p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Central instance to exchange data to overcome point-to-point connections.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">oK</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">openKONSEQUENZ</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">openKONSEQUENZ</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Name of the consortium of DSOs</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">QC</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Quality Committee</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Qualitätskomitee</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Gives framework and constraints according to quality for oK projects.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">SCADA</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Supervisory Control and Data Acquisition</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Netzleitsystem</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">System, that allows DSOs view/control actual parameters of their power grid.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</body>
</html>