[[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 == This task is about the primitives that are needed to manage changes. These include primitive operations about changes. == Task requirements == * Primitive operations about changes which include the following: * create - which should create a change which should have an id. The design section should decide on the uniqueness of the id of a change. This is needed to manage changes on a server for example. * destroy - which should destroy a change by an id. * set - should be able to set the change with an id for a property. This will be helpful if for example a change is to be altered so that consistency is kept. There will occur situation with changes on a server where some part of a composite change should be altered. Imagine for example several people managing a book at the same time. * Changes types: * Change - a simple change. * !GroupChange - a composite change that is constructed of simple changes. * !UnmanagedChange - a change that is not supposed to be skipped/unskipped, undone/redone, simply because there is no logical way of doing so or if we decide on changes that will not be managed. For example - save a book may be a unmanaged change. If the user creates a frame with a movie content (with a media file of over 700Mb), deletes the frame, deletes the media file and requests a undo - the change may become a unmanaged. If the user had not deleted the media file the change would have been a normal change that can be undone. * '''Note''' - the primitive operations described above should be possible having in mind these types of changes. * A decent documentation should be created that explains the primitives - change types and operations with them. == Task result == * Source code * wiki page somewhere - may be only a wiki content in the design section. == Implementation idea == * look at the code in [source:trunk/sophie2-platform/modules/org.sophie2.core/src/main/java/org/sophie2/core/prolib/events Changes] types in event package to get an idea. * decide on a way to create the different operations. * decide which of the change are to be unmanaged. * implement what is to be implemented. * describe how to use changes. == Related == [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]] == How to demo == * run unit tests about change. * show the wiki content. = Design = = Implementation = = Testing = = Comments =