Version 13 (modified by gogov, 16 years ago) (diff) |
---|
Analysis
Overview
Changes should be able to be decomposed into ProLib primitives.
The set of ProLib primitives should have the following characteristics:
- each primitive should be representable as a plain-text string of characters
- all the primitives together should describe some sort of a language which should correspond to all the functionality which the ProLib provides
- this way everything that happens inside Sophie 2 should be representable as some sort of a program written in this language
- this program could then be easily:
- transmitted to a server over the network
- viewable and understandable for debugging purposes
- converted to appropriate ProLib functions
- Changes form the type of information that will be stored in the Histories responsible for logging Changes in ResourceSpaces
This task is to develop a set of primitives which fulfills the requirements above.
Task requirements
- The set of primitives should look like this:
- <id> probj-create <class-name>
- creates a new ProObject given its class name and returns the id of the newly created ProObject
- probj-destroy <proobj-id>
- destroys an existing ProObject given its id
- probj-set <probj-id> <prop-name> <value>
- sets a new value to a Property by its name of a ProObject given its id
- prolist-add <proobj-id> <prolist-name> <pos> <object>
- adds a new object at a given position to a given ListProperty of a given ProObject
- prolist-remove <proobj-id> <prolist-name> <pos>
- remove the object at a given position of a given ListProperty of a given ProObject
- prolist-set <proobj-id> <prolist-name> <pos> <object>
- sets a new object as a value of a given position to a given ListProperty of a given ProObject
- undo
- undoes the last Change in the History
- redo
- cancels the last Change in the History, if it is an UndoChange
- skip <change-id>
- skips a Change in the History given its id
- <id> probj-create <class-name>
- All ids used should be unique
- Maybe UUIDs could used
- Synchronization problems with list operations should be considered
- An idea for solving those problems should be proposed
- For instance the problem with positions and merging. Some sort of smart positions could be implemented
- An idea for solving those problems should be proposed
- Each primitive should correspond to a Change in the History
Task result
- Rough implementation
- Good description of the primitives
- Use-case for the primitives with diagrams
Implementation idea
- For the use case describe what happens when a Sophie client is connected to a Sophie server and how the Histories running on both sides work together
Related
PRO_CHANGE_COMMONS_R0
PRO_CHANGE_TRANSACTION_SAFETY_R0
PRO_CHANGE_COMPOSING_R0
PRO_CHANGE_MANAGER_R0
PRO_CHANGE_UNDO_MANAGER_R0
How to demo
- Show primitives description
- Show and explain the use case