extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/dao/GenotypeCall.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.DbControl;
6478 09 Nov 21 nicklas 10 import net.sf.basedb.core.DerivedBioAssay;
6478 09 Nov 21 nicklas 11 import net.sf.basedb.core.InvalidDataException;
6478 09 Nov 21 nicklas 12 import net.sf.basedb.core.ItemQuery;
6478 09 Nov 21 nicklas 13 import net.sf.basedb.core.PhysicalBioAssay;
6478 09 Nov 21 nicklas 14 import net.sf.basedb.core.Type;
6478 09 Nov 21 nicklas 15 import net.sf.basedb.core.query.Expressions;
6478 09 Nov 21 nicklas 16 import net.sf.basedb.core.query.Hql;
6478 09 Nov 21 nicklas 17 import net.sf.basedb.core.query.Orders;
6478 09 Nov 21 nicklas 18 import net.sf.basedb.core.query.Restrictions;
6478 09 Nov 21 nicklas 19 import net.sf.basedb.reggie.Reggie;
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 genotype calls.
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 GenotypeCall 
6478 09 Nov 21 nicklas 28   extends ReggieItem<DerivedBioAssay>
6478 09 Nov 21 nicklas 29 {
6478 09 Nov 21 nicklas 30
6478 09 Nov 21 nicklas 31   /**
6478 09 Nov 21 nicklas 32     Get genotype call item when the id is known.
6478 09 Nov 21 nicklas 33   */
6478 09 Nov 21 nicklas 34   public static GenotypeCall getById(DbControl dc, int id)
6478 09 Nov 21 nicklas 35   {
6478 09 Nov 21 nicklas 36     return new GenotypeCall(DerivedBioAssay.getById(dc, id));
6478 09 Nov 21 nicklas 37   }
6478 09 Nov 21 nicklas 38   
6478 09 Nov 21 nicklas 39   public static GenotypeCall getByName(DbControl dc, String name)
6478 09 Nov 21 nicklas 40   {
6478 09 Nov 21 nicklas 41     ItemQuery<DerivedBioAssay> query = DerivedBioAssay.getQuery();
6478 09 Nov 21 nicklas 42     query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
6478 09 Nov 21 nicklas 43     Subtype.GENOTYPE_CALL.addFilter(dc, query);
6478 09 Nov 21 nicklas 44     query.restrict(Restrictions.eq(Hql.property("name"), Expressions.string(name)));
6478 09 Nov 21 nicklas 45     
6478 09 Nov 21 nicklas 46     List<DerivedBioAssay> list = query.list(dc);
6478 09 Nov 21 nicklas 47     if (list.size() > 1)
6478 09 Nov 21 nicklas 48     {
6478 09 Nov 21 nicklas 49       throw new InvalidDataException(
6478 09 Nov 21 nicklas 50           "More than one item with the name " + name + " was found. " +
6478 09 Nov 21 nicklas 51           "This wizard can't be used until that is corrected.");
6478 09 Nov 21 nicklas 52     }
6478 09 Nov 21 nicklas 53     GenotypeCall filtered = null;
6478 09 Nov 21 nicklas 54     if (list.size() == 1)
6478 09 Nov 21 nicklas 55     {
6478 09 Nov 21 nicklas 56       filtered = new GenotypeCall(list.get(0));
6478 09 Nov 21 nicklas 57     }
6478 09 Nov 21 nicklas 58     return filtered;
6478 09 Nov 21 nicklas 59   }
6478 09 Nov 21 nicklas 60   
7011 25 Jan 23 nicklas 61   public static GenotypeCall get(DerivedBioAssay bioAssay)
7011 25 Jan 23 nicklas 62   {
7011 25 Jan 23 nicklas 63     return new GenotypeCall(bioAssay);
7011 25 Jan 23 nicklas 64   }
7011 25 Jan 23 nicklas 65
6478 09 Nov 21 nicklas 66   /**
6478 09 Nov 21 nicklas 67     Find all genotype call items by case name. This method will check for {@link Subtype#GENOTYPE_CALL}
6478 09 Nov 21 nicklas 68     derived bioassays with a name matching the case name (eg. xxx.b.d.gt).
6478 09 Nov 21 nicklas 69    */
6478 09 Nov 21 nicklas 70   public static List<GenotypeCall> findByCaseName(DbControl dc, String name)
6478 09 Nov 21 nicklas 71   {
6478 09 Nov 21 nicklas 72     // Get rid of suffixes in the name (eg. 'C' which is used for pre-neoadjuvant forms)
6478 09 Nov 21 nicklas 73     if (name.length() > 7) name = name.substring(0, 7);    
6478 09 Nov 21 nicklas 74   
6478 09 Nov 21 nicklas 75     // Look for a library with the given name 
6478 09 Nov 21 nicklas 76     ItemQuery<DerivedBioAssay> query = DerivedBioAssay.getQuery();
6478 09 Nov 21 nicklas 77     Subtype.GENOTYPE_CALL.addFilter(dc, query);
6478 09 Nov 21 nicklas 78     query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
6478 09 Nov 21 nicklas 79     query.restrict(Restrictions.like(Hql.property("name"), Expressions.parameter("name", name+".%", Type.STRING)));
6478 09 Nov 21 nicklas 80     query.order(Orders.asc(Hql.property("name")));
6478 09 Nov 21 nicklas 81     List<DerivedBioAssay> tmp = query.list(dc);
6478 09 Nov 21 nicklas 82     return toList(tmp);
6478 09 Nov 21 nicklas 83   }
6478 09 Nov 21 nicklas 84   
6478 09 Nov 21 nicklas 85   public static List<GenotypeCall> toList(Collection<DerivedBioAssay> bioassays)
6478 09 Nov 21 nicklas 86   {
6478 09 Nov 21 nicklas 87     List<GenotypeCall> lib = new ArrayList<GenotypeCall>(bioassays.size());
6478 09 Nov 21 nicklas 88     for (DerivedBioAssay ba : bioassays)
6478 09 Nov 21 nicklas 89     {
6478 09 Nov 21 nicklas 90       lib.add(new GenotypeCall(ba));
6478 09 Nov 21 nicklas 91     }
6478 09 Nov 21 nicklas 92     return lib;
6478 09 Nov 21 nicklas 93   }
6478 09 Nov 21 nicklas 94   
6478 09 Nov 21 nicklas 95   
6478 09 Nov 21 nicklas 96   private GenotypeCall(DerivedBioAssay bioAssay)
6478 09 Nov 21 nicklas 97   {
6478 09 Nov 21 nicklas 98     super(bioAssay);
6478 09 Nov 21 nicklas 99   }
6478 09 Nov 21 nicklas 100   
6478 09 Nov 21 nicklas 101   /**
6478 09 Nov 21 nicklas 102     Get the derived bioassay that represents the genotype call in BASE.
6478 09 Nov 21 nicklas 103   */
6478 09 Nov 21 nicklas 104   public DerivedBioAssay getDerivedBioAssay()
6478 09 Nov 21 nicklas 105   {
6478 09 Nov 21 nicklas 106     return getItem();
6478 09 Nov 21 nicklas 107   }
6478 09 Nov 21 nicklas 108
6478 09 Nov 21 nicklas 109   /**
6478 09 Nov 21 nicklas 110     Get the Blood DNA item that this genotype call is derived from.
6478 09 Nov 21 nicklas 111   */
6478 09 Nov 21 nicklas 112   public BloodDna getBloodDna(DbControl dc)
6478 09 Nov 21 nicklas 113   {
6478 09 Nov 21 nicklas 114     return BloodDna.getById(dc, getItem().getExtract().getId());
6478 09 Nov 21 nicklas 115   }
6478 09 Nov 21 nicklas 116   
6478 09 Nov 21 nicklas 117   public Scan getScan(DbControl dc)
6478 09 Nov 21 nicklas 118   {
6478 09 Nov 21 nicklas 119     ItemQuery<DerivedBioAssay> query = getItem().getParents();
6478 09 Nov 21 nicklas 120     Subtype.SCAN.addFilter(dc, query);
6478 09 Nov 21 nicklas 121     query.include(Reggie.INCLUDE_IN_CURRENT_PROJECT);
6478 09 Nov 21 nicklas 122
6478 09 Nov 21 nicklas 123     List<DerivedBioAssay> tmp = query.list(dc);
6478 09 Nov 21 nicklas 124     if (tmp.size() == 0)
6478 09 Nov 21 nicklas 125     {
6478 09 Nov 21 nicklas 126       throw new InvalidDataException(
6478 09 Nov 21 nicklas 127         "No scan was found for " + getName() +
6478 09 Nov 21 nicklas 128         ". This wizard can't be used until that is corrected.");
6478 09 Nov 21 nicklas 129     }
6478 09 Nov 21 nicklas 130     else if (tmp.size() > 1)
6478 09 Nov 21 nicklas 131     {
6478 09 Nov 21 nicklas 132       throw new InvalidDataException(
6478 09 Nov 21 nicklas 133         "More than one scan item was found for " + getName() +
6478 09 Nov 21 nicklas 134         ". This wizard can't be used until that is corrected.");
6478 09 Nov 21 nicklas 135     }
6478 09 Nov 21 nicklas 136     return Scan.get(tmp.get(0));
6478 09 Nov 21 nicklas 137   }
6478 09 Nov 21 nicklas 138
6478 09 Nov 21 nicklas 139   public BeadChip getBeadChip(DbControl dc)
6478 09 Nov 21 nicklas 140   {
6478 09 Nov 21 nicklas 141     ItemQuery<PhysicalBioAssay> query = getItem().getPhysicalBioAssays();
6478 09 Nov 21 nicklas 142     Subtype.BEAD_CHIP.addFilter(dc, query);
6478 09 Nov 21 nicklas 143     query.include(Reggie.INCLUDE_IN_CURRENT_PROJECT);
6478 09 Nov 21 nicklas 144   
6478 09 Nov 21 nicklas 145     List<PhysicalBioAssay> tmp = query.list(dc);
6478 09 Nov 21 nicklas 146     if (tmp.size() == 0)
6478 09 Nov 21 nicklas 147     {
6478 09 Nov 21 nicklas 148       throw new InvalidDataException(
6478 09 Nov 21 nicklas 149         "No BeadChip item was found for " + getName() +
7209 26 May 23 nicklas 150         ". This wizard can't be used until that is corrected.");
6478 09 Nov 21 nicklas 151     }
6478 09 Nov 21 nicklas 152     else if (tmp.size() > 1)
6478 09 Nov 21 nicklas 153     {
6478 09 Nov 21 nicklas 154       throw new InvalidDataException(
6478 09 Nov 21 nicklas 155         "More than BeadChip item was found for " + getName() +
6478 09 Nov 21 nicklas 156         ". This wizard can't be used until that is corrected.");
6478 09 Nov 21 nicklas 157     }
6478 09 Nov 21 nicklas 158     return BeadChip.get(tmp.get(0));
6478 09 Nov 21 nicklas 159   }
6478 09 Nov 21 nicklas 160
6478 09 Nov 21 nicklas 161   @Override
6478 09 Nov 21 nicklas 162   protected void initJSON(JSONObject json) 
6478 09 Nov 21 nicklas 163   {
6478 09 Nov 21 nicklas 164     super.initJSON(json);
6478 09 Nov 21 nicklas 165   }
6478 09 Nov 21 nicklas 166   
6478 09 Nov 21 nicklas 167 }