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

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