A module-apps/notifications/README.md => module-apps/notifications/README.md +27 -0
@@ 0,0 1,27 @@
+# Home Screen Notifications
+
+## General structure
+The general structure is based on the `Model-View` pattern on the front-end, supplied with a `Provider`'s back-end notifications as follows:
+
+
+
+## Provider structure
+
+On the provider's end, `Notifications` are managed by `NotificationProvider` and sent as an `NotificationsChanged` action with `NotificationsChangedParams` via `ApplicationManger`'s `Controller`.
+
+
+
+The `NotificationProvider` is responsible for creating and managing `Notifications`. Each `Notification` represents a unique
+event and thus at most single object (of a respective type) can be stored in the provider. The provider's structure is shown on following diagram:
+
+
+
+## Model-View structure
+
+
+
+`NotificationsModel` is responsible for creating and decorating `NotificationListItem`s based on `NotificationsChangedParams` received.
+The model serves also as a local provider for `gui::ListView`.
+
+
+
A module-apps/notifications/doc/notifications_model_owner_structure.puml => module-apps/notifications/doc/notifications_model_owner_structure.puml +28 -0
@@ 0,0 1,28 @@
+@startuml
+
+skinparam linetype ortho
+skinparam nodesep 100
+
+class "NotificationsModel" as model
+class ListView
+
+node "Owner Window" as owner {
+ class AppWindow
+ class "WindowWithNotifications" as notifWindow
+
+ AppWindow <|-- notifWindow
+}
+
+ListView -[hidden]- owner
+model -[hidden]r- owner
+
+notifWindow "create"*..>ListView
+ListView "use"-u-->model
+notifWindow *-->model
+model "use"--> AppWindow
+
+
+
+
+@enduml
+
A module-apps/notifications/doc/notifications_model_owner_structure.svg => module-apps/notifications/doc/notifications_model_owner_structure.svg +40 -0
@@ 0,0 1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="355px" preserveAspectRatio="none" style="width:486px;height:355px;" version="1.1" viewBox="0 0 486 355" width="486px" zoomAndPan="magnify"><defs><filter height="300%" id="fm8vkt4h2pcdx" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--cluster owner--><polygon fill="#FFFFFF" filter="url(#fm8vkt4h2pcdx)" points="224.5,42,234.5,32,464.5,32,464.5,250,454.5,260,224.5,260,224.5,42" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="454.5" x2="463.5" y1="42" y2="33"/><line style="stroke: #000000; stroke-width: 1.5;" x1="224.5" x2="454.5" y1="42" y2="42"/><line style="stroke: #000000; stroke-width: 1.5;" x1="454.5" x2="454.5" y1="42" y2="260"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="121" x="280" y="57.9951">Owner Window</text><!--class AppWindow--><rect fill="#FEFECE" filter="url(#fm8vkt4h2pcdx)" height="48" id="AppWindow" style="stroke: #A80036; stroke-width: 1.5;" width="103" x="253" y="80"/><ellipse cx="268" cy="96" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M270.9688,101.6406 Q270.3906,101.9375 269.75,102.0781 Q269.1094,102.2344 268.4063,102.2344 Q265.9063,102.2344 264.5781,100.5938 Q263.2656,98.9375 263.2656,95.8125 Q263.2656,92.6875 264.5781,91.0313 Q265.9063,89.375 268.4063,89.375 Q269.1094,89.375 269.75,89.5313 Q270.4063,89.6875 270.9688,89.9844 L270.9688,92.7031 Q270.3438,92.125 269.75,91.8594 Q269.1563,91.5781 268.5313,91.5781 Q267.1875,91.5781 266.5,92.6563 Q265.8125,93.7188 265.8125,95.8125 Q265.8125,97.9063 266.5,98.9844 Q267.1875,100.0469 268.5313,100.0469 Q269.1563,100.0469 269.75,99.7813 Q270.3438,99.5 270.9688,98.9219 L270.9688,101.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="71" x="282" y="100.1543">AppWindow</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="254" x2="355" y1="112" y2="112"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="254" x2="355" y1="120" y2="120"/><!--class notifWindow--><rect fill="#FEFECE" filter="url(#fm8vkt4h2pcdx)" height="48" id="notifWindow" style="stroke: #A80036; stroke-width: 1.5;" width="184" x="248.5" y="188"/><ellipse cx="263.5" cy="204" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M266.4688,209.6406 Q265.8906,209.9375 265.25,210.0781 Q264.6094,210.2344 263.9063,210.2344 Q261.4063,210.2344 260.0781,208.5938 Q258.7656,206.9375 258.7656,203.8125 Q258.7656,200.6875 260.0781,199.0313 Q261.4063,197.375 263.9063,197.375 Q264.6094,197.375 265.25,197.5313 Q265.9063,197.6875 266.4688,197.9844 L266.4688,200.7031 Q265.8438,200.125 265.25,199.8594 Q264.6563,199.5781 264.0313,199.5781 Q262.6875,199.5781 262,200.6563 Q261.3125,201.7188 261.3125,203.8125 Q261.3125,205.9063 262,206.9844 Q262.6875,208.0469 264.0313,208.0469 Q264.6563,208.0469 265.25,207.7813 Q265.8438,207.5 266.4688,206.9219 L266.4688,209.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="152" x="277.5" y="208.1543">WindowWithNotifications</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="249.5" x2="431.5" y1="220" y2="220"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="249.5" x2="431.5" y1="228" y2="228"/><!--class model--><rect fill="#FEFECE" filter="url(#fm8vkt4h2pcdx)" height="48" id="model" style="stroke: #A80036; stroke-width: 1.5;" width="147" x="6" y="80"/><ellipse cx="21" cy="96" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,101.6406 Q23.3906,101.9375 22.75,102.0781 Q22.1094,102.2344 21.4063,102.2344 Q18.9063,102.2344 17.5781,100.5938 Q16.2656,98.9375 16.2656,95.8125 Q16.2656,92.6875 17.5781,91.0313 Q18.9063,89.375 21.4063,89.375 Q22.1094,89.375 22.75,89.5313 Q23.4063,89.6875 23.9688,89.9844 L23.9688,92.7031 Q23.3438,92.125 22.75,91.8594 Q22.1563,91.5781 21.5313,91.5781 Q20.1875,91.5781 19.5,92.6563 Q18.8125,93.7188 18.8125,95.8125 Q18.8125,97.9063 19.5,98.9844 Q20.1875,100.0469 21.5313,100.0469 Q22.1563,100.0469 22.75,99.7813 Q23.3438,99.5 23.9688,98.9219 L23.9688,101.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="115" x="35" y="100.1543">NotificationsModel</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="152" y1="112" y2="112"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="152" y1="120" y2="120"/><!--class ListView--><rect fill="#FEFECE" filter="url(#fm8vkt4h2pcdx)" height="48" id="ListView" style="stroke: #A80036; stroke-width: 1.5;" width="81" x="300" y="296"/><ellipse cx="315" cy="312" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M317.9688,317.6406 Q317.3906,317.9375 316.75,318.0781 Q316.1094,318.2344 315.4063,318.2344 Q312.9063,318.2344 311.5781,316.5938 Q310.2656,314.9375 310.2656,311.8125 Q310.2656,308.6875 311.5781,307.0313 Q312.9063,305.375 315.4063,305.375 Q316.1094,305.375 316.75,305.5313 Q317.4063,305.6875 317.9688,305.9844 L317.9688,308.7031 Q317.3438,308.125 316.75,307.8594 Q316.1563,307.5781 315.5313,307.5781 Q314.1875,307.5781 313.5,308.6563 Q312.8125,309.7188 312.8125,311.8125 Q312.8125,313.9063 313.5,314.9844 Q314.1875,316.0469 315.5313,316.0469 Q316.1563,316.0469 316.75,315.7813 Q317.3438,315.5 317.9688,314.9219 L317.9688,317.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="49" x="329" y="316.1543">ListView</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="301" x2="380" y1="328" y2="328"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="301" x2="380" y1="336" y2="336"/><!--link AppWindow to notifWindow--><path d="M304.5,148.24 C304.5,148.24 304.5,187.84 304.5,187.84 " fill="none" id="AppWindow-notifWindow" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="297.5,148.24,304.5,128.24,311.5,148.24,297.5,148.24" style="stroke: #A80036; stroke-width: 1.0;"/><!--link ListView to owner--><!--link model to owner--><!--link notifWindow to ListView--><path d="M340.5,249.24 C340.5,249.24 340.5,282.84 340.5,282.84 " fill="none" id="notifWindow-ListView" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="340.5,295.84,344.5,286.84,340.5,290.84,336.5,286.84,340.5,295.84" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="340.5" x2="340.5" y1="290.84" y2="282.84"/><polygon fill="#A80036" points="340.5,236.24,336.5,242.24,340.5,248.24,344.5,242.24,340.5,236.24" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="41" x="294.2469" y="284.811">create</text><!--link model to ListView--><path d="M55,133.36 C55,133.36 55,320 55,320 C55,320 221.08,320 299.9,320 " fill="none" id="model-ListView" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="55,128.36,51,137.36,55,133.36,59,137.36,55,128.36" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="268.9222" y="315.9286">use</text><!--link notifWindow to model--><path d="M235.39,212 C235.39,212 104,212 104,212 C104,212 104,141.24 104,141.24 " fill="none" id="notifWindow-model" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="104,128.24,100,137.24,104,133.24,108,137.24,104,128.24" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="104" x2="104" y1="133.24" y2="141.24"/><polygon fill="#A80036" points="248.39,212,242.39,208,236.39,212,242.39,216,248.39,212" style="stroke: #A80036; stroke-width: 1.0;"/><!--link model to AppWindow--><path d="M153.17,104 C153.17,104 247.75,104 247.75,104 " fill="none" id="model-AppWindow" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="252.75,104,243.75,100,247.75,104,243.75,108,252.75,104" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="161.0216" y="100.3816">use</text><!--
+@startuml
+
+skinparam linetype ortho
+skinparam nodesep 100
+
+class "NotificationsModel" as model
+class ListView
+
+node "Owner Window" as owner {
+ class AppWindow
+ class "WindowWithNotifications" as notifWindow
+
+ AppWindow <|- - notifWindow
+}
+
+ListView -[hidden]- owner
+model -[hidden]r- owner
+
+notifWindow "create"*..>ListView
+ListView "use"-u- ->model
+notifWindow *- ->model
+model "use"- -> AppWindow
+
+
+
+
+@enduml
+
+PlantUML version 1.2018.13(Mon Nov 26 18:11:51 CET 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.10+9-Ubuntu-0ubuntu1.20.04
+Operating System: Linux
+OS Version: 5.8.0-50-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg><
\ No newline at end of file
A module-apps/notifications/doc/notifications_model_structure.puml => module-apps/notifications/doc/notifications_model_structure.puml +38 -0
@@ 0,0 1,38 @@
+@startuml
+
+skinparam linetype ortho
+
+node "GUI Model View Porvider" {
+ class ListItem
+ class ListView
+ class InternalModel
+ class Provider
+
+ ListView "use"-l--> Provider
+ ListView "use"--> ListItem
+}
+class "NotificationsChangedParams" as params
+
+node "Notification ListItems"{
+ class "NotificationListItem" as notifLI
+ class "NotificationWithEventCounter" as notifCounter
+ class "NotificationWithOnOffButton" as notifButton
+
+ notifLI <|-- notifCounter
+ notifLI <|-- notifButton
+}
+
+node "Notifications Model"{
+ class "NotificationsModel" as model
+}
+
+model "create"*..-> notifLI
+model "use"-d--> params
+
+Provider <|-- model
+InternalModel <|-- model
+ListItem <|-- notifLI
+
+
+
+@enduml
A module-apps/notifications/doc/notifications_model_structure.svg => module-apps/notifications/doc/notifications_model_structure.svg +51 -0
@@ 0,0 1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="525px" preserveAspectRatio="none" style="width:841px;height:525px;" version="1.1" viewBox="0 0 841 525" width="841px" zoomAndPan="magnify"><defs><filter height="300%" id="f1hndcxzwl8wvq" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--cluster GUI Model View Porvider--><polygon fill="#FFFFFF" filter="url(#f1hndcxzwl8wvq)" points="185,34,195,24,569,24,569,226,559,236,185,236,185,34" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="559" x2="568" y1="34" y2="25"/><line style="stroke: #000000; stroke-width: 1.5;" x1="185" x2="559" y1="34" y2="34"/><line style="stroke: #000000; stroke-width: 1.5;" x1="559" x2="559" y1="34" y2="236"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="195" x="275.5" y="49.9951">GUI Model View Porvider</text><!--cluster Notification ListItems--><polygon fill="#FFFFFF" filter="url(#f1hndcxzwl8wvq)" points="22,311,32,301,511,301,511,503,501,513,22,513,22,311" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="501" x2="510" y1="311" y2="302"/><line style="stroke: #000000; stroke-width: 1.5;" x1="22" x2="501" y1="311" y2="311"/><line style="stroke: #000000; stroke-width: 1.5;" x1="501" x2="501" y1="311" y2="513"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="165" x="180" y="326.9951">Notification ListItems</text><!--cluster Notifications Model--><polygon fill="#FFFFFF" filter="url(#f1hndcxzwl8wvq)" points="593,142,603,132,819,132,819,226,809,236,593,236,593,142" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="809" x2="818" y1="142" y2="133"/><line style="stroke: #000000; stroke-width: 1.5;" x1="593" x2="809" y1="142" y2="142"/><line style="stroke: #000000; stroke-width: 1.5;" x1="809" x2="809" y1="142" y2="236"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="150" x="627" y="157.9951">Notifications Model</text><!--class ListItem--><rect fill="#FEFECE" filter="url(#f1hndcxzwl8wvq)" height="48" id="ListItem" style="stroke: #A80036; stroke-width: 1.5;" width="80" x="214" y="172"/><ellipse cx="229" cy="188" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M231.9688,193.6406 Q231.3906,193.9375 230.75,194.0781 Q230.1094,194.2344 229.4063,194.2344 Q226.9063,194.2344 225.5781,192.5938 Q224.2656,190.9375 224.2656,187.8125 Q224.2656,184.6875 225.5781,183.0313 Q226.9063,181.375 229.4063,181.375 Q230.1094,181.375 230.75,181.5313 Q231.4063,181.6875 231.9688,181.9844 L231.9688,184.7031 Q231.3438,184.125 230.75,183.8594 Q230.1563,183.5781 229.5313,183.5781 Q228.1875,183.5781 227.5,184.6563 Q226.8125,185.7188 226.8125,187.8125 Q226.8125,189.9063 227.5,190.9844 Q228.1875,192.0469 229.5313,192.0469 Q230.1563,192.0469 230.75,191.7813 Q231.3438,191.5 231.9688,190.9219 L231.9688,193.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="48" x="243" y="192.1543">ListItem</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="215" x2="293" y1="204" y2="204"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="215" x2="293" y1="212" y2="212"/><!--class ListView--><rect fill="#FEFECE" filter="url(#f1hndcxzwl8wvq)" height="48" id="ListView" style="stroke: #A80036; stroke-width: 1.5;" width="81" x="201.5" y="64"/><ellipse cx="216.5" cy="80" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M219.4688,85.6406 Q218.8906,85.9375 218.25,86.0781 Q217.6094,86.2344 216.9063,86.2344 Q214.4063,86.2344 213.0781,84.5938 Q211.7656,82.9375 211.7656,79.8125 Q211.7656,76.6875 213.0781,75.0313 Q214.4063,73.375 216.9063,73.375 Q217.6094,73.375 218.25,73.5313 Q218.9063,73.6875 219.4688,73.9844 L219.4688,76.7031 Q218.8438,76.125 218.25,75.8594 Q217.6563,75.5781 217.0313,75.5781 Q215.6875,75.5781 215,76.6563 Q214.3125,77.7188 214.3125,79.8125 Q214.3125,81.9063 215,82.9844 Q215.6875,84.0469 217.0313,84.0469 Q217.6563,84.0469 218.25,83.7813 Q218.8438,83.5 219.4688,82.9219 L219.4688,85.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="49" x="230.5" y="84.1543">ListView</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="202.5" x2="281.5" y1="96" y2="96"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="202.5" x2="281.5" y1="104" y2="104"/><!--class InternalModel--><rect fill="#FEFECE" filter="url(#f1hndcxzwl8wvq)" height="48" id="InternalModel" style="stroke: #A80036; stroke-width: 1.5;" width="117" x="435.5" y="64"/><ellipse cx="450.5" cy="80" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M453.4688,85.6406 Q452.8906,85.9375 452.25,86.0781 Q451.6094,86.2344 450.9063,86.2344 Q448.4063,86.2344 447.0781,84.5938 Q445.7656,82.9375 445.7656,79.8125 Q445.7656,76.6875 447.0781,75.0313 Q448.4063,73.375 450.9063,73.375 Q451.6094,73.375 452.25,73.5313 Q452.9063,73.6875 453.4688,73.9844 L453.4688,76.7031 Q452.8438,76.125 452.25,75.8594 Q451.6563,75.5781 451.0313,75.5781 Q449.6875,75.5781 449,76.6563 Q448.3125,77.7188 448.3125,79.8125 Q448.3125,81.9063 449,82.9844 Q449.6875,84.0469 451.0313,84.0469 Q451.6563,84.0469 452.25,83.7813 Q452.8438,83.5 453.4688,82.9219 L453.4688,85.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="85" x="464.5" y="84.1543">InternalModel</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="436.5" x2="551.5" y1="96" y2="96"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="436.5" x2="551.5" y1="104" y2="104"/><!--class Provider--><rect fill="#FEFECE" filter="url(#f1hndcxzwl8wvq)" height="48" id="Provider" style="stroke: #A80036; stroke-width: 1.5;" width="83" x="317.5" y="64"/><ellipse cx="332.5" cy="80" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M335.4688,85.6406 Q334.8906,85.9375 334.25,86.0781 Q333.6094,86.2344 332.9063,86.2344 Q330.4063,86.2344 329.0781,84.5938 Q327.7656,82.9375 327.7656,79.8125 Q327.7656,76.6875 329.0781,75.0313 Q330.4063,73.375 332.9063,73.375 Q333.6094,73.375 334.25,73.5313 Q334.9063,73.6875 335.4688,73.9844 L335.4688,76.7031 Q334.8438,76.125 334.25,75.8594 Q333.6563,75.5781 333.0313,75.5781 Q331.6875,75.5781 331,76.6563 Q330.3125,77.7188 330.3125,79.8125 Q330.3125,81.9063 331,82.9844 Q331.6875,84.0469 333.0313,84.0469 Q333.6563,84.0469 334.25,83.7813 Q334.8438,83.5 335.4688,82.9219 L335.4688,85.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="51" x="346.5" y="84.1543">Provider</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="318.5" x2="399.5" y1="96" y2="96"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="318.5" x2="399.5" y1="104" y2="104"/><!--class notifLI--><rect fill="#FEFECE" filter="url(#f1hndcxzwl8wvq)" height="48" id="notifLI" style="stroke: #A80036; stroke-width: 1.5;" width="151" x="303.5" y="341"/><ellipse cx="318.5" cy="357" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M321.4688,362.6406 Q320.8906,362.9375 320.25,363.0781 Q319.6094,363.2344 318.9063,363.2344 Q316.4063,363.2344 315.0781,361.5938 Q313.7656,359.9375 313.7656,356.8125 Q313.7656,353.6875 315.0781,352.0313 Q316.4063,350.375 318.9063,350.375 Q319.6094,350.375 320.25,350.5313 Q320.9063,350.6875 321.4688,350.9844 L321.4688,353.7031 Q320.8438,353.125 320.25,352.8594 Q319.6563,352.5781 319.0313,352.5781 Q317.6875,352.5781 317,353.6563 Q316.3125,354.7188 316.3125,356.8125 Q316.3125,358.9063 317,359.9844 Q317.6875,361.0469 319.0313,361.0469 Q319.6563,361.0469 320.25,360.7813 Q320.8438,360.5 321.4688,359.9219 L321.4688,362.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="119" x="332.5" y="361.1543">NotificationListItem</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="304.5" x2="453.5" y1="373" y2="373"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="304.5" x2="453.5" y1="381" y2="381"/><!--class notifCounter--><rect fill="#FEFECE" filter="url(#f1hndcxzwl8wvq)" height="48" id="notifCounter" style="stroke: #A80036; stroke-width: 1.5;" width="215" x="38.5" y="449"/><ellipse cx="53.5" cy="465" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.4688,470.6406 Q55.8906,470.9375 55.25,471.0781 Q54.6094,471.2344 53.9063,471.2344 Q51.4063,471.2344 50.0781,469.5938 Q48.7656,467.9375 48.7656,464.8125 Q48.7656,461.6875 50.0781,460.0313 Q51.4063,458.375 53.9063,458.375 Q54.6094,458.375 55.25,458.5313 Q55.9063,458.6875 56.4688,458.9844 L56.4688,461.7031 Q55.8438,461.125 55.25,460.8594 Q54.6563,460.5781 54.0313,460.5781 Q52.6875,460.5781 52,461.6563 Q51.3125,462.7188 51.3125,464.8125 Q51.3125,466.9063 52,467.9844 Q52.6875,469.0469 54.0313,469.0469 Q54.6563,469.0469 55.25,468.7813 Q55.8438,468.5 56.4688,467.9219 L56.4688,470.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="183" x="67.5" y="469.1543">NotificationWithEventCounter</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="252.5" y1="481" y2="481"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="252.5" y1="489" y2="489"/><!--class notifButton--><rect fill="#FEFECE" filter="url(#f1hndcxzwl8wvq)" height="48" id="notifButton" style="stroke: #A80036; stroke-width: 1.5;" width="206" x="289" y="449"/><ellipse cx="304" cy="465" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M306.9688,470.6406 Q306.3906,470.9375 305.75,471.0781 Q305.1094,471.2344 304.4063,471.2344 Q301.9063,471.2344 300.5781,469.5938 Q299.2656,467.9375 299.2656,464.8125 Q299.2656,461.6875 300.5781,460.0313 Q301.9063,458.375 304.4063,458.375 Q305.1094,458.375 305.75,458.5313 Q306.4063,458.6875 306.9688,458.9844 L306.9688,461.7031 Q306.3438,461.125 305.75,460.8594 Q305.1563,460.5781 304.5313,460.5781 Q303.1875,460.5781 302.5,461.6563 Q301.8125,462.7188 301.8125,464.8125 Q301.8125,466.9063 302.5,467.9844 Q303.1875,469.0469 304.5313,469.0469 Q305.1563,469.0469 305.75,468.7813 Q306.3438,468.5 306.9688,467.9219 L306.9688,470.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="174" x="318" y="469.1543">NotificationWithOnOffButton</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="290" x2="494" y1="481" y2="481"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="290" x2="494" y1="489" y2="489"/><!--class model--><rect fill="#FEFECE" filter="url(#f1hndcxzwl8wvq)" height="48" id="model" style="stroke: #A80036; stroke-width: 1.5;" width="147" x="609.5" y="172"/><ellipse cx="624.5" cy="188" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M627.4688,193.6406 Q626.8906,193.9375 626.25,194.0781 Q625.6094,194.2344 624.9063,194.2344 Q622.4063,194.2344 621.0781,192.5938 Q619.7656,190.9375 619.7656,187.8125 Q619.7656,184.6875 621.0781,183.0313 Q622.4063,181.375 624.9063,181.375 Q625.6094,181.375 626.25,181.5313 Q626.9063,181.6875 627.4688,181.9844 L627.4688,184.7031 Q626.8438,184.125 626.25,183.8594 Q625.6563,183.5781 625.0313,183.5781 Q623.6875,183.5781 623,184.6563 Q622.3125,185.7188 622.3125,187.8125 Q622.3125,189.9063 623,190.9844 Q623.6875,192.0469 625.0313,192.0469 Q625.6563,192.0469 626.25,191.7813 Q626.8438,191.5 627.4688,190.9219 L627.4688,193.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="115" x="638.5" y="192.1543">NotificationsModel</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="610.5" x2="755.5" y1="204" y2="204"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="610.5" x2="755.5" y1="212" y2="212"/><!--class params--><rect fill="#FEFECE" filter="url(#f1hndcxzwl8wvq)" height="48" id="params" style="stroke: #A80036; stroke-width: 1.5;" width="213" x="576.5" y="341"/><ellipse cx="591.5" cy="357" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M594.4688,362.6406 Q593.8906,362.9375 593.25,363.0781 Q592.6094,363.2344 591.9063,363.2344 Q589.4063,363.2344 588.0781,361.5938 Q586.7656,359.9375 586.7656,356.8125 Q586.7656,353.6875 588.0781,352.0313 Q589.4063,350.375 591.9063,350.375 Q592.6094,350.375 593.25,350.5313 Q593.9063,350.6875 594.4688,350.9844 L594.4688,353.7031 Q593.8438,353.125 593.25,352.8594 Q592.6563,352.5781 592.0313,352.5781 Q590.6875,352.5781 590,353.6563 Q589.3125,354.7188 589.3125,356.8125 Q589.3125,358.9063 590,359.9844 Q590.6875,361.0469 592.0313,361.0469 Q592.6563,361.0469 593.25,360.7813 Q593.8438,360.5 594.4688,359.9219 L594.4688,362.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="181" x="605.5" y="361.1543">NotificationsChangedParams</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="577.5" x2="788.5" y1="373" y2="373"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="577.5" x2="788.5" y1="381" y2="381"/><!--link Provider to ListView--><path d="M312.42,88 C312.42,88 282.66,88 282.66,88 " fill="none" id="Provider-ListView" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="317.42,88,308.42,84,312.42,88,308.42,92,317.42,88" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="286.4719" y="83.2991">use</text><!--link ListView to ListItem--><path d="M248.25,112.24 C248.25,112.24 248.25,166.84 248.25,166.84 " fill="none" id="ListView-ListItem" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="248.25,171.84,252.25,162.84,248.25,166.84,244.25,162.84,248.25,171.84" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="223.9703" y="132.0597">use</text><!--link notifLI to notifCounter--><path d="M283.4,365 C283.4,365 233.75,365 233.75,365 C233.75,365 233.75,416.92 233.75,448.76 " fill="none" id="notifLI-notifCounter" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="283.4,358,303.4,365,283.4,372,283.4,358" style="stroke: #A80036; stroke-width: 1.0;"/><!--link notifLI to notifButton--><path d="M379,409.24 C379,409.24 379,448.84 379,448.84 " fill="none" id="notifLI-notifButton" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="372,409.24,379,389.24,386,409.24,372,409.24" style="stroke: #A80036; stroke-width: 1.0;"/><!--link model to notifLI--><path d="M596.33,201 C596.33,201 445,201 445,201 C445,201 445,327.8 445,327.8 " fill="none" id="model-notifLI" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="445,340.8,449,331.8,445,335.8,441,331.8,445,340.8" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="445" x2="445" y1="335.8" y2="327.8"/><polygon fill="#A80036" points="609.33,201,603.33,197,597.33,201,603.33,205,609.33,201" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="41" x="560.5315" y="197.8654">create</text><!--link model to params--><path d="M683,220.21 C683,220.21 683,335.83 683,335.83 " fill="none" id="model-params" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="683,340.83,687,331.83,683,335.83,679,331.83,683,340.83" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="657.1969" y="240.0224">use</text><!--link Provider to model--><path d="M359,132.12 C359,132.12 359,192 359,192 C359,192 513.89,192 609.48,192 " fill="none" id="Provider-model" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="352,132.12,359,112.12,366,132.12,352,132.12" style="stroke: #A80036; stroke-width: 1.0;"/><!--link InternalModel to model--><path d="M523.75,132.21 C523.75,132.21 523.75,182 523.75,182 C523.75,182 567.71,182 609.43,182 " fill="none" id="InternalModel-model" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="516.75,132.21,523.75,112.21,530.75,132.21,516.75,132.21" style="stroke: #A80036; stroke-width: 1.0;"/><!--link ListItem to notifLI--><path d="M308.87,211 C308.87,211 310.5,211 310.5,211 C310.5,211 310.5,297.62 310.5,340.94 " fill="none" id="ListItem-notifLI" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="314.16,218,294.16,211,314.16,204,314.16,218" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+
+skinparam linetype ortho
+
+node "GUI Model View Porvider" {
+ class ListItem
+ class ListView
+ class InternalModel
+ class Provider
+
+ ListView "use"-l- -> Provider
+ ListView "use"- -> ListItem
+}
+class "NotificationsChangedParams" as params
+
+node "Notification ListItems"{
+ class "NotificationListItem" as notifLI
+ class "NotificationWithEventCounter" as notifCounter
+ class "NotificationWithOnOffButton" as notifButton
+
+ notifLI <|- - notifCounter
+ notifLI <|- - notifButton
+}
+
+node "Notifications Model"{
+ class "NotificationsModel" as model
+}
+
+model "create"*..-> notifLI
+model "use"-d- -> params
+
+Provider <|- - model
+InternalModel <|- - model
+ListItem <|- - notifLI
+
+
+
+@enduml
+
+PlantUML version 1.2018.13(Mon Nov 26 18:11:51 CET 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.10+9-Ubuntu-0ubuntu1.20.04
+Operating System: Linux
+OS Version: 5.8.0-50-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg><
\ No newline at end of file
A module-apps/notifications/doc/notifications_mvp_general_overview.puml => module-apps/notifications/doc/notifications_mvp_general_overview.puml +39 -0
@@ 0,0 1,39 @@
+@startuml
+skinparam linetype ortho
+
+node "Provider" as provider {
+ class "NotificationProvider" as notProvider
+}
+node "Model" as model{
+ class "NotificationsModel" as notModel{
+ {method} update(NotificationsChangedParams *)
+ }
+ interface "gui::Provider" as guiProv
+}
+node View {
+ class ListView
+}
+class "NotificationListItem" as item
+class "NotificationsChangedParams" as params
+interface "APM Controller" as system {
+ {method} sendAction(...)
+}
+
+notProvider "use"--> params
+notModel "use"-->params
+notModel "use"-->item
+ListView "use"-->item
+
+guiProv <|-r-- notModel
+ListView "use"-->guiProv
+guiProv "use"-->ListView
+
+
+notProvider "use"-d-->system
+system "use"--> notModel
+
+model -[hidden]r- View
+model -[hidden]d- notProvider
+
+
+@enduml
A module-apps/notifications/doc/notifications_mvp_general_overview.svg => module-apps/notifications/doc/notifications_mvp_general_overview.svg +52 -0
@@ 0,0 1,52 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="380px" preserveAspectRatio="none" style="width:903px;height:380px;" version="1.1" viewBox="0 0 903 380" width="903px" zoomAndPan="magnify"><defs><filter height="300%" id="f1906w084e1job" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--cluster provider--><polygon fill="#FFFFFF" filter="url(#f1906w084e1job)" points="695,56.5,705,46.5,881,46.5,881,140.5,871,150.5,695,150.5,695,56.5" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="871" x2="880" y1="56.5" y2="47.5"/><line style="stroke: #000000; stroke-width: 1.5;" x1="695" x2="871" y1="56.5" y2="56.5"/><line style="stroke: #000000; stroke-width: 1.5;" x1="871" x2="871" y1="56.5" y2="150.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="67" x="750.5" y="72.4951">Provider</text><!--cluster model--><polygon fill="#FFFFFF" filter="url(#f1906w084e1job)" points="219,42,229,32,663,32,663,155,653,165,219,165,219,42" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="653" x2="662" y1="42" y2="33"/><line style="stroke: #000000; stroke-width: 1.5;" x1="219" x2="653" y1="42" y2="42"/><line style="stroke: #000000; stroke-width: 1.5;" x1="653" x2="653" y1="42" y2="165"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="47" x="413.5" y="57.9951">Model</text><!--cluster View--><polygon fill="#FFFFFF" filter="url(#f1906w084e1job)" points="30,48.5,40,38.5,179,38.5,179,148.5,169,158.5,30,158.5,30,48.5" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="169" x2="178" y1="48.5" y2="39.5"/><line style="stroke: #000000; stroke-width: 1.5;" x1="30" x2="169" y1="48.5" y2="48.5"/><line style="stroke: #000000; stroke-width: 1.5;" x1="169" x2="169" y1="48.5" y2="158.5"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="39" x="81" y="64.4951">View</text><!--class notProvider--><rect fill="#FEFECE" filter="url(#f1906w084e1job)" height="48" id="notProvider" style="stroke: #A80036; stroke-width: 1.5;" width="154" x="711" y="86.5"/><ellipse cx="726" cy="102.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M728.9688,108.1406 Q728.3906,108.4375 727.75,108.5781 Q727.1094,108.7344 726.4063,108.7344 Q723.9063,108.7344 722.5781,107.0938 Q721.2656,105.4375 721.2656,102.3125 Q721.2656,99.1875 722.5781,97.5313 Q723.9063,95.875 726.4063,95.875 Q727.1094,95.875 727.75,96.0313 Q728.4063,96.1875 728.9688,96.4844 L728.9688,99.2031 Q728.3438,98.625 727.75,98.3594 Q727.1563,98.0781 726.5313,98.0781 Q725.1875,98.0781 724.5,99.1563 Q723.8125,100.2188 723.8125,102.3125 Q723.8125,104.4063 724.5,105.4844 Q725.1875,106.5469 726.5313,106.5469 Q727.1563,106.5469 727.75,106.2813 Q728.3438,106 728.9688,105.4219 L728.9688,108.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="122" x="740" y="106.6543">NotificationProvider</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="712" x2="864" y1="118.5" y2="118.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="712" x2="864" y1="126.5" y2="126.5"/><!--class notModel--><rect fill="#FEFECE" filter="url(#f1906w084e1job)" height="60.8047" id="notModel" style="stroke: #A80036; stroke-width: 1.5;" width="233" x="406.5" y="80"/><ellipse cx="461.25" cy="96" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M464.2188,101.6406 Q463.6406,101.9375 463,102.0781 Q462.3594,102.2344 461.6563,102.2344 Q459.1563,102.2344 457.8281,100.5938 Q456.5156,98.9375 456.5156,95.8125 Q456.5156,92.6875 457.8281,91.0313 Q459.1563,89.375 461.6563,89.375 Q462.3594,89.375 463,89.5313 Q463.6563,89.6875 464.2188,89.9844 L464.2188,92.7031 Q463.5938,92.125 463,91.8594 Q462.4063,91.5781 461.7813,91.5781 Q460.4375,91.5781 459.75,92.6563 Q459.0625,93.7188 459.0625,95.8125 Q459.0625,97.9063 459.75,98.9844 Q460.4375,100.0469 461.7813,100.0469 Q462.4063,100.0469 463,99.7813 Q463.5938,99.5 464.2188,98.9219 L464.2188,101.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="115" x="481.75" y="100.1543">NotificationsModel</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="407.5" x2="638.5" y1="112" y2="112"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="407.5" x2="638.5" y1="120" y2="120"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="221" x="412.5" y="134.2104">update(NotificationsChangedParams *)</text><!--class guiProv--><rect fill="#FEFECE" filter="url(#f1906w084e1job)" height="48" id="guiProv" style="stroke: #A80036; stroke-width: 1.5;" width="109" x="262.5" y="86.5"/><ellipse cx="277.5" cy="102.5" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M273.4219,98.2656 L273.4219,96.1094 L280.8125,96.1094 L280.8125,98.2656 L278.3438,98.2656 L278.3438,106.3438 L280.8125,106.3438 L280.8125,108.5 L273.4219,108.5 L273.4219,106.3438 L275.8906,106.3438 L275.8906,98.2656 L273.4219,98.2656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="77" x="291.5" y="106.6543">gui::Provider</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="263.5" x2="370.5" y1="118.5" y2="118.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="263.5" x2="370.5" y1="126.5" y2="126.5"/><!--class ListView--><rect fill="#FEFECE" filter="url(#f1906w084e1job)" height="48" id="ListView" style="stroke: #A80036; stroke-width: 1.5;" width="81" x="73.5" y="86.5"/><ellipse cx="88.5" cy="102.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M91.4688,108.1406 Q90.8906,108.4375 90.25,108.5781 Q89.6094,108.7344 88.9063,108.7344 Q86.4063,108.7344 85.0781,107.0938 Q83.7656,105.4375 83.7656,102.3125 Q83.7656,99.1875 85.0781,97.5313 Q86.4063,95.875 88.9063,95.875 Q89.6094,95.875 90.25,96.0313 Q90.9063,96.1875 91.4688,96.4844 L91.4688,99.2031 Q90.8438,98.625 90.25,98.3594 Q89.6563,98.0781 89.0313,98.0781 Q87.6875,98.0781 87,99.1563 Q86.3125,100.2188 86.3125,102.3125 Q86.3125,104.4063 87,105.4844 Q87.6875,106.5469 89.0313,106.5469 Q89.6563,106.5469 90.25,106.2813 Q90.8438,106 91.4688,105.4219 L91.4688,108.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="49" x="102.5" y="106.6543">ListView</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="74.5" x2="153.5" y1="118.5" y2="118.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="74.5" x2="153.5" y1="126.5" y2="126.5"/><!--class item--><rect fill="#FEFECE" filter="url(#f1906w084e1job)" height="48" id="item" style="stroke: #A80036; stroke-width: 1.5;" width="151" x="178.5" y="201"/><ellipse cx="193.5" cy="217" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M196.4688,222.6406 Q195.8906,222.9375 195.25,223.0781 Q194.6094,223.2344 193.9063,223.2344 Q191.4063,223.2344 190.0781,221.5938 Q188.7656,219.9375 188.7656,216.8125 Q188.7656,213.6875 190.0781,212.0313 Q191.4063,210.375 193.9063,210.375 Q194.6094,210.375 195.25,210.5313 Q195.9063,210.6875 196.4688,210.9844 L196.4688,213.7031 Q195.8438,213.125 195.25,212.8594 Q194.6563,212.5781 194.0313,212.5781 Q192.6875,212.5781 192,213.6563 Q191.3125,214.7188 191.3125,216.8125 Q191.3125,218.9063 192,219.9844 Q192.6875,221.0469 194.0313,221.0469 Q194.6563,221.0469 195.25,220.7813 Q195.8438,220.5 196.4688,219.9219 L196.4688,222.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="119" x="207.5" y="221.1543">NotificationListItem</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="179.5" x2="328.5" y1="233" y2="233"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="179.5" x2="328.5" y1="241" y2="241"/><!--class params--><rect fill="#FEFECE" filter="url(#f1906w084e1job)" height="48" id="params" style="stroke: #A80036; stroke-width: 1.5;" width="213" x="548.5" y="201"/><ellipse cx="563.5" cy="217" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M566.4688,222.6406 Q565.8906,222.9375 565.25,223.0781 Q564.6094,223.2344 563.9063,223.2344 Q561.4063,223.2344 560.0781,221.5938 Q558.7656,219.9375 558.7656,216.8125 Q558.7656,213.6875 560.0781,212.0313 Q561.4063,210.375 563.9063,210.375 Q564.6094,210.375 565.25,210.5313 Q565.9063,210.6875 566.4688,210.9844 L566.4688,213.7031 Q565.8438,213.125 565.25,212.8594 Q564.6563,212.5781 564.0313,212.5781 Q562.6875,212.5781 562,213.6563 Q561.3125,214.7188 561.3125,216.8125 Q561.3125,218.9063 562,219.9844 Q562.6875,221.0469 564.0313,221.0469 Q564.6563,221.0469 565.25,220.7813 Q565.8438,220.5 566.4688,219.9219 L566.4688,222.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="181" x="577.5" y="221.1543">NotificationsChangedParams</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="549.5" x2="760.5" y1="233" y2="233"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="549.5" x2="760.5" y1="241" y2="241"/><!--class system--><rect fill="#FEFECE" filter="url(#f1906w084e1job)" height="60.8047" id="system" style="stroke: #A80036; stroke-width: 1.5;" width="122" x="594" y="309"/><ellipse cx="609" cy="325" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M604.9219,320.7656 L604.9219,318.6094 L612.3125,318.6094 L612.3125,320.7656 L609.8438,320.7656 L609.8438,328.8438 L612.3125,328.8438 L612.3125,331 L604.9219,331 L604.9219,328.8438 L607.3906,328.8438 L607.3906,320.7656 L604.9219,320.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="90" x="623" y="329.1543">APM Controller</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="595" x2="715" y1="341" y2="341"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="595" x2="715" y1="349" y2="349"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="82" x="600" y="363.2104">sendAction(...)</text><!--link notProvider to params--><path d="M744.67,134.5 C744.67,134.5 744.67,195.63 744.67,195.63 " fill="none" id="notProvider-params" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="744.67,200.63,748.67,191.63,744.67,195.63,740.67,191.63,744.67,200.63" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="707.6198" y="154.6558">use</text><!--link notModel to params--><path d="M594,141.18 C594,141.18 594,195.76 594,195.76 " fill="none" id="notModel-params" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="594,200.76,598,191.76,594,195.76,590,191.76,594,200.76" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="582.7141" y="160.7959">use</text><!--link notModel to item--><path d="M453.83,141.18 C453.83,175.1 453.83,225 453.83,225 C453.83,225 334.55,225 334.55,225 " fill="none" id="notModel-item" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="329.55,225,338.55,229,334.55,225,338.55,221,329.55,225" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="414.9481" y="160.7959">use</text><!--link ListView to item--><path d="M154.51,129 C177.71,129 202.25,129 202.25,129 C202.25,129 202.25,195.78 202.25,195.78 " fill="none" id="ListView-item" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="202.25,200.78,206.25,191.78,202.25,195.78,198.25,191.78,202.25,200.78" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="162.474" y="145.0583">use</text><!--link guiProv to notModel--><path d="M391.66,111 C391.66,111 406.31,111 406.31,111 " fill="none" id="guiProv-notModel" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="391.66,118,371.66,111,391.66,104,391.66,118" style="stroke: #A80036; stroke-width: 1.0;"/><!--link ListView to guiProv--><path d="M154.59,123 C154.59,123 257.25,123 257.25,123 " fill="none" id="ListView-guiProv" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="262.25,123,253.25,119,257.25,123,253.25,127,262.25,123" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="162.5663" y="120.8427">use</text><!--link guiProv to ListView--><path d="M262.33,118 C262.33,118 159.59,118 159.59,118 " fill="none" id="guiProv-ListView" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="154.59,118,163.59,122,159.59,118,163.59,114,154.59,118" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="231.6791" y="115.0746">use</text><!--link notProvider to system--><path d="M813.25,134.63 C813.25,193.55 813.25,340 813.25,340 C813.25,340 721.18,340 721.18,340 " fill="none" id="notProvider-system" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="716.18,340,725.18,344,721.18,340,725.18,336,716.18,340" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="793.6016" y="154.4229">use</text><!--link system to notModel--><path d="M593.76,340 C550.86,340 501.17,340 501.17,340 C501.17,340 501.17,146.45 501.17,146.45 " fill="none" id="system-notModel" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="501.17,141.45,497.17,150.45,501.17,146.45,505.17,150.45,501.17,141.45" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="562.8041" y="336.3192">use</text><!--link model to View--><!--link model to notProvider--><!--
+@startuml
+skinparam linetype ortho
+
+node "Provider" as provider {
+ class "NotificationProvider" as notProvider
+}
+node "Model" as model{
+ class "NotificationsModel" as notModel{
+ {method} update(NotificationsChangedParams *)
+ }
+ interface "gui::Provider" as guiProv
+}
+node View {
+ class ListView
+}
+class "NotificationListItem" as item
+class "NotificationsChangedParams" as params
+interface "APM Controller" as system {
+ {method} sendAction(...)
+}
+
+notProvider "use"- -> params
+notModel "use"- ->params
+notModel "use"- ->item
+ListView "use"- ->item
+
+guiProv <|-r- - notModel
+ListView "use"- ->guiProv
+guiProv "use"- ->ListView
+
+
+notProvider "use"-d- ->system
+system "use"- -> notModel
+
+model -[hidden]r- View
+model -[hidden]d- notProvider
+
+
+@enduml
+
+PlantUML version 1.2018.13(Mon Nov 26 18:11:51 CET 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.10+9-Ubuntu-0ubuntu1.20.04
+Operating System: Linux
+OS Version: 5.8.0-50-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg><
\ No newline at end of file
A module-apps/notifications/doc/notifications_provider_owner_structure.puml => module-apps/notifications/doc/notifications_provider_owner_structure.puml +35 -0
@@ 0,0 1,35 @@
+@startuml
+ skinparam linetype ortho
+node "OwnerService" as owner{
+ class "ApplicationManager" as apm
+ class "APMController" as controller{
+ {method} sendAction(...)
+ }
+ abstract "sys::Service" as serv
+ serv <|-u-- apm
+ controller "use"-d--> apm
+}
+
+class "ActionsParams" as params
+
+node "Provider" as provider {
+ class "NotificationProvider" as notProvider {
+ {field} ownerService *
+ {method} handle(...)
+ {method} send()
+ {method} requestNotSeenNotifications()
+ }
+ class "NotificationsChangedParams" as notifParams
+ notProvider -l..>notifParams
+}
+
+provider -[hidden]d- owner
+
+notProvider "use"--> serv
+notProvider "use"--> controller
+params "use"<-- controller
+notifParams --|>params
+apm "creates"..>notProvider
+
+
+@enduml
A module-apps/notifications/doc/notifications_provider_owner_structure.svg => module-apps/notifications/doc/notifications_provider_owner_structure.svg +48 -0
@@ 0,0 1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="726px" preserveAspectRatio="none" style="width:678px;height:726px;" version="1.1" viewBox="0 0 678 726" width="678px" zoomAndPan="magnify"><defs><filter height="300%" id="fi6x1c1zfugla" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--cluster owner--><polygon fill="#FFFFFF" filter="url(#fi6x1c1zfugla)" points="213.5,253,223.5,243,425.5,243,425.5,704,415.5,714,213.5,714,213.5,253" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="415.5" x2="424.5" y1="253" y2="244"/><line style="stroke: #000000; stroke-width: 1.5;" x1="213.5" x2="415.5" y1="253" y2="253"/><line style="stroke: #000000; stroke-width: 1.5;" x1="415.5" x2="415.5" y1="253" y2="714"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="259.5" y="268.9951">OwnerService</text><!--cluster provider--><polygon fill="#FFFFFF" filter="url(#fi6x1c1zfugla)" points="158.5,42,168.5,32,656.5,32,656.5,193,646.5,203,158.5,203,158.5,42" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="646.5" x2="655.5" y1="42" y2="33"/><line style="stroke: #000000; stroke-width: 1.5;" x1="158.5" x2="646.5" y1="42" y2="42"/><line style="stroke: #000000; stroke-width: 1.5;" x1="646.5" x2="646.5" y1="42" y2="203"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="67" x="370" y="57.9951">Provider</text><!--class apm--><rect fill="#FEFECE" filter="url(#fi6x1c1zfugla)" height="48" id="apm" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="237.5" y="473"/><ellipse cx="252.5" cy="489" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M255.4688,494.6406 Q254.8906,494.9375 254.25,495.0781 Q253.6094,495.2344 252.9063,495.2344 Q250.4063,495.2344 249.0781,493.5938 Q247.7656,491.9375 247.7656,488.8125 Q247.7656,485.6875 249.0781,484.0313 Q250.4063,482.375 252.9063,482.375 Q253.6094,482.375 254.25,482.5313 Q254.9063,482.6875 255.4688,482.9844 L255.4688,485.7031 Q254.8438,485.125 254.25,484.8594 Q253.6563,484.5781 253.0313,484.5781 Q251.6875,484.5781 251,485.6563 Q250.3125,486.7188 250.3125,488.8125 Q250.3125,490.9063 251,491.9844 Q251.6875,493.0469 253.0313,493.0469 Q253.6563,493.0469 254.25,492.7813 Q254.8438,492.5 255.4688,491.9219 L255.4688,494.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="124" x="266.5" y="493.1543">ApplicationManager</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="238.5" x2="392.5" y1="505" y2="505"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="238.5" x2="392.5" y1="513" y2="513"/><!--class controller--><rect fill="#FEFECE" filter="url(#fi6x1c1zfugla)" height="60.8047" id="controller" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="256" y="291"/><ellipse cx="271" cy="307" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M273.9688,312.6406 Q273.3906,312.9375 272.75,313.0781 Q272.1094,313.2344 271.4063,313.2344 Q268.9063,313.2344 267.5781,311.5938 Q266.2656,309.9375 266.2656,306.8125 Q266.2656,303.6875 267.5781,302.0313 Q268.9063,300.375 271.4063,300.375 Q272.1094,300.375 272.75,300.5313 Q273.4063,300.6875 273.9688,300.9844 L273.9688,303.7031 Q273.3438,303.125 272.75,302.8594 Q272.1563,302.5781 271.5313,302.5781 Q270.1875,302.5781 269.5,303.6563 Q268.8125,304.7188 268.8125,306.8125 Q268.8125,308.9063 269.5,309.9844 Q270.1875,311.0469 271.5313,311.0469 Q272.1563,311.0469 272.75,310.7813 Q273.3438,310.5 273.9688,309.9219 L273.9688,312.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="285" y="311.1543">APMController</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="257" x2="374" y1="323" y2="323"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="257" x2="374" y1="331" y2="331"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="82" x="262" y="345.2104">sendAction(...)</text><!--class serv--><rect fill="#FEFECE" filter="url(#fi6x1c1zfugla)" height="48" id="serv" style="stroke: #A80036; stroke-width: 1.5;" width="104" x="282.5" y="642"/><ellipse cx="297.5" cy="658" fill="#A9DCDF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M297.6094,653.3438 L296.4531,658.4219 L298.7813,658.4219 L297.6094,653.3438 Z M296.125,651.1094 L299.1094,651.1094 L302.4688,663.5 L300.0156,663.5 L299.25,660.4375 L295.9688,660.4375 L295.2188,663.5 L292.7813,663.5 L296.125,651.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="72" x="311.5" y="662.1543">sys::Service</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="283.5" x2="385.5" y1="674" y2="674"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="283.5" x2="385.5" y1="682" y2="682"/><!--class notProvider--><rect fill="#FEFECE" filter="url(#fi6x1c1zfugla)" height="99.2188" id="notProvider" style="stroke: #A80036; stroke-width: 1.5;" width="182" x="450.5" y="80"/><ellipse cx="478.1" cy="96" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M481.0688,101.6406 Q480.4906,101.9375 479.85,102.0781 Q479.2094,102.2344 478.5063,102.2344 Q476.0063,102.2344 474.6781,100.5938 Q473.3656,98.9375 473.3656,95.8125 Q473.3656,92.6875 474.6781,91.0313 Q476.0063,89.375 478.5063,89.375 Q479.2094,89.375 479.85,89.5313 Q480.5063,89.6875 481.0688,89.9844 L481.0688,92.7031 Q480.4438,92.125 479.85,91.8594 Q479.2563,91.5781 478.6313,91.5781 Q477.2875,91.5781 476.6,92.6563 Q475.9125,93.7188 475.9125,95.8125 Q475.9125,97.9063 476.6,98.9844 Q477.2875,100.0469 478.6313,100.0469 Q479.2563,100.0469 479.85,99.7813 Q480.4438,99.5 481.0688,98.9219 L481.0688,101.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="122" x="494.9" y="100.1543">NotificationProvider</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="451.5" x2="631.5" y1="112" y2="112"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="456.5" y="126.2104">ownerService *</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="451.5" x2="631.5" y1="132.8047" y2="132.8047"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="58" x="456.5" y="147.0151">handle(...)</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="36" x="456.5" y="159.8198">send()</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="170" x="456.5" y="172.6245">requestNotSeenNotifications()</text><!--class notifParams--><rect fill="#FEFECE" filter="url(#fi6x1c1zfugla)" height="48" id="notifParams" style="stroke: #A80036; stroke-width: 1.5;" width="213" x="202" y="105.5"/><ellipse cx="217" cy="121.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M219.9688,127.1406 Q219.3906,127.4375 218.75,127.5781 Q218.1094,127.7344 217.4063,127.7344 Q214.9063,127.7344 213.5781,126.0938 Q212.2656,124.4375 212.2656,121.3125 Q212.2656,118.1875 213.5781,116.5313 Q214.9063,114.875 217.4063,114.875 Q218.1094,114.875 218.75,115.0313 Q219.4063,115.1875 219.9688,115.4844 L219.9688,118.2031 Q219.3438,117.625 218.75,117.3594 Q218.1563,117.0781 217.5313,117.0781 Q216.1875,117.0781 215.5,118.1563 Q214.8125,119.2188 214.8125,121.3125 Q214.8125,123.4063 215.5,124.4844 Q216.1875,125.5469 217.5313,125.5469 Q218.1563,125.5469 218.75,125.2813 Q219.3438,125 219.9688,124.4219 L219.9688,127.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="181" x="231" y="125.6543">NotificationsChangedParams</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="203" x2="414" y1="137.5" y2="137.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="203" x2="414" y1="145.5" y2="145.5"/><!--class params--><rect fill="#FEFECE" filter="url(#fi6x1c1zfugla)" height="48" id="params" style="stroke: #A80036; stroke-width: 1.5;" width="125" x="6" y="105.5"/><ellipse cx="21" cy="121.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,127.1406 Q23.3906,127.4375 22.75,127.5781 Q22.1094,127.7344 21.4063,127.7344 Q18.9063,127.7344 17.5781,126.0938 Q16.2656,124.4375 16.2656,121.3125 Q16.2656,118.1875 17.5781,116.5313 Q18.9063,114.875 21.4063,114.875 Q22.1094,114.875 22.75,115.0313 Q23.4063,115.1875 23.9688,115.4844 L23.9688,118.2031 Q23.3438,117.625 22.75,117.3594 Q22.1563,117.0781 21.5313,117.0781 Q20.1875,117.0781 19.5,118.1563 Q18.8125,119.2188 18.8125,121.3125 Q18.8125,123.4063 19.5,124.4844 Q20.1875,125.5469 21.5313,125.5469 Q22.1563,125.5469 22.75,125.2813 Q23.3438,125 23.9688,124.4219 L23.9688,127.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="93" x="35" y="125.6543">ActionsParams</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="130" y1="137.5" y2="137.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="130" y1="145.5" y2="145.5"/><!--link apm to serv--><path d="M334.5,521.21 C334.5,521.21 334.5,621.83 334.5,621.83 " fill="none" id="apm-serv" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="341.5,621.83,334.5,641.83,327.5,621.83,341.5,621.83" style="stroke: #A80036; stroke-width: 1.0;"/><!--link controller to apm--><path d="M315.5,352.07 C315.5,352.07 315.5,467.98 315.5,467.98 " fill="none" id="controller-apm" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="315.5,472.98,319.5,463.98,315.5,467.98,311.5,463.98,315.5,472.98" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="290.1281" y="372.0227">use</text><!--link notifParams to notProvider--><path d="M420.11,130 C420.11,130 450.27,130 450.27,130 " fill="none" id="notifParams-notProvider" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="415.11,130,424.11,134,420.11,130,424.11,126,415.11,130" style="stroke: #A80036; stroke-width: 1.0;"/><!--link provider to owner--><!--link notProvider to serv--><path d="M541.5,179.01 C541.5,311.83 541.5,666 541.5,666 C541.5,666 391.73,666 391.73,666 " fill="none" id="notProvider-serv" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="386.73,666,395.73,670,391.73,666,395.73,662,386.73,666" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="516.8109" y="199.4439">use</text><!--link notProvider to controller--><path d="M450.23,162 C387.51,162 315.5,162 315.5,162 C315.5,162 315.5,285.75 315.5,285.75 " fill="none" id="notProvider-controller" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="315.5,290.75,319.5,281.75,315.5,285.75,311.5,281.75,315.5,290.75" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="422.9943" y="161.7786">use</text><!--link params to controller--><path d="M68.5,158.88 C68.5,158.88 68.5,322 68.5,322 C68.5,322 182.61,322 255.71,322 " fill="none" id="params-controller" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="68.5,153.88,64.5,162.88,68.5,158.88,72.5,162.88,68.5,153.88" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="42.6969" y="173.7338">use</text><!--link notifParams to params--><path d="M201.83,117 C201.83,117 151.14,117 151.14,117 " fill="none" id="notifParams-params" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="151.14,124,131.14,117,151.14,110,151.14,124" style="stroke: #A80036; stroke-width: 1.0;"/><!--link apm to notProvider--><path d="M384.25,472.76 C384.25,397.21 384.25,171 384.25,171 C384.25,171 445.48,171 445.48,171 " fill="none" id="apm-notProvider" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="450.48,171,441.48,167,445.48,171,441.48,175,450.48,171" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="48" x="347.1578" y="462.1065">creates</text><!--
+@startuml
+ skinparam linetype ortho
+node "OwnerService" as owner{
+ class "ApplicationManager" as apm
+ class "APMController" as controller{
+ {method} sendAction(...)
+ }
+ abstract "sys::Service" as serv
+ serv <|-u- - apm
+ controller "use"-d- -> apm
+}
+
+class "ActionsParams" as params
+
+node "Provider" as provider {
+ class "NotificationProvider" as notProvider {
+ {field} ownerService *
+ {method} handle(...)
+ {method} send()
+ {method} requestNotSeenNotifications()
+ }
+ class "NotificationsChangedParams" as notifParams
+ notProvider -l..>notifParams
+}
+
+provider -[hidden]d- owner
+
+notProvider "use"- -> serv
+notProvider "use"- -> controller
+params "use"<- - controller
+notifParams - -|>params
+apm "creates"..>notProvider
+
+
+@enduml
+
+PlantUML version 1.2018.13(Mon Nov 26 18:11:51 CET 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.10+9-Ubuntu-0ubuntu1.20.04
+Operating System: Linux
+OS Version: 5.8.0-50-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg><
\ No newline at end of file
A module-apps/notifications/doc/notifications_provider_structure.puml => module-apps/notifications/doc/notifications_provider_structure.puml +27 -0
@@ 0,0 1,27 @@
+@startuml
+skinparam linetype ortho
+
+node "Notifications" as notifs {
+ class "Notification" as notif
+
+ class "ConcreteNotification_A" as smsNotif
+ class "ConcreteNotification_B" as callNotif
+
+ notif <|-u-- smsNotif
+ notif <|-u-- callNotif
+}
+
+node "Provider" as provider {
+ class "NotificationProvider" as notProvider
+ class "NotificationsChangedParams" as params
+ notProvider -u..>params
+}
+
+
+notProvider "0..1"..> smsNotif
+notProvider "0..1"..> callNotif
+notProvider *-- notif
+
+params *-->notif
+
+@enduml
A module-apps/notifications/doc/notifications_provider_structure.svg => module-apps/notifications/doc/notifications_provider_structure.svg +40 -0
@@ 0,0 1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="606px" preserveAspectRatio="none" style="width:533px;height:606px;" version="1.1" viewBox="0 0 533 606" width="533px" zoomAndPan="magnify"><defs><filter height="300%" id="f7oo5deqisxn" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--cluster notifs--><polygon fill="#FFFFFF" filter="url(#f7oo5deqisxn)" points="22,331,32,321,437,321,437,584,427,594,22,594,22,331" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="427" x2="436" y1="331" y2="322"/><line style="stroke: #000000; stroke-width: 1.5;" x1="22" x2="427" y1="331" y2="331"/><line style="stroke: #000000; stroke-width: 1.5;" x1="427" x2="427" y1="331" y2="594"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="176.5" y="346.9951">Notifications</text><!--cluster provider--><polygon fill="#FFFFFF" filter="url(#f7oo5deqisxn)" points="267,34,277,24,511,24,511,287,501,297,267,297,267,34" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="501" x2="510" y1="34" y2="25"/><line style="stroke: #000000; stroke-width: 1.5;" x1="267" x2="501" y1="34" y2="34"/><line style="stroke: #000000; stroke-width: 1.5;" x1="501" x2="501" y1="34" y2="297"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="67" x="351.5" y="49.9951">Provider</text><!--class notif--><rect fill="#FEFECE" filter="url(#f7oo5deqisxn)" height="48" id="notif" style="stroke: #A80036; stroke-width: 1.5;" width="103" x="308.5" y="530"/><ellipse cx="323.5" cy="546" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M326.4688,551.6406 Q325.8906,551.9375 325.25,552.0781 Q324.6094,552.2344 323.9063,552.2344 Q321.4063,552.2344 320.0781,550.5938 Q318.7656,548.9375 318.7656,545.8125 Q318.7656,542.6875 320.0781,541.0313 Q321.4063,539.375 323.9063,539.375 Q324.6094,539.375 325.25,539.5313 Q325.9063,539.6875 326.4688,539.9844 L326.4688,542.7031 Q325.8438,542.125 325.25,541.8594 Q324.6563,541.5781 324.0313,541.5781 Q322.6875,541.5781 322,542.6563 Q321.3125,543.7188 321.3125,545.8125 Q321.3125,547.9063 322,548.9844 Q322.6875,550.0469 324.0313,550.0469 Q324.6563,550.0469 325.25,549.7813 Q325.8438,549.5 326.4688,548.9219 L326.4688,551.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="71" x="337.5" y="550.1543">Notification</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="309.5" x2="410.5" y1="562" y2="562"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="309.5" x2="410.5" y1="570" y2="570"/><!--class smsNotif--><rect fill="#FEFECE" filter="url(#f7oo5deqisxn)" height="48" id="smsNotif" style="stroke: #A80036; stroke-width: 1.5;" width="174" x="38" y="361"/><ellipse cx="53" cy="377" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M55.9688,382.6406 Q55.3906,382.9375 54.75,383.0781 Q54.1094,383.2344 53.4063,383.2344 Q50.9063,383.2344 49.5781,381.5938 Q48.2656,379.9375 48.2656,376.8125 Q48.2656,373.6875 49.5781,372.0313 Q50.9063,370.375 53.4063,370.375 Q54.1094,370.375 54.75,370.5313 Q55.4063,370.6875 55.9688,370.9844 L55.9688,373.7031 Q55.3438,373.125 54.75,372.8594 Q54.1563,372.5781 53.5313,372.5781 Q52.1875,372.5781 51.5,373.6563 Q50.8125,374.7188 50.8125,376.8125 Q50.8125,378.9063 51.5,379.9844 Q52.1875,381.0469 53.5313,381.0469 Q54.1563,381.0469 54.75,380.7813 Q55.3438,380.5 55.9688,379.9219 L55.9688,382.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="142" x="67" y="381.1543">ConcreteNotification_A</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39" x2="211" y1="393" y2="393"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39" x2="211" y1="401" y2="401"/><!--class callNotif--><rect fill="#FEFECE" filter="url(#f7oo5deqisxn)" height="48" id="callNotif" style="stroke: #A80036; stroke-width: 1.5;" width="174" x="247" y="361"/><ellipse cx="262" cy="377" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M264.9688,382.6406 Q264.3906,382.9375 263.75,383.0781 Q263.1094,383.2344 262.4063,383.2344 Q259.9063,383.2344 258.5781,381.5938 Q257.2656,379.9375 257.2656,376.8125 Q257.2656,373.6875 258.5781,372.0313 Q259.9063,370.375 262.4063,370.375 Q263.1094,370.375 263.75,370.5313 Q264.4063,370.6875 264.9688,370.9844 L264.9688,373.7031 Q264.3438,373.125 263.75,372.8594 Q263.1563,372.5781 262.5313,372.5781 Q261.1875,372.5781 260.5,373.6563 Q259.8125,374.7188 259.8125,376.8125 Q259.8125,378.9063 260.5,379.9844 Q261.1875,381.0469 262.5313,381.0469 Q263.1563,381.0469 263.75,380.7813 Q264.3438,380.5 264.9688,379.9219 L264.9688,382.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="142" x="276" y="381.1543">ConcreteNotification_B</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="248" x2="420" y1="393" y2="393"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="248" x2="420" y1="401" y2="401"/><!--class notProvider--><rect fill="#FEFECE" filter="url(#f7oo5deqisxn)" height="48" id="notProvider" style="stroke: #A80036; stroke-width: 1.5;" width="154" x="297" y="233"/><ellipse cx="312" cy="249" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M314.9688,254.6406 Q314.3906,254.9375 313.75,255.0781 Q313.1094,255.2344 312.4063,255.2344 Q309.9063,255.2344 308.5781,253.5938 Q307.2656,251.9375 307.2656,248.8125 Q307.2656,245.6875 308.5781,244.0313 Q309.9063,242.375 312.4063,242.375 Q313.1094,242.375 313.75,242.5313 Q314.4063,242.6875 314.9688,242.9844 L314.9688,245.7031 Q314.3438,245.125 313.75,244.8594 Q313.1563,244.5781 312.5313,244.5781 Q311.1875,244.5781 310.5,245.6563 Q309.8125,246.7188 309.8125,248.8125 Q309.8125,250.9063 310.5,251.9844 Q311.1875,253.0469 312.5313,253.0469 Q313.1563,253.0469 313.75,252.7813 Q314.3438,252.5 314.9688,251.9219 L314.9688,254.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="122" x="326" y="253.1543">NotificationProvider</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="298" x2="450" y1="265" y2="265"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="298" x2="450" y1="273" y2="273"/><!--class params--><rect fill="#FEFECE" filter="url(#f7oo5deqisxn)" height="48" id="params" style="stroke: #A80036; stroke-width: 1.5;" width="213" x="282.5" y="64"/><ellipse cx="297.5" cy="80" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M300.4688,85.6406 Q299.8906,85.9375 299.25,86.0781 Q298.6094,86.2344 297.9063,86.2344 Q295.4063,86.2344 294.0781,84.5938 Q292.7656,82.9375 292.7656,79.8125 Q292.7656,76.6875 294.0781,75.0313 Q295.4063,73.375 297.9063,73.375 Q298.6094,73.375 299.25,73.5313 Q299.9063,73.6875 300.4688,73.9844 L300.4688,76.7031 Q299.8438,76.125 299.25,75.8594 Q298.6563,75.5781 298.0313,75.5781 Q296.6875,75.5781 296,76.6563 Q295.3125,77.7188 295.3125,79.8125 Q295.3125,81.9063 296,82.9844 Q296.6875,84.0469 298.0313,84.0469 Q298.6563,84.0469 299.25,83.7813 Q299.8438,83.5 300.4688,82.9219 L300.4688,85.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="181" x="311.5" y="84.1543">NotificationsChangedParams</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="283.5" x2="494.5" y1="96" y2="96"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="283.5" x2="494.5" y1="104" y2="104"/><!--link smsNotif to notif--><path d="M125,409.21 C125,455.94 125,554 125,554 C125,554 288.43,554 288.43,554 " fill="none" id="smsNotif-notif" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="288.43,547,308.43,554,288.43,561,288.43,547" style="stroke: #A80036; stroke-width: 1.0;"/><!--link callNotif to notif--><path d="M360,409.21 C360,409.21 360,509.83 360,509.83 " fill="none" id="callNotif-notif" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="367,509.83,360,529.83,353,509.83,367,509.83" style="stroke: #A80036; stroke-width: 1.0;"/><!--link params to notProvider--><path d="M374,117.21 C374,117.21 374,232.83 374,232.83 " fill="none" id="params-notProvider" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="374,112.21,370,121.21,374,117.21,378,121.21,374,112.21" style="stroke: #A80036; stroke-width: 1.0;"/><!--link notProvider to smsNotif--><path d="M296.92,257 C223.79,257 125,257 125,257 C125,257 125,355.92 125,355.92 " fill="none" id="notProvider-smsNotif" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="125,360.92,129,351.92,125,355.92,121,351.92,125,360.92" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="264.9863" y="253.4048">0..1</text><!--link notProvider to callNotif--><path d="M359,281.08 C359,281.08 359,355.6 359,355.6 " fill="none" id="notProvider-callNotif" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="359,360.6,363,351.6,359,355.6,355,351.6,359,360.6" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="328.0813" y="301.2563">0..1</text><!--link notProvider to notif--><path d="M436,294.14 C436,294.14 436,546 436,546 C436,546 425.09,546 411.53,546 " fill="none" id="notProvider-notif" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="436,281.14,432,287.14,436,293.14,440,287.14,436,281.14" style="stroke: #A80036; stroke-width: 1.0;"/><!--link params to notif--><path d="M473.25,125.16 C473.25,125.16 473.25,562 473.25,562 C473.25,562 424.65,562 424.65,562 " fill="none" id="params-notif" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="411.65,562,420.65,566,416.65,562,420.65,558,411.65,562" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="416.65" x2="424.65" y1="562" y2="562"/><polygon fill="#A80036" points="473.25,112.16,469.25,118.16,473.25,124.16,477.25,118.16,473.25,112.16" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+@startuml
+skinparam linetype ortho
+
+node "Notifications" as notifs {
+ class "Notification" as notif
+
+ class "ConcreteNotification_A" as smsNotif
+ class "ConcreteNotification_B" as callNotif
+
+ notif <|-u- - smsNotif
+ notif <|-u- - callNotif
+}
+
+node "Provider" as provider {
+ class "NotificationProvider" as notProvider
+ class "NotificationsChangedParams" as params
+ notProvider -u..>params
+}
+
+
+notProvider "0..1"..> smsNotif
+notProvider "0..1"..> callNotif
+notProvider *- - notif
+
+params *- ->notif
+
+@enduml
+
+PlantUML version 1.2018.13(Mon Nov 26 18:11:51 CET 2018)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11+9-Ubuntu-0ubuntu2.20.04
+Operating System: Linux
+OS Version: 5.8.0-50-generic
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg><
\ No newline at end of file