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 |
Represents an activity entry in the activity log. All entries must have |
5376 |
23 Apr 19 |
nicklas |
a date+time and a message text. Entries can be standalone or mergeable. |
5376 |
23 Apr 19 |
nicklas |
A mergeable entry is merged with another entry by calling the |
5376 |
23 Apr 19 |
nicklas |
{@link #merge(ActivityEntry)} method. |
5376 |
23 Apr 19 |
nicklas |
17 |
|
5376 |
23 Apr 19 |
nicklas |
Note that this interface already implements the TransactionalAction |
5376 |
23 Apr 19 |
nicklas |
interface so the preferred way to add entries to the activity log while |
5376 |
23 Apr 19 |
nicklas |
making sure that the only get added if the transaction succeeds is |
5376 |
23 Apr 19 |
nicklas |
to do: |
5376 |
23 Apr 19 |
nicklas |
22 |
|
5376 |
23 Apr 19 |
nicklas |
<code> |
5376 |
23 Apr 19 |
nicklas |
DbControl dc = ...; |
5376 |
23 Apr 19 |
nicklas |
25 |
... |
5376 |
23 Apr 19 |
nicklas |
dc.addTransactionalAction(new ActivityEntryImpl(...)); |
5376 |
23 Apr 19 |
nicklas |
27 |
... |
5376 |
23 Apr 19 |
nicklas |
dc.commit(); |
5376 |
23 Apr 19 |
nicklas |
</code> |
5376 |
23 Apr 19 |
nicklas |
30 |
|
5376 |
23 Apr 19 |
nicklas |
@author nicklas |
5376 |
23 Apr 19 |
nicklas |
@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 |
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 |
Get the day part of the event as a LocalDateTime object. |
5376 |
23 Apr 19 |
nicklas |
The default implementation should work for all instances. |
5376 |
23 Apr 19 |
nicklas |
This method is needed to check if two events are on the |
5376 |
23 Apr 19 |
nicklas |
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 |
Get the age of the event in seconds. |
5740 |
20 Nov 19 |
nicklas |
@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 |
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 |
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 |
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 |
Return TRUE to indicate that this event can be merged with |
5376 |
23 Apr 19 |
nicklas |
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 |
This method is called by the activity log to merge two events. |
5376 |
23 Apr 19 |
nicklas |
If the current event's {@link #canMerge()} method returns true |
5376 |
23 Apr 19 |
nicklas |
the activity log will find all other activities on the same day |
5376 |
23 Apr 19 |
nicklas |
and then call this method until either TRUE is returned or |
5376 |
23 Apr 19 |
nicklas |
the end is reached. If TRUE was returned, the the other activity |
5376 |
23 Apr 19 |
nicklas |
is removed from the log. Finally, the current activity is added |
5376 |
23 Apr 19 |
nicklas |
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 |
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 |
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 |
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 |
} |