1   package hudsonfog.voc.system;
2   
3   import com.fogx.webdav.DavResource;
4   import com.fogx.webdav.DavClass;
5   import com.fogx.webdav.DavBean;
6   import com.fogx.webdav.DavProperty;
7   import static com.fogx.webdav.DavProperty.*;
8   import com.fogx.webdav.packages.DavBeanPackage;
9   import com.fogx.webdav.util.DavResourceSupport;
10  import com.fogx.webdav.util.UrlUtil;
11  import java.util.Date;
12  import java.util.Map;
13  import java.util.HashMap;
14  import java.util.List;
15  import java.util.Collections;
16  import java.util.Arrays;
17  
18  import hudsonfog.voc.system.primitiveTypes.*;
19  import hudsonfog.voc.system.identity.*;
20  import hudsonfog.voc.system.parse.*;
21  import hudsonfog.voc.system.XMLSchema.*;
22  
23  import hudsonfog.voc.system.fog.*;
24  
25  
26  public abstract class changeHistory {
27  
28    /**
29   * Changes to the Resource that implement this interface will be
30   * automatically recorded. An audit trail can be then displayed visually.
31   */
32    public static interface ModificationHistory {
33           @_avoidDisplayingInSideBar
34           @_notSearchable
35           @_backLink("forResource")
36           public Modification[]                changeHistory = null; //* list of modifications for this resource
37           @_readOnly
38           @_avoidDisplaying
39           public Modification                  lastModification = null;
40           @_avoidModificationTracking
41           @_dateFormat("~MMM-dd, yyyy HH:mm")
42           @_sortAscending(false)
43           @_icon("icons/touched.gif")
44           @_readOnly
45           public dateTime                      touched = null;
46           @_editModeOnly
47           @_maxSize(250)
48           @_notSearchable
49           @_parameter
50           public String                        editNotes = null; //*? important: notes explaining your changes
51           @_dateFormat("~MMM-dd, yyyy HH:mm")
52           @_avoidModificationTracking
53           @_icon("icons/edit.gif")
54           @_readOnly
55           public dateTime                      lastModified = writeJS("getLastModified()"); // hack - to calc all lastModifed props (used to be a formula)
56    }
57  
58    /**
59   * Record of a single Resource change.
60   */
61    @DavClass._notClonable
62    @DavClass._viewCols("dateModified, modifiedBy, forResource, newValues, editNotes, memberResource, memberLabel")
63    @DavClass._smallIcon("icons/edit-small.gif")
64    @DavClass._avoidEditing
65    @DavClass._largeIcon("icons/edit-large.gif")
66    @DavClass._gridCols("modifiedBy, modified")
67    @DavClass._icon("icons/edit.gif")
68    public static class Modification {
69        @k public Integer                       seq;
70           @_displayNameElm
71           @_delegatedAccessControl
72        @k public ModificationHistory           forResource; //* resource for which modification was made
73           @_avoidDisplaying
74        @k public DavClass                      forResourceClass;
75        @s public ImportItem                    partOf; //* entry Resource (e.g. Session, EmailMessage) which is the scope of this change
76           @_allowRoles("admin")
77           public Entry                         relatedTo; // when Modification resource is created this property is set to the value of 'forResource' partOf property
78           @_icon("icons/classes/Contact.gif")
79           public PersonIdentifier              modifiedBy = writeJS("modifiedBy ? modifiedBy : getContact()");
80           @_label("Modified")
81           @_propertyGroupList("forResource, newValues, memberResource")
82           @_abstract
83           @_propertyGroup("true")
84           public Boolean                       modified;
85           @_maxSize(63000)
86           public modificationDelta             newValues;
87           @_maxSize(63000)
88           public modificationDelta             oldValues;
89           @_dateFormat("MMM-dd, yyyy HH:mm")
90           @_sortAscending(false)
91           @_readOnly
92           public dateTime                      dateModified;
93           @_maxSize(1000)
94           @_displayInline
95           public String                        editNotes;
96           public DavClass                      memberClass;
97           public DavResource                   memberResource;
98           @_maxSize(1000)
99           public String                        memberLabel;
100   }
101 }
102