@startuml
start
:ClickServlet.handleRequest();
:new page;
if (Page.onSecurityCheck) then (true)
:Page.onInit();
if (isForward?) then (no)
:Process controls;
if (continue processing?) then (no)
stop
endif
if (isPost?) then (yes)
:Page.onPost();
else (no)
:Page.onGet();
endif
:Page.onRender();
endif
else (false)
endif
if (do redirect?) then (yes)
:redirect process;
else
if (do forward?) then (yes)
:Forward request;
else (no)
:Render page template;
endif
endif
stop
@enduml
ACTIVITY DIAGRAM
5835716751785984
SimpleUsecasewith one actorUse the applicationUser
USE CASE DIAGRAM
5836609568112640
SimpleUsecasewith one actorUse the applicationUser
@startuml
title Simple <b>Usecase </b>\nwith one actor
"Use the application" as (Use)
User -> (Use)
@enduml
USE CASE DIAGRAM
5836609568112640
Select a serverServer processingBuildinit object and startbackground procSelectfind proper serverAwaitwait for server selectto have at least amaster serverReceivereceive serverobjects from channelUriClient Objectserverserver objectDiscoverloop throughlist of serversCatagorizecatagorize listof serversSendsend each serverobject through channelTopologyset server types andClient topologyInterrogateask server for secondary hostsserver from urilist of serverslist of serverslist of serversmaster serverfound servers
STATE DIAGRAM
5839127761125376
Select a serverServer processingBuildinit object and startbackground procSelectfind proper serverAwaitwait for server selectto have at least amaster serverReceivereceive serverobjects from channelUriClient Objectserverserver objectDiscoverloop throughlist of serversCatagorizecatagorize listof serversSendsend each serverobject through channelTopologyset server types andClient topologyInterrogateask server for secondary hostsserver from urilist of serverslist of serverslist of serversmaster serverfound servers
@startuml
title Select a server
state "Server processing" as SProc {
[*] --> Build : Uri
Build --> [*] : Client Object
Build : init object and start\nbackground proc
[*] --> Select
Select --> Await
Await : wait for server select\nto have at least a\nmaster server
Await --> Select : server
Select --> [*] : server object
Select : find proper server
Receive : receive server\nobjects from channel
Receive --> Await
--
[*] --> Discover : server from uri
Discover : loop through\nlist of servers
Discover --> Catagorize : list of servers
Catagorize : catagorize list\nof servers
Catagorize --> Send : list of servers
Catagorize --> Topology : list of servers
Catagorize --> Interrogate : master server
Interrogate : ask server for secondary hosts
Interrogate --> Discover : found servers
Send : send each server\nobject through channel
Topology : set server types and\nClient topology
Topology --> Discover
}
@enduml
STATE DIAGRAM
5839127761125376
ServerGamemap<string routingId, Robot &> _robotsmap<string routingId, Player &> _playersmap<string, Team &> _teamsbool _isGameStartedvoid start()void stop()void addRobot(string iName)void addPlayer(string iName)Robot getAvailableRobot()void fillGameStateMessage (orwell::messages::GameState & iMessage)routingId = Robot nameDo we need explicit link between robot and player ?Playerstring nameTeam & _teamRobotstring namevoid fillRobotStateMessage (orwell::messages::RobotState & iMessage)Teamlist<Player &> _playersvoid addPlayer(Player iPlayer)void removePlayer(Player iPlayer)10-*10-*10-*10-*1111
CLASS DIAGRAM
5839736841175040
ServerGamemap<string routingId, Robot &> _robotsmap<string routingId, Player &> _playersmap<string, Team &> _teamsbool _isGameStartedvoid start()void stop()void addRobot(string iName)void addPlayer(string iName)Robot getAvailableRobot()void fillGameStateMessage (orwell::messages::GameState & iMessage)routingId = Robot nameDo we need explicit link between robot and player ?Playerstring nameTeam & _teamRobotstring namevoid fillRobotStateMessage (orwell::messages::RobotState & iMessage)Teamlist<Player &> _playersvoid addPlayer(Player iPlayer)void removePlayer(Player iPlayer)10-*10-*10-*10-*1111
@startuml
scale 600 width
class Server
class Game {
void start()
void stop()
void addRobot(string iName)
void addPlayer(string iName)
Robot getAvailableRobot()
void fillGameStateMessage (orwell::messages::GameState & iMessage)
map<string routingId, Robot &> _robots
map<string routingId, Player &> _players
map<string, Team &> _teams
bool _isGameStarted
}
note right of Game {
routingId = Robot name
}
note "Do we need explicit link between robot and player ?" as N1
N1 -- Game
class Player {
string name
Team & _team
}
class Robot{
void fillRobotStateMessage (orwell::messages::RobotState & iMessage)
string name
}
class Team {
void addPlayer(Player iPlayer)
void removePlayer(Player iPlayer)
list<Player &> _players
}
Game "1" *-- "0-*" Player
Game "1" *-- "0-*" Robot
Game "1" *-- "0-*" Team
Team "1" o-- "0-*" Player
Server "1" -- "1" Game
Robot "1" -- "1" Player
@enduml
CLASS DIAGRAM
5839736841175040
AppAppKaltura LocalAssetsManagerKaltura LocalAssetsManagerDownloads Media tolocalPathregisterAsset(entryConfig, flavorId, localPath)SDK acquires licensealt[Success]Success[Failure]Failure
SEQUENCE DIAGRAM
5840451684794368
AppAppKaltura LocalAssetsManagerKaltura LocalAssetsManagerDownloads Media tolocalPathregisterAsset(entryConfig, flavorId, localPath)SDK acquires licensealt[Success]Success[Failure]Failure
@startuml
participant App
participant "Kaltura LocalAssetsManager" as LAM
note over App: Downloads Media to //localPath//
App->>LAM: registerAsset(entryConfig, flavorId, localPath)
note over LAM: SDK acquires license
alt Success
LAM->>App: Success
else Failure
LAM->>App: Failure
end
@enduml
@startuml
:foo1;
-> You can put text on arrows;
if (test) then
-[#blue]->
:foo2;
-[#green]-> The text can
also be on several lines
and **very** long...;
:foo3;
else
-[#black]->
:foo4;
endif
-[#gray]->
:foo5;
@enduml
@startuml
left to right direction
skinparam packageStyle rect
actor customer
actor clerk
rectangle checkout {
customer -- (checkout)
(checkout) .> (payment) : include
(help) .> (checkout) : extends
(checkout) -- clerk
}
@enduml
@startuml
object user {
name = "Dummy"
id = 123
}
@enduml
CLASS DIAGRAM
5868127380307968
Black boxtestingWhite boxtestingUnittestingIncrementalintegrationtestingIntegrationtestingFunctionaltestingEnd to endtestingRegressiontestingAcceptancetestingStresstestingPerformancetestingUsabilitytestingInstall/uninstalltestingSecuritytestingCompatibilitytesting
COMPONENT DIAGRAM
5871511546101760
Black boxtestingWhite boxtestingUnittestingIncrementalintegrationtestingIntegrationtestingFunctionaltestingEnd to endtestingRegressiontestingAcceptancetestingStresstestingPerformancetestingUsabilitytestingInstall/uninstalltestingSecuritytestingCompatibilitytesting
Client Server interactionapplicationClientClient T0Client T1ServerServer TMonitorMonitor Tmongodnew(uri)store serverport in todo listPromise.start()load server:portfrom todo listClient objectnew()new()Monitor objectServer objectserver-init()start-monitor()Promise.start()Promiseismaster commandismaster resulttap from monitormonitor dataSet statustap from monitormonitor datastore new serverdata in todo listStore inserver listselect-server()Get serverfrom serverlistServer objectMonitor data is sent from Monitor thread using a SupplyData in Client structures for communication are guarded with Semaphores
SEQUENCE DIAGRAM
5874792632680448
Client Server interactionapplicationClientClient T0Client T1ServerServer TMonitorMonitor Tmongodnew(uri)store serverport in todo listPromise.start()load server:portfrom todo listClient objectnew()new()Monitor objectServer objectserver-init()start-monitor()Promise.start()Promiseismaster commandismaster resulttap from monitormonitor dataSet statustap from monitormonitor datastore new serverdata in todo listStore inserver listselect-server()Get serverfrom serverlistServer objectMonitor data is sent from Monitor thread using a SupplyData in Client structures for communication are guarded with Semaphores
@startuml
title Client Server interaction
hide footbox
actor application as app
participant Client
participant "Client T0" as Clt0 #a0fefe
participant "Client T1" as Clt1 #fea0fe
participant Server #a0fefe
participant "Server T" as Srvt0 #a0fea0
participant Monitor #a0fefe
participant "Monitor T" as Mnt0 #c0c0c0
database mongod
activate mongod
app -> Client: new(uri)
activate Client
'Todo list is a structure guarded by semaphores
Client -> Client: store server\nport in todo list
Client -> Clt0: Promise.start()
activate Clt0
Clt0 -> Clt0: load server:port\nfrom todo list
Client -> app: Client object
deactivate Client
Clt0 -> Server: new()
activate Server
Server -> Monitor: new()
activate Monitor
Monitor -> Server: Monitor object
deactivate Monitor
Server -> Clt0: Server object
deactivate Server
Clt0 -> Server: server-init()
activate Server
Server -> Monitor: start-monitor()
activate Monitor
Monitor -> Mnt0: Promise.start()
activate Mnt0
Monitor -> Server: Promise
deactivate Monitor
Mnt0 -[#a000bf]-> mongod: ismaster command
mongod -[#a000bf]-> Mnt0: ismaster result
Server -> Srvt0: tap from monitor
activate Srvt0
deactivate Server
Mnt0 o-[#a000bf]->o Srvt0: monitor data
'activate Srvt0
Srvt0 -> Srvt0: Set status
'deactivate Srvt0
Clt0 -> Clt1: tap from monitor
activate Clt1
Mnt0 o-[#a000bf]->o Clt1: monitor data
deactivate Clt0
Clt1 -> Clt1: store new server\ndata in todo list
Clt1 -> Clt1: Store in\nserver list
'note right: in thread
'note right: returns immediate
'Server --> mongod: connect
app -> Client: select-server()
activate Client
Client -> Client: Get server\nfrom server\nlist
Client -> app: Server object
deactivate Client
legend
Monitor data is sent from Monitor thread using a Supply
Data in Client structures for communication are guarded with Semaphores
end legend
@enduml