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

Code
Comments
Other
Rev Date Author Line
1745 27 Nov 12 nicklas 1 package net.sf.basedb.reggie.dao;
1745 27 Nov 12 nicklas 2
1745 27 Nov 12 nicklas 3 import java.util.ArrayList;
1745 27 Nov 12 nicklas 4 import java.util.Collection;
1745 27 Nov 12 nicklas 5 import java.util.List;
1745 27 Nov 12 nicklas 6
1745 27 Nov 12 nicklas 7 import org.json.simple.JSONObject;
1745 27 Nov 12 nicklas 8
2050 07 Oct 13 olle 9 import net.sf.basedb.core.AnyToAny;
1745 27 Nov 12 nicklas 10 import net.sf.basedb.core.BioPlate;
1745 27 Nov 12 nicklas 11 import net.sf.basedb.core.BioWell;
1745 27 Nov 12 nicklas 12 import net.sf.basedb.core.DbControl;
1745 27 Nov 12 nicklas 13 import net.sf.basedb.core.Extract;
2050 07 Oct 13 olle 14 import net.sf.basedb.core.File;
4888 05 Jul 18 nicklas 15 import net.sf.basedb.core.Include;
2050 07 Oct 13 olle 16 import net.sf.basedb.core.ItemQuery;
2050 07 Oct 13 olle 17 import net.sf.basedb.core.Type;
2050 07 Oct 13 olle 18 import net.sf.basedb.core.query.Expressions;
2050 07 Oct 13 olle 19 import net.sf.basedb.core.query.Hql;
2917 11 Nov 14 nicklas 20 import net.sf.basedb.core.query.Orders;
2050 07 Oct 13 olle 21 import net.sf.basedb.core.query.Restrictions;
2050 07 Oct 13 olle 22 import net.sf.basedb.reggie.JsonUtil;
2917 11 Nov 14 nicklas 23 import net.sf.basedb.reggie.Reggie;
1745 27 Nov 12 nicklas 24
1745 27 Nov 12 nicklas 25 /**
1745 27 Nov 12 nicklas 26   Class for loading information that is related to mRNA extracts.
1745 27 Nov 12 nicklas 27   
1745 27 Nov 12 nicklas 28   @author nicklas
1867 19 Feb 13 nicklas 29   @since 2.12
1745 27 Nov 12 nicklas 30 */
1745 27 Nov 12 nicklas 31 public class MRna 
1745 27 Nov 12 nicklas 32   extends ReggieItem<Extract>
1745 27 Nov 12 nicklas 33 {
2050 07 Oct 13 olle 34   /**
2050 07 Oct 13 olle 35     Find all mRNA items by case name. This method will check for {@link Subtype#MRNA}
2050 07 Oct 13 olle 36     extracts with a name matching the case name (eg. xxx.r.m).
2050 07 Oct 13 olle 37     @since 2.13
2050 07 Oct 13 olle 38   */
2050 07 Oct 13 olle 39   public static List<MRna> findByCaseName(DbControl dc, String name)
2050 07 Oct 13 olle 40   {
2050 07 Oct 13 olle 41     // Get rid of suffixes in the name (eg. 'C' which is used for pre-neoadjuvant forms)
2050 07 Oct 13 olle 42     if (name.length() > 7) name = name.substring(0, 7);    
1745 27 Nov 12 nicklas 43
2050 07 Oct 13 olle 44     // Look for an mrna with the given name 
2050 07 Oct 13 olle 45     ItemQuery<Extract> mrnaQuery = Extract.getQuery();
2050 07 Oct 13 olle 46     Subtype.MRNA.addFilter(dc, mrnaQuery);
2917 11 Nov 14 nicklas 47     mrnaQuery.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
2050 07 Oct 13 olle 48     mrnaQuery.restrict(Restrictions.like(Hql.property("name"), Expressions.parameter("name", name+".%", Type.STRING)));
2917 11 Nov 14 nicklas 49     mrnaQuery.order(Orders.asc(Hql.property("name")));
2050 07 Oct 13 olle 50   
2050 07 Oct 13 olle 51     List<Extract> tmp = mrnaQuery.list(dc);
2050 07 Oct 13 olle 52     List<MRna> mrna = new ArrayList<MRna>(tmp.size());
2050 07 Oct 13 olle 53     for (Extract e : tmp)
2050 07 Oct 13 olle 54     {
2050 07 Oct 13 olle 55       mrna.add(new MRna(e));
2050 07 Oct 13 olle 56     }
2050 07 Oct 13 olle 57     return mrna;
2050 07 Oct 13 olle 58   }
2050 07 Oct 13 olle 59
2050 07 Oct 13 olle 60
1745 27 Nov 12 nicklas 61   /**
1745 27 Nov 12 nicklas 62     Get a mRNA extract when the id is known.
1745 27 Nov 12 nicklas 63   */
1745 27 Nov 12 nicklas 64   public static MRna getById(DbControl dc, int id)
1745 27 Nov 12 nicklas 65   {
1745 27 Nov 12 nicklas 66     return new MRna(Extract.getById(dc, id));
1745 27 Nov 12 nicklas 67   }
1745 27 Nov 12 nicklas 68   
2906 07 Nov 14 nicklas 69   /**
2906 07 Nov 14 nicklas 70     @since 2.18
2906 07 Nov 14 nicklas 71   */
2906 07 Nov 14 nicklas 72   public static MRna get(Extract extract)
2906 07 Nov 14 nicklas 73   {
2906 07 Nov 14 nicklas 74     return new MRna(extract);
2906 07 Nov 14 nicklas 75   }
2906 07 Nov 14 nicklas 76
1745 27 Nov 12 nicklas 77   
1745 27 Nov 12 nicklas 78   public static List<MRna> toList(Collection<Extract> extracts)
1745 27 Nov 12 nicklas 79   {
1745 27 Nov 12 nicklas 80     List<MRna> mrna = new ArrayList<MRna>(extracts.size());
1745 27 Nov 12 nicklas 81     for (Extract e : extracts)
1745 27 Nov 12 nicklas 82     {
1745 27 Nov 12 nicklas 83       mrna.add(new MRna(e));
1745 27 Nov 12 nicklas 84     }
1745 27 Nov 12 nicklas 85     return mrna;
1745 27 Nov 12 nicklas 86   }
1745 27 Nov 12 nicklas 87   
1745 27 Nov 12 nicklas 88   private JSONObject jsonWell;
1745 27 Nov 12 nicklas 89   
1745 27 Nov 12 nicklas 90   private MRna(Extract extract)
1745 27 Nov 12 nicklas 91   {
1745 27 Nov 12 nicklas 92     super(extract);
1745 27 Nov 12 nicklas 93
1745 27 Nov 12 nicklas 94   }  
1745 27 Nov 12 nicklas 95   
1745 27 Nov 12 nicklas 96   /**
1745 27 Nov 12 nicklas 97     Get the real extract that represents this mRNA in BASE.
1745 27 Nov 12 nicklas 98   */
1745 27 Nov 12 nicklas 99   public Extract getExtract()
1745 27 Nov 12 nicklas 100   {
1745 27 Nov 12 nicklas 101     return getItem();
1745 27 Nov 12 nicklas 102   }
1745 27 Nov 12 nicklas 103
4888 05 Jul 18 nicklas 104   /**
4888 05 Jul 18 nicklas 105     Find the next name to give a "CDNA" child item. This assumes that
4888 05 Jul 18 nicklas 106     all child items are using the naming convention. foo.c, foo.c, and
4888 05 Jul 18 nicklas 107     so on. NOTE! The first child item have no number!
4888 05 Jul 18 nicklas 108     @return The next unused name
4888 05 Jul 18 nicklas 109     @since 4.19
4888 05 Jul 18 nicklas 110   */
4888 05 Jul 18 nicklas 111   public String getNextCdnaName(DbControl dc)
4888 05 Jul 18 nicklas 112   {
4888 05 Jul 18 nicklas 113     Extract mrna = getItem();
6193 30 Mar 21 nicklas 114     ItemQuery<Extract> query = null;
6193 30 Mar 21 nicklas 115     if (mrna.isInDatabase())
6193 30 Mar 21 nicklas 116     {
6193 30 Mar 21 nicklas 117       query = mrna.getChildExtracts();
6193 30 Mar 21 nicklas 118       Subtype.CDNA.addFilter(dc, query);
6193 30 Mar 21 nicklas 119       query.setIncludes(Include.ALL);
6193 30 Mar 21 nicklas 120     }
4888 05 Jul 18 nicklas 121     return getNextChildItemName(dc, query, Subtype.CDNA.getItemSuffix(), true);
4888 05 Jul 18 nicklas 122   }
4888 05 Jul 18 nicklas 123
4888 05 Jul 18 nicklas 124   
1745 27 Nov 12 nicklas 125   @Override
1745 27 Nov 12 nicklas 126   protected void initJSON(JSONObject json) 
1745 27 Nov 12 nicklas 127   {
1745 27 Nov 12 nicklas 128     super.initJSON(json);
1745 27 Nov 12 nicklas 129     if (jsonWell != null) json.put("bioWell", jsonWell);
1898 07 Mar 13 nicklas 130     json.put("externalId", getExtract().getExternalId());
1745 27 Nov 12 nicklas 131   }
1745 27 Nov 12 nicklas 132
1745 27 Nov 12 nicklas 133   public Rna getRna()
1745 27 Nov 12 nicklas 134   {
1745 27 Nov 12 nicklas 135     Extract mrna = getItem();    
1745 27 Nov 12 nicklas 136     Extract rna = (Extract)mrna.getParent();
1745 27 Nov 12 nicklas 137     return Rna.get(rna);
1745 27 Nov 12 nicklas 138   }
1745 27 Nov 12 nicklas 139   
1745 27 Nov 12 nicklas 140   /**
1745 27 Nov 12 nicklas 141     Load information about the plate and location the current mRNA
1745 27 Nov 12 nicklas 142     is located on.
1745 27 Nov 12 nicklas 143   */
1745 27 Nov 12 nicklas 144   public JSONObject loadBioPlateLocation()
1745 27 Nov 12 nicklas 145   {
2050 07 Oct 13 olle 146     if (jsonWell == null)
2050 07 Oct 13 olle 147     {
2134 11 Nov 13 nicklas 148       jsonWell = JsonUtil.getBioWellAsJSON(getItem().getBioWell(), true);
2050 07 Oct 13 olle 149     }
2050 07 Oct 13 olle 150     return jsonWell;
2050 07 Oct 13 olle 151   }
1745 27 Nov 12 nicklas 152
2050 07 Oct 13 olle 153   /**
2050 07 Oct 13 olle 154     Load information about an optional PDF-file for the plate for
2050 07 Oct 13 olle 155     the current mRNA.
2050 07 Oct 13 olle 156   
2050 07 Oct 13 olle 157     @param dc DbControl The DbControl to use.
2050 07 Oct 13 olle 158     @return JSONObject JSON object with info on optional plate PDF-file.
2050 07 Oct 13 olle 159    */
2050 07 Oct 13 olle 160   public JSONObject loadBioPlatePdf(DbControl dc)
2050 07 Oct 13 olle 161   {
1745 27 Nov 12 nicklas 162     Extract mrna = getItem();
1745 27 Nov 12 nicklas 163     BioWell well = mrna.getBioWell();
2050 07 Oct 13 olle 164     JSONObject jsonPdf = null;
1745 27 Nov 12 nicklas 165
1745 27 Nov 12 nicklas 166     if (well != null)
1745 27 Nov 12 nicklas 167     {
1745 27 Nov 12 nicklas 168       BioPlate plate = well.getPlate();
2050 07 Oct 13 olle 169       if (plate != null)
2050 07 Oct 13 olle 170       {
2050 07 Oct 13 olle 171         try
2050 07 Oct 13 olle 172         {
2050 07 Oct 13 olle 173           AnyToAny pdf = AnyToAny.getByName(dc, plate, "PDF printout");
2050 07 Oct 13 olle 174           File pdfFile = File.getById(dc, pdf.getToId());
2050 07 Oct 13 olle 175           jsonPdf = new JSONObject();
2050 07 Oct 13 olle 176           jsonPdf.put("id", pdfFile.getId());
2050 07 Oct 13 olle 177           jsonPdf.put("name", pdfFile.getName());
2050 07 Oct 13 olle 178         }
2050 07 Oct 13 olle 179         catch (RuntimeException ex)
2050 07 Oct 13 olle 180       {} // Typically, ItemNotFound if no PDF exists
2050 07 Oct 13 olle 181       }
1745 27 Nov 12 nicklas 182     }
1745 27 Nov 12 nicklas 183
2050 07 Oct 13 olle 184     return jsonPdf;
1745 27 Nov 12 nicklas 185   }
1745 27 Nov 12 nicklas 186 }