extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/autoconfirm/AutoConfirmer.java

Code
Comments
Other
Rev Date Author Line
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 10   Abstract base class for auto-confirm handlers. A handler
3034 12 Dec 14 nicklas 11   is responsible for:
3034 12 Dec 14 nicklas 12   
3034 12 Dec 14 nicklas 13     * checking that the rules for auto-confirm are fulfilled
3034 12 Dec 14 nicklas 14     * performing the confirmation step
3034 12 Dec 14 nicklas 15     * submitting items to the next analysis step
3034 12 Dec 14 nicklas 16
3034 12 Dec 14 nicklas 17   @author nicklas
3045 16 Dec 14 nicklas 18   @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 23     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 28     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 54     Get the user that should be impersonated in the SessionControl used for starting the next step.
7225 31 May 23 nicklas 55     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 56     owner of the item. The default implementation return null.
7225 31 May 23 nicklas 57     @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 65     Check if the rules are fulfilled. If they are 
3049 17 Dec 14 nicklas 66     this handler will be kept and {@link #autoConfirm(DbControl, AutoConfirmManager)}
3049 17 Dec 14 nicklas 67     is invoked at a later time. 
3034 12 Dec 14 nicklas 68     Note! This method should check the rules only, it should
3034 12 Dec 14 nicklas 69     not modify the existing items
3034 12 Dec 14 nicklas 70     @param dc The DbControl is typically a ROOT user session
3049 17 Dec 14 nicklas 71     @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 77     Auto-confirm the item(s). It should set flags and annotations as if the same
3049 17 Dec 14 nicklas 78     action had been taken in the web interface. If the auto-confirmation
3049 17 Dec 14 nicklas 79     is succesful, the next step in the analysis pipeline will be started
3072 13 Jan 15 nicklas 80     with {@link #startNextStep(SessionControl, AutoConfirmManager)}.
3049 17 Dec 14 nicklas 81     @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 86     Start the next step in the analysis chain. A new session is started for each
3072 13 Jan 15 nicklas 87     item to process. The session automatically activates the same project that
3072 13 Jan 15 nicklas 88     was active for the previous step.
3072 13 Jan 15 nicklas 89     @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 }