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

Code
Comments
Other
Rev Date Author Line
2117 04 Nov 13 nicklas 1 package net.sf.basedb.reggie.dao;
2117 04 Nov 13 nicklas 2
2117 04 Nov 13 nicklas 3 import java.util.ArrayList;
2117 04 Nov 13 nicklas 4 import java.util.Collection;
2117 04 Nov 13 nicklas 5 import java.util.List;
2117 04 Nov 13 nicklas 6
2117 04 Nov 13 nicklas 7 import org.json.simple.JSONArray;
2117 04 Nov 13 nicklas 8 import org.json.simple.JSONObject;
2117 04 Nov 13 nicklas 9
3367 05 Jun 15 nicklas 10 import net.sf.basedb.core.AnyToAny;
2117 04 Nov 13 nicklas 11 import net.sf.basedb.core.BioPlate;
2117 04 Nov 13 nicklas 12 import net.sf.basedb.core.DbControl;
3367 05 Jun 15 nicklas 13 import net.sf.basedb.core.File;
3367 05 Jun 15 nicklas 14 import net.sf.basedb.core.Item;
2117 04 Nov 13 nicklas 15 import net.sf.basedb.core.ItemQuery;
2117 04 Nov 13 nicklas 16 import net.sf.basedb.core.Sample;
2125 08 Nov 13 nicklas 17 import net.sf.basedb.core.query.Annotations;
2125 08 Nov 13 nicklas 18 import net.sf.basedb.core.query.Expressions;
2117 04 Nov 13 nicklas 19 import net.sf.basedb.core.query.Hql;
2125 08 Nov 13 nicklas 20 import net.sf.basedb.core.query.Orders;
2117 04 Nov 13 nicklas 21 import net.sf.basedb.core.query.Restrictions;
2117 04 Nov 13 nicklas 22 import net.sf.basedb.reggie.JsonUtil;
2117 04 Nov 13 nicklas 23
2117 04 Nov 13 nicklas 24 /**
2117 04 Nov 13 nicklas 25   Class for loading information that is related to HE glass (bioplates).
2117 04 Nov 13 nicklas 26   
2117 04 Nov 13 nicklas 27   @author nicklas
2117 04 Nov 13 nicklas 28   @since 2.14
2117 04 Nov 13 nicklas 29 */
2117 04 Nov 13 nicklas 30 public class HeGlass 
2117 04 Nov 13 nicklas 31   extends ReggieItem<BioPlate>
2117 04 Nov 13 nicklas 32 {
2117 04 Nov 13 nicklas 33
2117 04 Nov 13 nicklas 34   /**
2117 04 Nov 13 nicklas 35     Get a Library extract when the id is known.
2117 04 Nov 13 nicklas 36   */
2117 04 Nov 13 nicklas 37   public static HeGlass getById(DbControl dc, int id)
2117 04 Nov 13 nicklas 38   {
2117 04 Nov 13 nicklas 39     return new HeGlass(BioPlate.getById(dc, id));
2117 04 Nov 13 nicklas 40   }
2117 04 Nov 13 nicklas 41   
2117 04 Nov 13 nicklas 42   
2117 04 Nov 13 nicklas 43   public static List<HeGlass> toList(Collection<BioPlate> plates)
2117 04 Nov 13 nicklas 44   {
2117 04 Nov 13 nicklas 45     List<HeGlass> heGlass = new ArrayList<HeGlass>(plates.size());
2117 04 Nov 13 nicklas 46     for (BioPlate plate : plates)
2117 04 Nov 13 nicklas 47     {
2117 04 Nov 13 nicklas 48       heGlass.add(new HeGlass(plate));
2117 04 Nov 13 nicklas 49     }
2117 04 Nov 13 nicklas 50     return heGlass;
2117 04 Nov 13 nicklas 51   }
2117 04 Nov 13 nicklas 52   
2117 04 Nov 13 nicklas 53   private JSONArray jsonSamples;
2117 04 Nov 13 nicklas 54   
2117 04 Nov 13 nicklas 55   private HeGlass(BioPlate heGlass)
2117 04 Nov 13 nicklas 56   {
2117 04 Nov 13 nicklas 57     super(heGlass);
2117 04 Nov 13 nicklas 58
2117 04 Nov 13 nicklas 59   }  
2117 04 Nov 13 nicklas 60   
2117 04 Nov 13 nicklas 61   /**
2117 04 Nov 13 nicklas 62     Get the real bioplate that represents this HE glass in BASE.
2117 04 Nov 13 nicklas 63   */
2117 04 Nov 13 nicklas 64   public BioPlate getBioPlate()
2117 04 Nov 13 nicklas 65   {
2117 04 Nov 13 nicklas 66     return getItem();
2117 04 Nov 13 nicklas 67   }
2117 04 Nov 13 nicklas 68
2117 04 Nov 13 nicklas 69   @Override
2117 04 Nov 13 nicklas 70   protected void initJSON(JSONObject json) 
2117 04 Nov 13 nicklas 71   {
2117 04 Nov 13 nicklas 72     super.initJSON(json);
2117 04 Nov 13 nicklas 73     BioPlate heGlass = getBioPlate();
2117 04 Nov 13 nicklas 74     
2117 04 Nov 13 nicklas 75     json.put("tray", heGlass.getTray());
2117 04 Nov 13 nicklas 76     json.put("position", heGlass.getPosition());
2123 06 Nov 13 nicklas 77     json.put("comments", heGlass.getDescription());
2117 04 Nov 13 nicklas 78     
2117 04 Nov 13 nicklas 79     if (jsonSamples != null)
2117 04 Nov 13 nicklas 80     {
2117 04 Nov 13 nicklas 81       json.put("samples", jsonSamples);
2117 04 Nov 13 nicklas 82     }
2117 04 Nov 13 nicklas 83   }
2117 04 Nov 13 nicklas 84
2117 04 Nov 13 nicklas 85   public void loadSampleScores(DbControl dc)
2117 04 Nov 13 nicklas 86   {
2117 04 Nov 13 nicklas 87     if   (jsonSamples != null) return;
2117 04 Nov 13 nicklas 88     
2117 04 Nov 13 nicklas 89     jsonSamples = new JSONArray();
2117 04 Nov 13 nicklas 90     
2117 04 Nov 13 nicklas 91     BioPlate heGlass = getBioPlate();
2117 04 Nov 13 nicklas 92     ItemQuery<Sample> query = Sample.getQuery();
2117 04 Nov 13 nicklas 93     query.join(Hql.innerJoin("bioWell", "bw"));
2117 04 Nov 13 nicklas 94     query.join(Hql.innerJoin("bw", "bioPlate", "bp"));
2117 04 Nov 13 nicklas 95     query.restrict(Restrictions.eq(Hql.alias("bp"), Hql.entity(heGlass)));
2125 08 Nov 13 nicklas 96     query.order(Orders.asc(Hql.property("bw", "row")));
2125 08 Nov 13 nicklas 97     query.order(Orders.asc(Hql.property("bw", "column")));
2117 04 Nov 13 nicklas 98     
2117 04 Nov 13 nicklas 99     for (Sample s : query.list(dc))
2117 04 Nov 13 nicklas 100     {
2117 04 Nov 13 nicklas 101       JSONObject jsonSample = new JSONObject();
2117 04 Nov 13 nicklas 102       jsonSample.put("id", s.getId());
2117 04 Nov 13 nicklas 103       jsonSample.put("name", s.getName());
2117 04 Nov 13 nicklas 104       jsonSample.put("well", JsonUtil.getBioWellAsJSON(s.getBioWell(), false));
2123 06 Nov 13 nicklas 105       jsonSample.put("comments", s.getDescription());
2117 04 Nov 13 nicklas 106       
2117 04 Nov 13 nicklas 107       jsonSample.put("GoodStain", Annotationtype.GOOD_STAIN.getAnnotationValue(dc, s));
3169 06 Mar 15 nicklas 108       jsonSample.put("IHCQuality", Annotationtype.IHC_QUALITY.getAnnotationValue(dc, s));
2117 04 Nov 13 nicklas 109       jsonSample.put("ScoreComplete", Annotationtype.SCORE_COMPLETE.getAnnotationValue(dc, s));
2117 04 Nov 13 nicklas 110       jsonSample.put("ScoreInvasiveCancer", Annotationtype.SCORE_INVASIVE_CANCER.getAnnotationValue(dc, s));
2117 04 Nov 13 nicklas 111       jsonSample.put("ScoreInsituCancer", Annotationtype.SCORE_INSITU_CANCER.getAnnotationValue(dc, s));
2117 04 Nov 13 nicklas 112       jsonSample.put("ScoreLymphocytes", Annotationtype.SCORE_LYMPHOCYTES.getAnnotationValue(dc, s));
2117 04 Nov 13 nicklas 113       jsonSample.put("ScoreNormal", Annotationtype.SCORE_NORMAL.getAnnotationValue(dc, s));
2117 04 Nov 13 nicklas 114       jsonSample.put("ScoreStroma", Annotationtype.SCORE_STROMA.getAnnotationValue(dc, s));
2117 04 Nov 13 nicklas 115       jsonSample.put("ScoreFat", Annotationtype.SCORE_FAT.getAnnotationValue(dc, s));
2117 04 Nov 13 nicklas 116       
3367 05 Jun 15 nicklas 117       // Image
3367 05 Jun 15 nicklas 118       try
3367 05 Jun 15 nicklas 119       {
3367 05 Jun 15 nicklas 120         AnyToAny image = AnyToAny.getByName(dc, s, "image");
3367 05 Jun 15 nicklas 121         if (image.getToType() == Item.FILE)
3367 05 Jun 15 nicklas 122         {
3367 05 Jun 15 nicklas 123           File img = (File)image.getTo();
3367 05 Jun 15 nicklas 124           jsonSample.put("image", img.getPath().toString());
6055 13 Nov 20 nicklas 125           jsonSample.put("imageId", img.getId());
3367 05 Jun 15 nicklas 126         }
3367 05 Jun 15 nicklas 127       }
3367 05 Jun 15 nicklas 128       catch (RuntimeException ex)
3367 05 Jun 15 nicklas 129       {}
3367 05 Jun 15 nicklas 130       
2117 04 Nov 13 nicklas 131       jsonSamples.add(jsonSample);
2117 04 Nov 13 nicklas 132     }
2125 08 Nov 13 nicklas 133   }
2125 08 Nov 13 nicklas 134   
2125 08 Nov 13 nicklas 135   public long countUncompletedSamples(DbControl dc)
2125 08 Nov 13 nicklas 136   {
2125 08 Nov 13 nicklas 137     BioPlate heGlass = getBioPlate();
2125 08 Nov 13 nicklas 138     ItemQuery<Sample> query = Sample.getQuery();
2125 08 Nov 13 nicklas 139     query.join(Hql.innerJoin("bioWell", "bw"));
2125 08 Nov 13 nicklas 140     query.join(Hql.innerJoin("bw", "bioPlate", "bp"));
2125 08 Nov 13 nicklas 141     query.restrict(Restrictions.eq(Hql.alias("bp"), Hql.entity(heGlass)));
2125 08 Nov 13 nicklas 142     query.join(Annotations.leftJoin(null, Annotationtype.SCORE_COMPLETE.load(dc), "sc"));
2125 08 Nov 13 nicklas 143     query.join(Annotations.leftJoin(null, Annotationtype.GOOD_STAIN.load(dc), "gs"));
2125 08 Nov 13 nicklas 144     query.restrict(
2125 08 Nov 13 nicklas 145       Restrictions.or(
2125 08 Nov 13 nicklas 146         Restrictions.eq(Hql.alias("sc"), Expressions.bool(false)),
2125 08 Nov 13 nicklas 147         Restrictions.and(
2125 08 Nov 13 nicklas 148             Restrictions.eq(Hql.alias("gs"), Expressions.bool(true)),
2125 08 Nov 13 nicklas 149             Restrictions.eq(Hql.alias("sc"), null)
2125 08 Nov 13 nicklas 150           )
2125 08 Nov 13 nicklas 151         ));
2117 04 Nov 13 nicklas 152     
2125 08 Nov 13 nicklas 153     query.order(Orders.asc(Hql.property("bw", "row")));
2125 08 Nov 13 nicklas 154     query.order(Orders.asc(Hql.property("bw", "column")));
2125 08 Nov 13 nicklas 155     return query.count(dc);
2117 04 Nov 13 nicklas 156   }
2117 04 Nov 13 nicklas 157
2117 04 Nov 13 nicklas 158 }