Course Description
Course Schedule
Team Compositions
Final Assignment
Course Literature
Specification Languages
Education Page
PIRRO
• Team A
• Team B
• Team C
Center
Master Program
Center
Home
Courses
People
Projects
Page
Edit Page
Rename Page
Attach File
Printable
Wiki Source
More ...
Web
Recent Changes
Notify Service
News
Page Index
Search
More ...
Wiki
About TWiki
Text Formatting
Registration
Change Password
Reset Password
Users
Groups
Log In
or
Register
Team_C
Sws
%BEGINLATEXPREAMBLE% \usepackage{amssymb} \usepackage{amsmath} %ENDLATEXPREAMBLE% ---+ Task Given a state of the _PIRRO_ system, specify what actions can a user perform. ---+ Approach * We group the actions according to the component that handles them. * We mainly focus on the Compositor actions. * The state is specified by a series of operations that query the state and return the information. ---+ Compositor user actions We group the actions in two categories: ---++ Versioning related * [[#BrowseP][Browse available branches]] * [[#CommitP][Commit to branch]] * [[#UpdateP][Update branch]] * [[#MergeP][Merge two branches]] * [[#RevertP][Revert to a specific branch version]] * [[#BranchP][Create a new branch based on an existing one]] ---++ Workspace related * [[#AddP][Add a piece]] * [[#MoveP][Move a composition]] * [[#RotateP][Rotate composition]] * [[#CombineP][Combine compositions]] * [[#ExtractP][Extract piece]] * [[#RemoveComposition][Remove composition]] * [[#RemoveMember][Remove member]] * [[#ZoomP][Zoom viewport]] * [[#PanP][Pan viewport]] * [[#AnnotateP][Annotate]] ---++ Other Tools * [[#SelectP][Select composition]] * [[#UnSelectP][UnSelect composition]] * [[#CutP][Cut composition]] * [[#PasteP][Paste composition]] ---+ Formal Specification of user interface ---++ Helper definitions %BEGINLATEX% \begin{tabular}{c l} $W$ & the current user working set \\ $\mathcal{B}$ & the set of all defined branches \\ $ClipBoard$ & temporary storage of compositions outside the workspace \\ \end{tabular} %ENDLATEX% %$ \text{isConsistent} (W) = \forall C \in W . \forall (i,p_i,r_i),(j,p_j,r_j) \in C . \bigl( i = j \Rightarrow p_i = p_j \wedge r_i = r_j \bigr) . $% %$ \text{noConflicts} (C,C') = \forall (i,p_i,r_i) \in C . \forall (j,p_j,r_j) \in C' . \bigl( i = j \Rightarrow p_i = p_j \wedge r_i = r_j \bigr) . $% ---++ User events ---+++ Versioning Operations #GetBranches ---++++ Get all branches * *INPUT* GetAllBranches * *PRE* - * *ACTION* query versioning component for all the defined branches; return a sequence of all branches; DISPLAY(TXT-ALL-BRANCHES,%$\mathcal{B}$%) * *POST* - #BrowseP ---++++ Browse specific branch * *INPUT* BrowseBranch%$(B)$% * *PRE* %$B \in \mathcal{B}$% * *ACTION* query versioning component for the specified branch; DISPLAY(COMPOSITOR-VIEWPORT,%$B$%) * *POST* - #CommitP ---++++ Commit to branch * *INPUT* Commit * *PRE* workspaceBranch%$(W) = B\ \wedge$ isConsistent$(W) $ \\$\wedge\ \forall C \in W $ version$(C) = $ currentVersion$(C)$% * *ACTION* Versioning::Commit%$(W,B)$% * *POST* - #UpdateP ---++++ Update branch * *INPUT* Update * *PRE* workspaceBranch%$(W) = B$% * *ACTION* %$W' = $% Versioning::Update%$(W,B) $% * *POST* %$W = W'$% #MergeP ---++++ Merge with branch * *INPUT* Merge(%$B_t$%) * *PRE* workspaceBranch%$(W) = B_s\ \wedge$ isConsistent$(W) $ \\$\wedge\ \forall C \in W $ version$(C) = $ currentVersion$(C)$% * *ACTION* Versioning::Merge%$(B_s,B_t), W' = $% Versioning::Checkout%$(B_t,LATEST)$% * *POST* %$W = W'$% #RevertP ---++++ Revert to version * *INPUT* Revert%$(vers)$% * *PRE* workspaceBranch%$(W) = B\ \wedge$% currentVersion%$(B) \geq vers$% * *ACTION* %$W' = $% Versioning::Checkout%$(B,vers)$% * *POST* %$W = W'$% #BranchP ---++++ Branch * *INPUT* Branch(%$B_n$%) * *PRE* workspaceBranch%$(W) = B_s$% * *ACTION* Versioning::Branch%$(B_s,B_n)$%, %$W' = $% Versioning::Checkout%$(B_n,LATEST)$% * *POST* %$W = W'$% ---+++ Compositor operations #AddP ---++++ Add piece * *INPUT* Add(P) * *PRE* - * *ACTION* - * *POST* %$ W'= W \cup \{P\} $% #MoveP ---++++ Move composition * *INPUT* Move%$(\Delta)$% * *PRE* selected%$(W) = \{C\}\ \wedge$% position%$(C) = pos$% * *ACTION* Compositor::Move%$(C,\Delta)$% * *POST* position%$(C) = pos + \Delta $% #RotateP ---++++ Rotate composition * *INPUT* Rotate%$(\theta)$% * *PRE* selected%$(W) = \{C\}\ \wedge$% rotation%$(C) = \alpha $% * *ACTION* Compositor::Rotate%$(C,\theta)$% * *POST* rotation%$(C) = \theta + \alpha $% #RemoveComposition ---++++ Remove composition * *INPUT* Remove * *PRE* selected%$(W) = \{C\}$% * *ACTION* Compositor::Remove%$(C,W)$% * *POST* %$C \notin W\ \wedge$% selected%$(W) = \emptyset$% #RemoveMember ---++++ Remove member * *INPUT* RemoveMember(P) * *PRE* selected%$(W) = \{C\} \wedge P \in C $% * *ACTION* Compositor::RemoveMember%$(P,C)$% * *POST* %$C \notin W\ \wedge (C-{P}) \in W \wedge $% selected%$(W) = \emptyset$% #CombineP ---++++ Combine two compositions * *INPUT* Combine * *PRE* selected%$(W) = \{C_1,C_2\}\ \wedge$% noConflicts%$(C1,C2)$% * *ACTION* %$C = $% Compositor::Combine%$(C_1,C_2)$% * *POST* %$C_1 \notin W\ \wedge\ C_2 \notin W\ \wedge C \in W\ \wedge$% selected%$(W) = {C}$% #ExtractP ---++++ Extract a piece * *INPUT* Extract(P) * *PRE* selected%$(W) = \{C\}$% * *ACTION* %$C' = $% Compositor::Extract%$(C,P)$% * *POST* %$W' = (W-C) \cup {P} \cup C' \wedge $% selected%$(W') = {P}$% #PanP ---++++ Pan viewport * *INPUT* Pan%$(\delta)$% * *PRE* position%$(VIEWPORT) = pos$% * *ACTION* Compositor::Pan%$(\delta)$% * *POST* position%$(VIEWPORT) = pos + \delta$% #ZoomP ---++++ Zoom viewport * *INPUT* Zoom%$(\delta)$% * *PRE* zoom%$(VIEWPORT) = z$% * *ACTION* Compositor::Zoom%$(\delta)$% * *POST* zoom%$(VIEWPORT) = z + \delta$% #AfterP ---++++ After user login * *INPUT* LoginCompleted%$(U)$% * *PRE* %$B = $% getGroupBranch%$(U)\ \wedge$% position%$(VIEWPORT) = (0,0) \wedge$% lastPosition%$(U) = pos$% * *ACTION* %$W' = $% Versioning::Get%$(B,LATEST)$%, Compositor::Pan%$(pos)$% * *POST* %$W = W' \wedge $% position%$(VIEWPORT) = pos$% #AnnotateP ---++++ Annotate * *INPUT* Annotate(M) * *PRE* selected%$(W) = \{C\}$% * *ACTION* Compositor::Annotate%$(C,M)$% * *POST* - ---+++ Other Tools #SelectP ---++++ Select composition * *INPUT* Select%$(C)$% * *PRE* %$C \in W$% * *ACTION* - * *POST* selected%$(W) =\{C\} \cup$% selected%$(W)$% #UnSelectP ---++++ UnSelect composition * *INPUT* UnSelect%$(C)$% * *PRE* %$C \in W \wedge S = selected(W) $% * *ACTION* - * *POST* selected%$(W) = S-{C} $% #CutP ---++++ Cut composition * *INPUT* Cut * *PRE* %$ S = selected(W) \wedge S \neq \emptyset $% * *ACTION* - * *POST* selected%$(W') = \emptyset \wedge $% ClipBoard %$ = S \wedge W'= W - S $% #PasteP ---++++ Paste composition * *INPUT* Paste * *PRE* %$ S = $% ClipBoard %$ \wedge S \neq \emptyset $% * *ACTION* - * *POST* selected%$(W') = S \wedge$% ClipBoard %$=\emptyset \wedge W'= W \cup S $%
Topic attachments
I
Attachment
Action
Size
Date
Who
Comment
pdf
sws15.pdf
manage
31.1 K
26 Oct 2009 - 17:25
TamarChristina