[[BackLinksMenu]] [[TicketQuery(summary=PRO_CHANGE_PRIMITIVES_R0, format=table, col=summary|owner|status|type|component|priority|effort|importance, rows=description|analysis_owners|analysis_reviewers|analysis_score|design_owners|design_reviewers|design_score|implementation_owners|implementation_reviewers|implementation_score|test_owners|test_reviewers|test_score|)]] = 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: * '''probj-create''' '''' * creates a new ProObject given its class name and returns the id of the newly created ProObject * '''probj-destroy''' '''' * destroys an existing ProObject given its id * '''probj-set''' * sets a new value to a Property by its name of a ProObject given its id * '''prolist-add''' '''' '''' '''' '''' * adds a new object at a given position to a given ListProperty of a given ProObject * '''prolist-remove''' '''' '''' '''' * remove the object at a given position of a given ListProperty of a given ProObject * '''prolist-set''' '''' '''' '''' '''' * 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''' '''' * skips a Change in the History given its id * 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 * 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 == [wiki:GROUP_PRO_CHANGE_R0] [wiki:PRO_CHANGE_COMMONS_R0] [[BR]] [wiki:PRO_CHANGE_TRANSACTION_SAFETY_R0] [[BR]] [wiki:PRO_CHANGE_COMPOSING_R0] [[BR]] [wiki:PRO_CHANGE_MANAGER_R0] [[BR]] [wiki:PRO_CHANGE_UNDO_MANAGER_R0] == How to demo == * Show primitives set description * Show and explain the use case = Design = = Implementation = = Testing = = Comments =