3034 |
12 Dec 14 |
nicklas |
1 |
package net.sf.basedb.reggie.autoconfirm; |
3034 |
12 Dec 14 |
nicklas |
2 |
|
3034 |
12 Dec 14 |
nicklas |
3 |
import net.sf.basedb.core.CommonItem; |
3034 |
12 Dec 14 |
nicklas |
4 |
import net.sf.basedb.core.DbControl; |
3055 |
19 Dec 14 |
nicklas |
5 |
import net.sf.basedb.core.Job; |
3055 |
19 Dec 14 |
nicklas |
6 |
import net.sf.basedb.core.SessionControl; |
7225 |
31 May 23 |
nicklas |
7 |
import net.sf.basedb.core.User; |
3034 |
12 Dec 14 |
nicklas |
8 |
|
3034 |
12 Dec 14 |
nicklas |
9 |
/** |
3034 |
12 Dec 14 |
nicklas |
Abstract base class for auto-confirm handlers. A handler |
3034 |
12 Dec 14 |
nicklas |
is responsible for: |
3034 |
12 Dec 14 |
nicklas |
12 |
|
3034 |
12 Dec 14 |
nicklas |
* checking that the rules for auto-confirm are fulfilled |
3034 |
12 Dec 14 |
nicklas |
* performing the confirmation step |
3034 |
12 Dec 14 |
nicklas |
* submitting items to the next analysis step |
3034 |
12 Dec 14 |
nicklas |
16 |
|
3034 |
12 Dec 14 |
nicklas |
@author nicklas |
3045 |
16 Dec 14 |
nicklas |
@since 3.0 |
3034 |
12 Dec 14 |
nicklas |
19 |
*/ |
3571 |
30 Oct 15 |
nicklas |
20 |
public abstract class AutoConfirmer<I extends CommonItem> |
3034 |
12 Dec 14 |
nicklas |
21 |
{ |
3049 |
17 Dec 14 |
nicklas |
22 |
/** |
3049 |
17 Dec 14 |
nicklas |
1 million. |
3049 |
17 Dec 14 |
nicklas |
24 |
*/ |
3049 |
17 Dec 14 |
nicklas |
25 |
public static final long M = 1000000; |
3049 |
17 Dec 14 |
nicklas |
26 |
|
3049 |
17 Dec 14 |
nicklas |
27 |
/** |
3049 |
17 Dec 14 |
nicklas |
1 thousand. |
3049 |
17 Dec 14 |
nicklas |
29 |
*/ |
3049 |
17 Dec 14 |
nicklas |
30 |
public static final long k = 1000; |
3049 |
17 Dec 14 |
nicklas |
31 |
|
3034 |
12 Dec 14 |
nicklas |
32 |
|
3034 |
12 Dec 14 |
nicklas |
33 |
private final I item; |
3055 |
19 Dec 14 |
nicklas |
34 |
private final Job job; |
3034 |
12 Dec 14 |
nicklas |
35 |
|
3055 |
19 Dec 14 |
nicklas |
36 |
protected AutoConfirmer(I item, Job job) |
3034 |
12 Dec 14 |
nicklas |
37 |
{ |
3034 |
12 Dec 14 |
nicklas |
38 |
this.item = item; |
3055 |
19 Dec 14 |
nicklas |
39 |
this.job = job; |
3034 |
12 Dec 14 |
nicklas |
40 |
} |
3034 |
12 Dec 14 |
nicklas |
41 |
|
3034 |
12 Dec 14 |
nicklas |
42 |
@SuppressWarnings("unchecked") |
3034 |
12 Dec 14 |
nicklas |
43 |
public I item(DbControl dc) |
3034 |
12 Dec 14 |
nicklas |
44 |
{ |
3034 |
12 Dec 14 |
nicklas |
45 |
return (I)item.getType().getById(dc, item.getId()); |
3034 |
12 Dec 14 |
nicklas |
46 |
} |
3034 |
12 Dec 14 |
nicklas |
47 |
|
3055 |
19 Dec 14 |
nicklas |
48 |
public Job job(DbControl dc) |
3055 |
19 Dec 14 |
nicklas |
49 |
{ |
3055 |
19 Dec 14 |
nicklas |
50 |
return job != null ? Job.getById(dc, job.getId()) : null; |
3055 |
19 Dec 14 |
nicklas |
51 |
} |
3055 |
19 Dec 14 |
nicklas |
52 |
|
3034 |
12 Dec 14 |
nicklas |
53 |
/** |
7225 |
31 May 23 |
nicklas |
Get the user that should be impersonated in the SessionControl used for starting the next step. |
7225 |
31 May 23 |
nicklas |
If this method return null, then the owner of the job is used, and if there is no job, the |
7225 |
31 May 23 |
nicklas |
owner of the item. The default implementation return null. |
7225 |
31 May 23 |
nicklas |
@since 4.48 |
7225 |
31 May 23 |
nicklas |
58 |
*/ |
7225 |
31 May 23 |
nicklas |
59 |
public User userForNextStep(DbControl dc) |
7225 |
31 May 23 |
nicklas |
60 |
{ |
7225 |
31 May 23 |
nicklas |
61 |
return null; |
7225 |
31 May 23 |
nicklas |
62 |
} |
7225 |
31 May 23 |
nicklas |
63 |
|
7225 |
31 May 23 |
nicklas |
64 |
/** |
3034 |
12 Dec 14 |
nicklas |
Check if the rules are fulfilled. If they are |
3049 |
17 Dec 14 |
nicklas |
this handler will be kept and {@link #autoConfirm(DbControl, AutoConfirmManager)} |
3049 |
17 Dec 14 |
nicklas |
is invoked at a later time. |
3034 |
12 Dec 14 |
nicklas |
Note! This method should check the rules only, it should |
3034 |
12 Dec 14 |
nicklas |
not modify the existing items |
3034 |
12 Dec 14 |
nicklas |
@param dc The DbControl is typically a ROOT user session |
3049 |
17 Dec 14 |
nicklas |
@return TRUE if the rules are met and the item should be auto-confirmed |
3034 |
12 Dec 14 |
nicklas |
72 |
*/ |
3049 |
17 Dec 14 |
nicklas |
73 |
public abstract boolean checkRules(DbControl dc, AutoConfirmManager manager); |
3034 |
12 Dec 14 |
nicklas |
74 |
|
3034 |
12 Dec 14 |
nicklas |
75 |
|
3049 |
17 Dec 14 |
nicklas |
76 |
/** |
3049 |
17 Dec 14 |
nicklas |
Auto-confirm the item(s). It should set flags and annotations as if the same |
3049 |
17 Dec 14 |
nicklas |
action had been taken in the web interface. If the auto-confirmation |
3049 |
17 Dec 14 |
nicklas |
is succesful, the next step in the analysis pipeline will be started |
3072 |
13 Jan 15 |
nicklas |
with {@link #startNextStep(SessionControl, AutoConfirmManager)}. |
3049 |
17 Dec 14 |
nicklas |
@return TRUE if the items(s) should be taken to the next step, FALSE if not |
3049 |
17 Dec 14 |
nicklas |
82 |
*/ |
3049 |
17 Dec 14 |
nicklas |
83 |
public abstract boolean autoConfirm(DbControl dc, AutoConfirmManager manager); |
3049 |
17 Dec 14 |
nicklas |
84 |
|
3072 |
13 Jan 15 |
nicklas |
85 |
/** |
3072 |
13 Jan 15 |
nicklas |
Start the next step in the analysis chain. A new session is started for each |
3072 |
13 Jan 15 |
nicklas |
item to process. The session automatically activates the same project that |
3072 |
13 Jan 15 |
nicklas |
was active for the previous step. |
3072 |
13 Jan 15 |
nicklas |
@return TRUE if the next step was started, FALSE if not |
3072 |
13 Jan 15 |
nicklas |
90 |
*/ |
3055 |
19 Dec 14 |
nicklas |
91 |
public abstract boolean startNextStep(SessionControl sc, AutoConfirmManager manager); |
3072 |
13 Jan 15 |
nicklas |
92 |
|
3034 |
12 Dec 14 |
nicklas |
93 |
@Override |
3034 |
12 Dec 14 |
nicklas |
94 |
public boolean equals(Object o) |
3034 |
12 Dec 14 |
nicklas |
95 |
{ |
6021 |
23 Oct 20 |
nicklas |
96 |
if (this == o) return true; |
6021 |
23 Oct 20 |
nicklas |
97 |
if (o == null) return false; |
6021 |
23 Oct 20 |
nicklas |
98 |
if (!getClass().equals(o.getClass())) return false; |
3034 |
12 Dec 14 |
nicklas |
99 |
AutoConfirmer<?> other = (AutoConfirmer<?>)o; |
3034 |
12 Dec 14 |
nicklas |
100 |
return other.item.equals(this.item); |
3034 |
12 Dec 14 |
nicklas |
101 |
} |
3034 |
12 Dec 14 |
nicklas |
102 |
|
3034 |
12 Dec 14 |
nicklas |
103 |
@Override |
3034 |
12 Dec 14 |
nicklas |
104 |
public int hashCode() |
3034 |
12 Dec 14 |
nicklas |
105 |
{ |
3034 |
12 Dec 14 |
nicklas |
106 |
return item.hashCode(); |
3034 |
12 Dec 14 |
nicklas |
107 |
} |
3034 |
12 Dec 14 |
nicklas |
108 |
|
3034 |
12 Dec 14 |
nicklas |
109 |
@Override |
3034 |
12 Dec 14 |
nicklas |
110 |
public String toString() |
3034 |
12 Dec 14 |
nicklas |
111 |
{ |
3049 |
17 Dec 14 |
nicklas |
112 |
return getClass().getSimpleName() + "[" + item.getName() + "]"; |
3034 |
12 Dec 14 |
nicklas |
113 |
} |
3034 |
12 Dec 14 |
nicklas |
114 |
|
3034 |
12 Dec 14 |
nicklas |
115 |
|
3034 |
12 Dec 14 |
nicklas |
116 |
} |