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

Code
Comments
Other
Rev Date Author Line
3357 28 May 15 nicklas 1 package net.sf.basedb.reggie.dao;
3357 28 May 15 nicklas 2
3357 28 May 15 nicklas 3 import java.util.ArrayList;
3357 28 May 15 nicklas 4 import java.util.Collection;
3357 28 May 15 nicklas 5 import java.util.List;
7007 25 Jan 23 nicklas 6 import java.util.Map;
3357 28 May 15 nicklas 7
3357 28 May 15 nicklas 8 import org.json.simple.JSONObject;
3357 28 May 15 nicklas 9
7007 25 Jan 23 nicklas 10 import net.sf.basedb.core.BioMaterial;
3357 28 May 15 nicklas 11 import net.sf.basedb.core.DbControl;
3357 28 May 15 nicklas 12 import net.sf.basedb.core.Extract;
3357 28 May 15 nicklas 13 import net.sf.basedb.core.ItemQuery;
3357 28 May 15 nicklas 14 import net.sf.basedb.core.Type;
3357 28 May 15 nicklas 15 import net.sf.basedb.core.query.Expressions;
3357 28 May 15 nicklas 16 import net.sf.basedb.core.query.Hql;
3357 28 May 15 nicklas 17 import net.sf.basedb.core.query.Orders;
3357 28 May 15 nicklas 18 import net.sf.basedb.core.query.Restrictions;
3357 28 May 15 nicklas 19 import net.sf.basedb.reggie.JsonUtil;
3357 28 May 15 nicklas 20 import net.sf.basedb.reggie.Reggie;
3357 28 May 15 nicklas 21
3357 28 May 15 nicklas 22 /**
3357 28 May 15 nicklas 23   Class for loading information that is related to DNA extracts originating from blood samples.
3357 28 May 15 nicklas 24   
3357 28 May 15 nicklas 25   @author nicklas
3357 28 May 15 nicklas 26   @since 3.4
3357 28 May 15 nicklas 27 */
3357 28 May 15 nicklas 28 public class BloodDna 
3357 28 May 15 nicklas 29   extends ReggieItem<Extract>
3357 28 May 15 nicklas 30 {
3357 28 May 15 nicklas 31
3357 28 May 15 nicklas 32
3357 28 May 15 nicklas 33   /**
3357 28 May 15 nicklas 34     Find all DNA items by case name. This method will check for {@link Subtype#BLOOD_DNA}
3357 28 May 15 nicklas 35     extracts with a name matching the case name (eg. xxx.d).
3357 28 May 15 nicklas 36   */
3357 28 May 15 nicklas 37   public static List<BloodDna> findByCaseName(DbControl dc, String name)
3357 28 May 15 nicklas 38   {
3357 28 May 15 nicklas 39     // Get rid of suffixes in the name (eg. 'C' which is used for pre-neoadjuvant forms)
3357 28 May 15 nicklas 40     if (name.length() > 7) name = name.substring(0, 7);
3357 28 May 15 nicklas 41     
3357 28 May 15 nicklas 42     // Look for a dna with the given name 
3357 28 May 15 nicklas 43     ItemQuery<Extract> dnaQuery = Extract.getQuery();
3357 28 May 15 nicklas 44     Subtype.BLOOD_DNA.addFilter(dc, dnaQuery);
3357 28 May 15 nicklas 45     dnaQuery.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
3357 28 May 15 nicklas 46     dnaQuery.restrict(Restrictions.like(Hql.property("name"), Expressions.parameter("name", name+".%", Type.STRING)));
3357 28 May 15 nicklas 47     dnaQuery.order(Orders.asc(Hql.property("name")));
3357 28 May 15 nicklas 48     
3357 28 May 15 nicklas 49     List<Extract> tmp = dnaQuery.list(dc);
3357 28 May 15 nicklas 50     List<BloodDna> dna = new ArrayList<BloodDna>(tmp.size());
3357 28 May 15 nicklas 51     for (Extract e : tmp)
3357 28 May 15 nicklas 52     {
3357 28 May 15 nicklas 53       dna.add(new BloodDna(e));
3357 28 May 15 nicklas 54     }
3357 28 May 15 nicklas 55     return dna;
3357 28 May 15 nicklas 56   }
3357 28 May 15 nicklas 57
3357 28 May 15 nicklas 58   
3357 28 May 15 nicklas 59   /**
3357 28 May 15 nicklas 60     Get a DNA extract when the id is known.
3357 28 May 15 nicklas 61   */
3357 28 May 15 nicklas 62   public static BloodDna getById(DbControl dc, int id)
3357 28 May 15 nicklas 63   {
3357 28 May 15 nicklas 64     return new BloodDna(Extract.getById(dc, id));
3357 28 May 15 nicklas 65   }
3357 28 May 15 nicklas 66   
3357 28 May 15 nicklas 67   public static BloodDna get(Extract extract)
3357 28 May 15 nicklas 68   {
7209 26 May 23 nicklas 69     return extract == null ? null : new BloodDna(extract);
3357 28 May 15 nicklas 70   }
3357 28 May 15 nicklas 71   
3357 28 May 15 nicklas 72   public static List<BloodDna> toBloodDna(Collection<Extract> extracts)
3357 28 May 15 nicklas 73   {
3357 28 May 15 nicklas 74     List<BloodDna> dna = new ArrayList<BloodDna>(extracts.size());
3357 28 May 15 nicklas 75     for (Extract e : extracts)
3357 28 May 15 nicklas 76     {
3357 28 May 15 nicklas 77       dna.add(new BloodDna(e));
3357 28 May 15 nicklas 78     }
3357 28 May 15 nicklas 79     return dna;
3357 28 May 15 nicklas 80   }
3357 28 May 15 nicklas 81   
3357 28 May 15 nicklas 82   private JSONObject jsonWell;
3357 28 May 15 nicklas 83   
3357 28 May 15 nicklas 84   private BloodDna(Extract extract)
3357 28 May 15 nicklas 85   {
3357 28 May 15 nicklas 86     super(extract);
3357 28 May 15 nicklas 87   }  
3357 28 May 15 nicklas 88   
3357 28 May 15 nicklas 89   
3357 28 May 15 nicklas 90   /**
3357 28 May 15 nicklas 91     Get the real extract that represents this DNA in BASE.
3357 28 May 15 nicklas 92   */
3357 28 May 15 nicklas 93   public Extract getExtract()
3357 28 May 15 nicklas 94   {
3357 28 May 15 nicklas 95     return getItem();
3357 28 May 15 nicklas 96   }
3357 28 May 15 nicklas 97
7007 25 Jan 23 nicklas 98   /**
7007 25 Jan 23 nicklas 99     Find the top-most BloodDna item.
7007 25 Jan 23 nicklas 100     @since 4.44
7007 25 Jan 23 nicklas 101   */
7007 25 Jan 23 nicklas 102   public BloodDna getTopDna(DbControl dc)
7007 25 Jan 23 nicklas 103   {
7007 25 Jan 23 nicklas 104     Map<Subtype, BioMaterial> parents = findParentBioMaterial(dc, Subtype.BLOOD_DNA, Subtype.BLOOD);
7007 25 Jan 23 nicklas 105     return BloodDna.get((Extract)parents.get(Subtype.BLOOD_DNA));
7007 25 Jan 23 nicklas 106   }
7007 25 Jan 23 nicklas 107
3357 28 May 15 nicklas 108   @Override
3357 28 May 15 nicklas 109   protected void initJSON(JSONObject json) 
3357 28 May 15 nicklas 110   {
3357 28 May 15 nicklas 111     super.initJSON(json);
3357 28 May 15 nicklas 112     if (jsonWell != null) json.put("bioWell", jsonWell);
3357 28 May 15 nicklas 113     
3357 28 May 15 nicklas 114   }
3357 28 May 15 nicklas 115   
3357 28 May 15 nicklas 116   /**
3357 28 May 15 nicklas 117     Load information about the plate and location the current BloodDNA
3357 28 May 15 nicklas 118     is located on.
3357 28 May 15 nicklas 119   */
3357 28 May 15 nicklas 120   public JSONObject loadBioPlateLocation()
3357 28 May 15 nicklas 121   {
3357 28 May 15 nicklas 122     if (jsonWell == null)
3357 28 May 15 nicklas 123     {
3357 28 May 15 nicklas 124       jsonWell = JsonUtil.getBioWellAsJSON(getItem().getBioWell(), true);
3357 28 May 15 nicklas 125     }
3357 28 May 15 nicklas 126     return jsonWell;
3357 28 May 15 nicklas 127   }
3357 28 May 15 nicklas 128   
3357 28 May 15 nicklas 129 }