[[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. Also have in mind that the change types are already implemented in one way or another. * 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 =