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

Code
Comments
Other
Rev Date Author Line
7389 01 Nov 23 nicklas 1 package net.sf.basedb.reggie.dao;
7389 01 Nov 23 nicklas 2
7389 01 Nov 23 nicklas 3 import java.util.ArrayList;
7389 01 Nov 23 nicklas 4 import java.util.Collection;
7389 01 Nov 23 nicklas 5 import java.util.List;
7389 01 Nov 23 nicklas 6
7389 01 Nov 23 nicklas 7 import org.json.simple.JSONObject;
7389 01 Nov 23 nicklas 8
7389 01 Nov 23 nicklas 9 import net.sf.basedb.core.DbControl;
7389 01 Nov 23 nicklas 10 import net.sf.basedb.core.DerivedBioAssay;
7389 01 Nov 23 nicklas 11 import net.sf.basedb.core.File;
7389 01 Nov 23 nicklas 12 import net.sf.basedb.core.FileSetMember;
7389 01 Nov 23 nicklas 13 import net.sf.basedb.core.InvalidDataException;
7389 01 Nov 23 nicklas 14 import net.sf.basedb.core.ItemQuery;
7389 01 Nov 23 nicklas 15 import net.sf.basedb.core.Job;
7389 01 Nov 23 nicklas 16 import net.sf.basedb.core.Type;
7389 01 Nov 23 nicklas 17 import net.sf.basedb.core.query.Expressions;
7389 01 Nov 23 nicklas 18 import net.sf.basedb.core.query.Hql;
7389 01 Nov 23 nicklas 19 import net.sf.basedb.core.query.Orders;
7389 01 Nov 23 nicklas 20 import net.sf.basedb.core.query.Restrictions;
7389 01 Nov 23 nicklas 21 import net.sf.basedb.reggie.Reggie;
7389 01 Nov 23 nicklas 22
7389 01 Nov 23 nicklas 23 /**
7389 01 Nov 23 nicklas 24   Class for loading information that is related to PanelOfNormal items.
7389 01 Nov 23 nicklas 25   
7389 01 Nov 23 nicklas 26   @author nicklas
7389 01 Nov 23 nicklas 27   @since 4.50
7389 01 Nov 23 nicklas 28 */
7389 01 Nov 23 nicklas 29 public class PanelOfNormal 
7389 01 Nov 23 nicklas 30   extends ReggieItem<DerivedBioAssay>
7389 01 Nov 23 nicklas 31 {
7389 01 Nov 23 nicklas 32
7389 01 Nov 23 nicklas 33   
7389 01 Nov 23 nicklas 34   /**
7389 01 Nov 23 nicklas 35     Find all panel-of-normal items by case name. This method will check for {@link Subtype#PANEL_OF_NORMAL}
7389 01 Nov 23 nicklas 36     derived bioassays with a name matching the case name (eg. xxx.pon).
7389 01 Nov 23 nicklas 37    */
7389 01 Nov 23 nicklas 38   public static List<PanelOfNormal> findByCaseName(DbControl dc, String name)
7389 01 Nov 23 nicklas 39   {
7389 01 Nov 23 nicklas 40     // Get rid of suffixes in the name (eg. 'C' which is used for pre-neoadjuvant forms)
7389 01 Nov 23 nicklas 41     if (name.length() > 7) name = name.substring(0, 7);    
7389 01 Nov 23 nicklas 42   
7389 01 Nov 23 nicklas 43     // Look for a library with the given name 
7389 01 Nov 23 nicklas 44     ItemQuery<DerivedBioAssay> query = DerivedBioAssay.getQuery();
7389 01 Nov 23 nicklas 45     Subtype.PANEL_OF_NORMAL.addFilter(dc, query);
7389 01 Nov 23 nicklas 46     query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
7389 01 Nov 23 nicklas 47     query.restrict(Restrictions.like(Hql.property("name"), Expressions.parameter("name", name+".%", Type.STRING)));
7389 01 Nov 23 nicklas 48     query.order(Orders.asc(Hql.property("name")));
7389 01 Nov 23 nicklas 49   
7389 01 Nov 23 nicklas 50     List<DerivedBioAssay> tmp = query.list(dc);
7389 01 Nov 23 nicklas 51     return toList(tmp);
7389 01 Nov 23 nicklas 52   }
7389 01 Nov 23 nicklas 53   
7389 01 Nov 23 nicklas 54   /**
7389 01 Nov 23 nicklas 55     Get panel-of-normal item when the id is known.
7389 01 Nov 23 nicklas 56   */
7389 01 Nov 23 nicklas 57   public static PanelOfNormal getById(DbControl dc, int id)
7389 01 Nov 23 nicklas 58   {
7389 01 Nov 23 nicklas 59     return new PanelOfNormal(DerivedBioAssay.getById(dc, id));
7389 01 Nov 23 nicklas 60   }
7389 01 Nov 23 nicklas 61   
7389 01 Nov 23 nicklas 62   public static PanelOfNormal getByName(DbControl dc, String name)
7389 01 Nov 23 nicklas 63   {
7389 01 Nov 23 nicklas 64     ItemQuery<DerivedBioAssay> query = DerivedBioAssay.getQuery();
7389 01 Nov 23 nicklas 65     query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
7389 01 Nov 23 nicklas 66     Subtype.PANEL_OF_NORMAL.addFilter(dc, query);
7389 01 Nov 23 nicklas 67     query.restrict(Restrictions.eq(Hql.property("name"), Expressions.string(name)));
7389 01 Nov 23 nicklas 68     
7389 01 Nov 23 nicklas 69     List<DerivedBioAssay> list = query.list(dc);
7389 01 Nov 23 nicklas 70     if (list.size() > 1)
7389 01 Nov 23 nicklas 71     {
7389 01 Nov 23 nicklas 72       throw new InvalidDataException(
7389 01 Nov 23 nicklas 73           "More than one item with the name " + name + " was found. " +
7389 01 Nov 23 nicklas 74           "This wizard can't be used until that is corrected.");
7389 01 Nov 23 nicklas 75     }
7389 01 Nov 23 nicklas 76     PanelOfNormal meth = null;
7389 01 Nov 23 nicklas 77     if (list.size() == 1)
7389 01 Nov 23 nicklas 78     {
7389 01 Nov 23 nicklas 79       meth = new PanelOfNormal(list.get(0));
7389 01 Nov 23 nicklas 80     }
7389 01 Nov 23 nicklas 81     return meth;
7389 01 Nov 23 nicklas 82   }
7389 01 Nov 23 nicklas 83   
7389 01 Nov 23 nicklas 84   public static PanelOfNormal getByJob(DbControl dc, Job job)
7389 01 Nov 23 nicklas 85   {
7389 01 Nov 23 nicklas 86     ItemQuery<DerivedBioAssay> query = DerivedBioAssay.getQuery();
7389 01 Nov 23 nicklas 87     query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
7389 01 Nov 23 nicklas 88     Subtype.PANEL_OF_NORMAL.addFilter(dc, query);
7389 01 Nov 23 nicklas 89     query.restrict(Restrictions.eq(Hql.property("job"), Hql.entity(job)));
7389 01 Nov 23 nicklas 90
7389 01 Nov 23 nicklas 91     List<DerivedBioAssay> list = query.list(dc);
7389 01 Nov 23 nicklas 92     if (list.size() > 1)
7389 01 Nov 23 nicklas 93     {
7389 01 Nov 23 nicklas 94       throw new InvalidDataException(
7389 01 Nov 23 nicklas 95           "More than one item with job " + job.getName() + " was found. " +
7389 01 Nov 23 nicklas 96           "This wizard can't be used until that is corrected.");
7389 01 Nov 23 nicklas 97     }
7389 01 Nov 23 nicklas 98     PanelOfNormal cn = null;
7389 01 Nov 23 nicklas 99     if (list.size() == 1)
7389 01 Nov 23 nicklas 100     {
7389 01 Nov 23 nicklas 101       cn = new PanelOfNormal(list.get(0));
7389 01 Nov 23 nicklas 102     }
7389 01 Nov 23 nicklas 103     return cn;
7389 01 Nov 23 nicklas 104   }
7389 01 Nov 23 nicklas 105
7389 01 Nov 23 nicklas 106   
7389 01 Nov 23 nicklas 107   public static List<PanelOfNormal> toList(Collection<DerivedBioAssay> bioassays)
7389 01 Nov 23 nicklas 108   {
7389 01 Nov 23 nicklas 109     List<PanelOfNormal> lib = new ArrayList<PanelOfNormal>(bioassays.size());
7389 01 Nov 23 nicklas 110     for (DerivedBioAssay ba : bioassays)
7389 01 Nov 23 nicklas 111     {
7389 01 Nov 23 nicklas 112       lib.add(new PanelOfNormal(ba));
7389 01 Nov 23 nicklas 113     }
7389 01 Nov 23 nicklas 114     return lib;
7389 01 Nov 23 nicklas 115   }
7389 01 Nov 23 nicklas 116   
7389 01 Nov 23 nicklas 117   private PanelOfNormal(DerivedBioAssay bioAssay)
7389 01 Nov 23 nicklas 118   {
7389 01 Nov 23 nicklas 119     super(bioAssay);
7389 01 Nov 23 nicklas 120
7389 01 Nov 23 nicklas 121   }  
7389 01 Nov 23 nicklas 122   
7389 01 Nov 23 nicklas 123   /**
7389 01 Nov 23 nicklas 124     Get the derived bioassay that represents the copy-number item in BASE.
7389 01 Nov 23 nicklas 125   */
7389 01 Nov 23 nicklas 126   public DerivedBioAssay getDerivedBioAssay()
7389 01 Nov 23 nicklas 127   {
7389 01 Nov 23 nicklas 128     return getItem();
7389 01 Nov 23 nicklas 129   }
7389 01 Nov 23 nicklas 130
7389 01 Nov 23 nicklas 131   /**
7389 01 Nov 23 nicklas 132     Get the parent normal alignment item.
7389 01 Nov 23 nicklas 133   */
7389 01 Nov 23 nicklas 134   public AlignedSequences getNormalAlignment(DbControl dc)
7389 01 Nov 23 nicklas 135   {
7389 01 Nov 23 nicklas 136     ItemQuery<DerivedBioAssay> query = getItem().getParents();
7389 01 Nov 23 nicklas 137     Subtype.ALIGNED_SEQUENCES.addFilter(dc, query);
7389 01 Nov 23 nicklas 138     Pipeline.DNA_NORMAL_WGS.addFilter(dc, query);
7389 01 Nov 23 nicklas 139     query.include(Reggie.INCLUDE_IN_CURRENT_PROJECT);
7389 01 Nov 23 nicklas 140   
7389 01 Nov 23 nicklas 141     List<DerivedBioAssay> tmp = query.list(dc);
7389 01 Nov 23 nicklas 142     if (tmp.size() == 0)
7389 01 Nov 23 nicklas 143     {
7389 01 Nov 23 nicklas 144       throw new InvalidDataException(
7389 01 Nov 23 nicklas 145         "No normal alignment was found for " + getName() +
7389 01 Nov 23 nicklas 146         ". This wizard can't be used until that is corrected.");
7389 01 Nov 23 nicklas 147     }
7389 01 Nov 23 nicklas 148     else if (tmp.size() > 1)
7389 01 Nov 23 nicklas 149     {
7389 01 Nov 23 nicklas 150       throw new InvalidDataException(
7389 01 Nov 23 nicklas 151         "More than one normal alignment item was found for " + getName() +
7389 01 Nov 23 nicklas 152         ". This wizard can't be used until that is corrected.");
7389 01 Nov 23 nicklas 153     }
7389 01 Nov 23 nicklas 154     return AlignedSequences.get(tmp.get(0));
7389 01 Nov 23 nicklas 155   }
7389 01 Nov 23 nicklas 156
7389 01 Nov 23 nicklas 157   /**
7389 01 Nov 23 nicklas 158     Get the file of the given type.
7389 01 Nov 23 nicklas 159   */
7389 01 Nov 23 nicklas 160   public File getFile(DbControl dc, Datafiletype fileType)
7389 01 Nov 23 nicklas 161   {
7389 01 Nov 23 nicklas 162     DerivedBioAssay item = getItem();
7389 01 Nov 23 nicklas 163     File f = null;
7389 01 Nov 23 nicklas 164     if (item.hasFileSet())
7389 01 Nov 23 nicklas 165     {
7389 01 Nov 23 nicklas 166       FileSetMember member = item.getFileSet().getMember(fileType.load(dc));
7389 01 Nov 23 nicklas 167       if (member != null) f = member.getFile();
7389 01 Nov 23 nicklas 168     }
7389 01 Nov 23 nicklas 169     return f;
7389 01 Nov 23 nicklas 170   }
7389 01 Nov 23 nicklas 171
7389 01 Nov 23 nicklas 172   
7389 01 Nov 23 nicklas 173   @Override
7389 01 Nov 23 nicklas 174   protected void initJSON(JSONObject json) 
7389 01 Nov 23 nicklas 175   {
7389 01 Nov 23 nicklas 176     super.initJSON(json);
7389 01 Nov 23 nicklas 177   }
7389 01 Nov 23 nicklas 178
7389 01 Nov 23 nicklas 179 }