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

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