extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/dao/BeadChip.java

Code
Comments
Other
Rev Date Author Line
6478 09 Nov 21 nicklas 1 package net.sf.basedb.reggie.dao;
6478 09 Nov 21 nicklas 2
6478 09 Nov 21 nicklas 3 import java.util.ArrayList;
6478 09 Nov 21 nicklas 4 import java.util.Collection;
6478 09 Nov 21 nicklas 5 import java.util.List;
6478 09 Nov 21 nicklas 6
6478 09 Nov 21 nicklas 7 import org.json.simple.JSONObject;
6478 09 Nov 21 nicklas 8
6478 09 Nov 21 nicklas 9 import net.sf.basedb.core.AnnotationType;
6478 09 Nov 21 nicklas 10 import net.sf.basedb.core.DbControl;
6478 09 Nov 21 nicklas 11 import net.sf.basedb.core.HibernateUtil;
6478 09 Nov 21 nicklas 12 import net.sf.basedb.core.InvalidDataException;
6478 09 Nov 21 nicklas 13 import net.sf.basedb.core.ItemQuery;
6478 09 Nov 21 nicklas 14 import net.sf.basedb.core.PhysicalBioAssay;
6478 09 Nov 21 nicklas 15 import net.sf.basedb.core.query.Annotations;
6478 09 Nov 21 nicklas 16 import net.sf.basedb.core.query.Expressions;
6478 09 Nov 21 nicklas 17 import net.sf.basedb.core.query.Hql;
6478 09 Nov 21 nicklas 18 import net.sf.basedb.core.query.Restrictions;
6478 09 Nov 21 nicklas 19 import net.sf.basedb.reggie.query.LowerExpression;
6478 09 Nov 21 nicklas 20
6478 09 Nov 21 nicklas 21 /**
6478 09 Nov 21 nicklas 22   Class for loading information that is related to BeadChips.
6478 09 Nov 21 nicklas 23   
6478 09 Nov 21 nicklas 24   @author nicklas
6478 09 Nov 21 nicklas 25   @since 4.34
6478 09 Nov 21 nicklas 26 */
6478 09 Nov 21 nicklas 27 public class BeadChip 
6478 09 Nov 21 nicklas 28   extends ReggieItem<PhysicalBioAssay>
6478 09 Nov 21 nicklas 29 {
6478 09 Nov 21 nicklas 30
6478 09 Nov 21 nicklas 31   /**
6478 09 Nov 21 nicklas 32     Find a bead chip by barcode number. If exactly one match is found all is
6478 09 Nov 21 nicklas 33     good and this is the bead chip we are looking for. More than one match
6478 09 Nov 21 nicklas 34     is an error condition. No match indicates a bead chip that has not yet
6478 09 Nov 21 nicklas 35     been registered (null is returned).
6478 09 Nov 21 nicklas 36   */
6478 09 Nov 21 nicklas 37   public static BeadChip findByBarcode(DbControl dc, String barcode)
6478 09 Nov 21 nicklas 38   {
6478 09 Nov 21 nicklas 39     BeadChip chip = null;
6478 09 Nov 21 nicklas 40     
6478 09 Nov 21 nicklas 41     AnnotationType barcodeType = Annotationtype.BEADCHIP_ID.load(dc);
6478 09 Nov 21 nicklas 42     ItemQuery<PhysicalBioAssay> query = PhysicalBioAssay.getQuery();
6478 09 Nov 21 nicklas 43     Subtype.BEAD_CHIP.addFilter(dc, query);
6478 09 Nov 21 nicklas 44     query.join(Annotations.innerJoin(barcodeType, "bc"));
6478 09 Nov 21 nicklas 45     if (HibernateUtil.getDbEngine().caseInsensitiveComparison())
6478 09 Nov 21 nicklas 46     {
6478 09 Nov 21 nicklas 47       query.restrict(Restrictions.eq(Hql.alias("bc"), Expressions.string(barcode)));
6478 09 Nov 21 nicklas 48     }
6478 09 Nov 21 nicklas 49     else
6478 09 Nov 21 nicklas 50     {
6478 09 Nov 21 nicklas 51       query.restrict(Restrictions.eq(new LowerExpression(Hql.alias("bc")), Expressions.string(barcode.toLowerCase())));
6478 09 Nov 21 nicklas 52     }
6478 09 Nov 21 nicklas 53     
6478 09 Nov 21 nicklas 54     List<PhysicalBioAssay> beadChips = query.list(dc);    
6478 09 Nov 21 nicklas 55     if (beadChips.size() > 1)
6478 09 Nov 21 nicklas 56     {
6478 09 Nov 21 nicklas 57       throw new InvalidDataException(
6478 09 Nov 21 nicklas 58         "More than one BeadChip with barcode (" + barcode + ") was found. " +
6478 09 Nov 21 nicklas 59         "This wizard can't be used until that is corrected.");
6478 09 Nov 21 nicklas 60     }
6478 09 Nov 21 nicklas 61     if (beadChips.size() == 1)
6478 09 Nov 21 nicklas 62     {
6478 09 Nov 21 nicklas 63       chip = new BeadChip(beadChips.get(0));
6478 09 Nov 21 nicklas 64     }
6478 09 Nov 21 nicklas 65     return chip;
6478 09 Nov 21 nicklas 66   }
6478 09 Nov 21 nicklas 67
6478 09 Nov 21 nicklas 68   
6478 09 Nov 21 nicklas 69   /**
6478 09 Nov 21 nicklas 70     Get a BeadChip when the id is known.
6478 09 Nov 21 nicklas 71   */
6478 09 Nov 21 nicklas 72   public static BeadChip getById(DbControl dc, int id)
6478 09 Nov 21 nicklas 73   {
6478 09 Nov 21 nicklas 74     return new BeadChip(PhysicalBioAssay.getById(dc, id));
6478 09 Nov 21 nicklas 75   }
6478 09 Nov 21 nicklas 76   
6478 09 Nov 21 nicklas 77   public static BeadChip get(PhysicalBioAssay fc)
6478 09 Nov 21 nicklas 78   {
6478 09 Nov 21 nicklas 79     return new BeadChip(fc);
6478 09 Nov 21 nicklas 80   }
6478 09 Nov 21 nicklas 81   
6478 09 Nov 21 nicklas 82   public static List<BeadChip> toList(Collection<PhysicalBioAssay> bioassays)
6478 09 Nov 21 nicklas 83   {
6478 09 Nov 21 nicklas 84     List<BeadChip> chips = new ArrayList<BeadChip>(bioassays.size());
6478 09 Nov 21 nicklas 85     for (PhysicalBioAssay ba : bioassays)
6478 09 Nov 21 nicklas 86     {
6478 09 Nov 21 nicklas 87       chips.add(new BeadChip(ba));
6478 09 Nov 21 nicklas 88     }
6478 09 Nov 21 nicklas 89     return chips;
6478 09 Nov 21 nicklas 90   }
6478 09 Nov 21 nicklas 91   
6478 09 Nov 21 nicklas 92   
6478 09 Nov 21 nicklas 93   private BeadChip(PhysicalBioAssay bioAssay)
6478 09 Nov 21 nicklas 94   {
6478 09 Nov 21 nicklas 95     super(bioAssay);
6478 09 Nov 21 nicklas 96
6478 09 Nov 21 nicklas 97   }  
6478 09 Nov 21 nicklas 98   
6478 09 Nov 21 nicklas 99   /**
6478 09 Nov 21 nicklas 100     Get the real physical bioassay that represents this BeadChip in BASE.
6478 09 Nov 21 nicklas 101   */
6478 09 Nov 21 nicklas 102   public PhysicalBioAssay getPhysicalBioAssay()
6478 09 Nov 21 nicklas 103   {
6478 09 Nov 21 nicklas 104     return getItem();
6478 09 Nov 21 nicklas 105   }
6478 09 Nov 21 nicklas 106
6478 09 Nov 21 nicklas 107   @Override
6478 09 Nov 21 nicklas 108   protected void initJSON(JSONObject json) 
6478 09 Nov 21 nicklas 109   {
6478 09 Nov 21 nicklas 110     super.initJSON(json);
6478 09 Nov 21 nicklas 111   }
6478 09 Nov 21 nicklas 112
6478 09 Nov 21 nicklas 113
6478 09 Nov 21 nicklas 114 }