Skip to content
Snippets Groups Projects
lockExclusiveAlice.pu 1.73 KiB
@startuml

actor Alice #FFBBBB

== Exclusive Lock: single user, lock in time ==

Alice -> form: open page
form -> Alice: form
Alice -> Alice: edit (first change)
Alice -> dirty: action=lock
activate dirty #FFBBBB
dirty -> Alice: status=success, lock_timeout=<secs>
...

alt press 'save' or press 'save and close'
  Alice -> save: POST form
  save -> dirty: lock valid?
  dirty -> save: yes
  save -> save: save form
  save -> dirty: action=release
  deactivate dirty
  save -> Alice: status=succes,redirect=client
  |||
else press 'form close' or press 'back' and answer question 'Save? yes|no|cancel' with 'no'.
  Alice -> dirty: action=release
  dirty -> Alice: status=success

end

== Exclusive Lock: single user, lock expired ==

Alice -> form: open page
form -> Alice: form
Alice -> Alice: edit (first change)
Alice -> dirty: action=lock
activate dirty #FFBBBB
dirty -> Alice: status=success, lock_timeout=<secs>
...
Alice -> Alice: edit (more changes)
note over Alice: Client will extend lock automatically,\nif there are changes during last timeout period
Alice -> dirty: action=extend
dirty -> Alice: status=success
...
dirty -> dirty: lock expired
deactivate dirty
...
alt any user change in form
  Alice -> dirty: action=extend
  activate dirty
  dirty -> Alice: status=success, lock_timeout=<secs>
  deactivate dirty
  |||
else press 'save' or press 'save and close'
  Alice -> save: POST form
  save -> dirty: lock valid?
  dirty -> save: no
  save -> dirty: extend lock
  activate dirty
  dirty -> save: ok
  save -> save: save form
  save -> dirty: action=release
  deactivate dirty
  save -> Alice: status=succes,redirect=client
  |||
else press 'form close' or press 'back'
  Alice -> dirty: action=release
  dirty -> Alice: status=success

end

@enduml