# Project control

This tool manages an applicative write access to the project files without using the may be existing operating system capabilities. The goal is to give the write access of a the project files to at most one user per file, to avoid to merge modifications made by several users. The tool Project synchro associated to project control allows you to synchronize a repository project with the modifications made by several users (supposing each package modified by at most one user).

Because of the way the project data are saved by BOUML (see project files), the write access are managed at package level, and each information attached to a package (except its sub packages) have the write access of this package. Recall the generation settings, default stereotypes etc are associated to the project package, a good way is to not define views directly in the project package but to immediately create sub packages, each one owned by a different user or protected.

Project Control is not a plug-out, it is launch like BOUML or any tool, when you start it the following window appears :

To avoid inconsistencies, you can't apply Project Control several times on a given project, and you can't use it on a project while it is edited by BOUML or by Project Synchro, if this is the case a message warns you :

The write access are written inside the project files associated to the packages, if all the users access to the same shared image of the project, the protection will be taken into account by BOUML. If there are several images of the project, after the use of File Control each image must be updated, or you must set the same write access using the tool by yourself.

All the operations are presented to be done for a given user, this user is indicated at the bottom of the window. Obviously the user is first the one starting the tool, the id is the value of the user own identifier set through the environment dialog.

### Project menu

This menu allows

- to load project (may be through the historic list proposed at the bottom, this historic is the one of BOUML for the user starting Project Control),

- to change the current user,

- to search for a package from its name,

- or to quit the tool.

### Browser

When you load a project, only the packages are shown in the browser, for example on the project doing the HTML generation, if the project package is protected, the API USER owned by bruno and Aux by olivier :

The icon used to represent a package indicates the write access :

- : the package is not protected and may be modified by any user using BOUML

- : the package is protected, no users may modify it using BOUML

- : the package is own by the current user, only the current user can modify it using BOUML

- : the package is own by an other user (indicated by the columns Owner id, Owner name), only this user can modify it using BOUML

- : the package is not protected and its associated file is read-only, you can't modify the write access

- : the package is protected and its associated file is read-only, you can't modify the write access

- : the package is own by the current user and its associated file is read-only, you can't modify the write access

- : the package is own by an other user and its associated file is read-only, you can't modify the write access

### Package menu

A menu appears when you do a right mouse click on a package, its content depend on the package access, the entries are (Ctrl is replaced by Apple under MacOS X) :

- Protect this package (Ctrl+p) :to protect the current package, no user will be able to modify it using BOUML

- Unassign this package (Ctrl+u) : to not protect the current package, all the users will ne able to modify it using BOUML

- Assign this package to <user> (Ctrl+a) : to protect the current package except for the current user

- Protect <user>'s packages recursively from this one : to protect the packages own by the current user from the current package and going down recursively, the state of the packages not own by the current user is unchanged

- Protect unassigned packages recursively from this one : to protect all the unprotected packages from the current and going down recursively, the state of the other packages is unchanged

- Protect all packages recursively from this one (Alt+p) : to protect all the packages from the current and going down recursively

- Assign to <user> unassigned packages recursively from this one : to protect except for the current user all the unprotected packages from the current and going down recursively, the state of the other packages is unchanged

- Assign to <user> all packages recursively from this one (Alt+a) : to protect except for the current user all the packages from the current and going down recursively

- Unassign <user>'s packages recursively from this one : to not protect the packages own by the current user from the current package and going down recursively, the state of the other packages is unchanged

- Unassign all packages recursively from this one (Alt+u) : to not protect the packages from the current package and going down recursively

Warning : the change is immediately made, and these is no undo !

### Change the current user

To change the current user, use the button representing an actor or the entry in the project menu, a dialog appears :

Choose a user from the list, set the name through the line editor when it is unknown for the selected user identifier .

Previous : Plug-out

Next : Project synchro