extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/activity/ActivityEntry.java

Code
Comments
Other
Rev Date Author Line
5376 23 Apr 19 nicklas 1 package net.sf.basedb.reggie.activity;
5376 23 Apr 19 nicklas 2
5376 23 Apr 19 nicklas 3 import java.io.Serializable;
5376 23 Apr 19 nicklas 4 import java.time.LocalDateTime;
5376 23 Apr 19 nicklas 5 import java.time.ZoneId;
5376 23 Apr 19 nicklas 6 import java.time.temporal.ChronoUnit;
5376 23 Apr 19 nicklas 7 import java.util.Date;
5376 23 Apr 19 nicklas 8
5376 23 Apr 19 nicklas 9 import net.sf.basedb.core.TransactionalAction;
5376 23 Apr 19 nicklas 10
5376 23 Apr 19 nicklas 11
5376 23 Apr 19 nicklas 12 /**
5376 23 Apr 19 nicklas 13   Represents an activity entry in the activity log. All entries must have 
5376 23 Apr 19 nicklas 14   a date+time and a message text. Entries can be standalone or mergeable.
5376 23 Apr 19 nicklas 15   A mergeable entry is merged with another entry by calling the 
5376 23 Apr 19 nicklas 16   {@link #merge(ActivityEntry)} method.
5376 23 Apr 19 nicklas 17   
5376 23 Apr 19 nicklas 18   Note that this interface already implements the TransactionalAction
5376 23 Apr 19 nicklas 19   interface so the preferred way to add entries to the activity log while
5376 23 Apr 19 nicklas 20   making sure that the only get added if the transaction succeeds is
5376 23 Apr 19 nicklas 21   to do:
5376 23 Apr 19 nicklas 22   
5376 23 Apr 19 nicklas 23   <code>
5376 23 Apr 19 nicklas 24   DbControl dc = ...;
5376 23 Apr 19 nicklas 25   ...
5376 23 Apr 19 nicklas 26   dc.addTransactionalAction(new ActivityEntryImpl(...)); 
5376 23 Apr 19 nicklas 27   ...
5376 23 Apr 19 nicklas 28   dc.commit();
5376 23 Apr 19 nicklas 29   </code>
5376 23 Apr 19 nicklas 30   
5376 23 Apr 19 nicklas 31   @author nicklas
5376 23 Apr 19 nicklas 32   @since 4.23
5376 23 Apr 19 nicklas 33 */
5376 23 Apr 19 nicklas 34 public interface ActivityEntry 
5376 23 Apr 19 nicklas 35   extends Serializable, TransactionalAction
5376 23 Apr 19 nicklas 36 {
5376 23 Apr 19 nicklas 37
5376 23 Apr 19 nicklas 38   /**
5376 23 Apr 19 nicklas 39     Get the date and time of the event.
5376 23 Apr 19 nicklas 40   */
5376 23 Apr 19 nicklas 41   public Date getEventDate();
5376 23 Apr 19 nicklas 42   
5376 23 Apr 19 nicklas 43   /**
5376 23 Apr 19 nicklas 44     Get the day part of the event as a LocalDateTime object.
5376 23 Apr 19 nicklas 45     The default implementation should work for all instances.
5376 23 Apr 19 nicklas 46     This method is needed to check if two events are on the 
5376 23 Apr 19 nicklas 47     same day before an eventual merge is performed.
5376 23 Apr 19 nicklas 48   */
5376 23 Apr 19 nicklas 49   public default LocalDateTime getEventDay()
5376 23 Apr 19 nicklas 50   {
5376 23 Apr 19 nicklas 51     return LocalDateTime.ofInstant(getEventDate().toInstant(), ZoneId.systemDefault()).truncatedTo(ChronoUnit.DAYS);
5376 23 Apr 19 nicklas 52   }
5376 23 Apr 19 nicklas 53   
5376 23 Apr 19 nicklas 54   /**
5740 20 Nov 19 nicklas 55     Get the age of the event in seconds.
5740 20 Nov 19 nicklas 56     @since 4.23.3
5740 20 Nov 19 nicklas 57   */
5740 20 Nov 19 nicklas 58   public default int getAgeInSeconds()
5740 20 Nov 19 nicklas 59   {
5740 20 Nov 19 nicklas 60     return (int)((System.currentTimeMillis() - getEventDate().getTime()) / 1000);
5740 20 Nov 19 nicklas 61   }
5740 20 Nov 19 nicklas 62   
5740 20 Nov 19 nicklas 63   /**
5376 23 Apr 19 nicklas 64     Get the message of the event. It is recommended to keep it short and consice.
5376 23 Apr 19 nicklas 65   */
5376 23 Apr 19 nicklas 66   public String getMessage();
5376 23 Apr 19 nicklas 67   
5376 23 Apr 19 nicklas 68   /**
5421 13 May 19 nicklas 69     Get the name of the user that worked with the activity.
5421 13 May 19 nicklas 70   */
5421 13 May 19 nicklas 71   public String getUser();
5421 13 May 19 nicklas 72   
5421 13 May 19 nicklas 73   /**
5421 13 May 19 nicklas 74     Get the name of the project that the activity belongs to.
5421 13 May 19 nicklas 75   */
5421 13 May 19 nicklas 76   public String getProject();
5421 13 May 19 nicklas 77   
5421 13 May 19 nicklas 78   /**
5376 23 Apr 19 nicklas 79     Return TRUE to indicate that this event can be merged with 
5376 23 Apr 19 nicklas 80     some other event.
5376 23 Apr 19 nicklas 81   */
5376 23 Apr 19 nicklas 82   public boolean canMerge();
5376 23 Apr 19 nicklas 83   
5376 23 Apr 19 nicklas 84   /**
5376 23 Apr 19 nicklas 85     This method is called by the activity log to merge two events.
5376 23 Apr 19 nicklas 86     If the current event's {@link #canMerge()} method returns true
5376 23 Apr 19 nicklas 87     the activity log will find all other activities on the same day
5376 23 Apr 19 nicklas 88     and then call this method until either TRUE is returned or
5376 23 Apr 19 nicklas 89     the end is reached. If TRUE was returned, the the other activity
5376 23 Apr 19 nicklas 90     is removed from the log. Finally, the current activity is added
5376 23 Apr 19 nicklas 91     to the log.
5376 23 Apr 19 nicklas 92   */
5376 23 Apr 19 nicklas 93   public boolean merge(ActivityEntry activity);
5376 23 Apr 19 nicklas 94
5376 23 Apr 19 nicklas 95   /**
5376 23 Apr 19 nicklas 96     Do nothing.
5376 23 Apr 19 nicklas 97   */
5376 23 Apr 19 nicklas 98   @Override
5376 23 Apr 19 nicklas 99   public default void onBeforeCommit() 
5376 23 Apr 19 nicklas 100   {}
5376 23 Apr 19 nicklas 101
5376 23 Apr 19 nicklas 102   /**
5376 23 Apr 19 nicklas 103     Add the entry to the activity log.
5376 23 Apr 19 nicklas 104   */
5376 23 Apr 19 nicklas 105   @Override
5376 23 Apr 19 nicklas 106   public default void onAfterCommit() 
5376 23 Apr 19 nicklas 107   {
5376 23 Apr 19 nicklas 108     ActivityLog.getInstance().addActivity(this);
5376 23 Apr 19 nicklas 109   }
5376 23 Apr 19 nicklas 110
5376 23 Apr 19 nicklas 111   /**
5376 23 Apr 19 nicklas 112     Do nothing, unless in debug mode.
5376 23 Apr 19 nicklas 113   */
5376 23 Apr 19 nicklas 114   @Override
5376 23 Apr 19 nicklas 115   public default void onRollback() 
5376 23 Apr 19 nicklas 116   {
5376 23 Apr 19 nicklas 117     if (ActivityLog.debugMode())
5376 23 Apr 19 nicklas 118     {
5376 23 Apr 19 nicklas 119       ActivityLog.getInstance().addActivity(this);
5376 23 Apr 19 nicklas 120     }
5376 23 Apr 19 nicklas 121   }
5376 23 Apr 19 nicklas 122
5376 23 Apr 19 nicklas 123 }