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

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