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

Code
Comments
Other
Rev Date Author Line
2933 14 Nov 14 olle 1 package net.sf.basedb.meludi.dao;
2933 14 Nov 14 olle 2
2933 14 Nov 14 olle 3 import java.util.ArrayList;
2933 14 Nov 14 olle 4 import java.util.List;
2933 14 Nov 14 olle 5
2933 14 Nov 14 olle 6 import org.json.simple.JSONObject;
2933 14 Nov 14 olle 7
2933 14 Nov 14 olle 8 import net.sf.basedb.core.ArrayDesign;
2933 14 Nov 14 olle 9 import net.sf.basedb.core.DbControl;
2933 14 Nov 14 olle 10 import net.sf.basedb.core.InvalidDataException;
2933 14 Nov 14 olle 11 import net.sf.basedb.core.ItemQuery;
2933 14 Nov 14 olle 12 import net.sf.basedb.core.Type;
2933 14 Nov 14 olle 13 import net.sf.basedb.core.query.Expressions;
2933 14 Nov 14 olle 14 import net.sf.basedb.core.query.Hql;
2933 14 Nov 14 olle 15 import net.sf.basedb.core.query.Orders;
2933 14 Nov 14 olle 16 import net.sf.basedb.core.query.Restrictions;
2933 14 Nov 14 olle 17 import net.sf.basedb.meludi.Meludi;
2933 14 Nov 14 olle 18
2933 14 Nov 14 olle 19 /**
2933 14 Nov 14 olle 20   Class for loading information about array designs.
2933 14 Nov 14 olle 21   
2933 14 Nov 14 olle 22   @author nicklas
2933 14 Nov 14 olle 23   @since 2.17
2933 14 Nov 14 olle 24 */
2933 14 Nov 14 olle 25 public class Arraydesign
2933 14 Nov 14 olle 26   extends MeludiItem<ArrayDesign>
2933 14 Nov 14 olle 27 {
2933 14 Nov 14 olle 28
2933 14 Nov 14 olle 29
2933 14 Nov 14 olle 30   /**
2933 14 Nov 14 olle 31     Find all array design for the given sequencing platform variant.
2933 14 Nov 14 olle 32   */
2933 14 Nov 14 olle 33   public static List<Arraydesign> findByPlatformVariant(DbControl dc, String variantId)
2933 14 Nov 14 olle 34   {
2933 14 Nov 14 olle 35     ItemQuery<ArrayDesign> query = ArrayDesign.getQuery();
2933 14 Nov 14 olle 36     query.setIncludes(Meludi.INCLUDE_IN_CURRENT_PROJECT);
2933 14 Nov 14 olle 37     query.join(Hql.innerJoin("variant", "v"));
2933 14 Nov 14 olle 38     query.restrict(Restrictions.eq(Hql.property("v", "externalId"), Expressions.string(variantId)));
2933 14 Nov 14 olle 39     query.order(Orders.asc(Hql.property("name")));
2933 14 Nov 14 olle 40     
2933 14 Nov 14 olle 41     List<ArrayDesign> tmp = query.list(dc);
2933 14 Nov 14 olle 42     List<Arraydesign> designs = new ArrayList<Arraydesign>(tmp.size());
2933 14 Nov 14 olle 43     for (ArrayDesign design : tmp)
2933 14 Nov 14 olle 44     {
2933 14 Nov 14 olle 45       designs.add(new Arraydesign(design));
2933 14 Nov 14 olle 46     }
2933 14 Nov 14 olle 47     return designs;
2933 14 Nov 14 olle 48   }
2933 14 Nov 14 olle 49   
2933 14 Nov 14 olle 50   /**
2933 14 Nov 14 olle 51     Find the array design with the given name.
2933 14 Nov 14 olle 52    */
2933 14 Nov 14 olle 53   public static Arraydesign findByName(DbControl dc, String name)
2933 14 Nov 14 olle 54   {
2933 14 Nov 14 olle 55     
2933 14 Nov 14 olle 56     ItemQuery<ArrayDesign> query = ArrayDesign.getQuery();
2933 14 Nov 14 olle 57     query.setIncludes(Meludi.INCLUDE_IN_CURRENT_PROJECT);
2933 14 Nov 14 olle 58     query.restrict(Restrictions.eq(Hql.property("name"), Expressions.parameter("name", name, Type.STRING)));
2933 14 Nov 14 olle 59   
2933 14 Nov 14 olle 60     List<ArrayDesign> tmp = query.list(dc);
2933 14 Nov 14 olle 61     Arraydesign design = null;
2933 14 Nov 14 olle 62     
2933 14 Nov 14 olle 63     if (tmp.size() > 1)
2933 14 Nov 14 olle 64     {
2933 14 Nov 14 olle 65       throw new InvalidDataException(
2933 14 Nov 14 olle 66         "Found " + tmp.size() + " array designs with the same name (" + name + 
2933 14 Nov 14 olle 67         "). This wizard can't be used until that is corrected.");
2933 14 Nov 14 olle 68     }
2933 14 Nov 14 olle 69     else if (tmp.size() == 1)
2933 14 Nov 14 olle 70     {
2933 14 Nov 14 olle 71       design = new Arraydesign(tmp.get(0));
2933 14 Nov 14 olle 72     }
2933 14 Nov 14 olle 73     return design;
2933 14 Nov 14 olle 74   }
2933 14 Nov 14 olle 75
2933 14 Nov 14 olle 76   public static Arraydesign getById(DbControl dc, int arrayDesignId)
2933 14 Nov 14 olle 77   {
2933 14 Nov 14 olle 78     ArrayDesign design = ArrayDesign.getById(dc, arrayDesignId);
2933 14 Nov 14 olle 79     return design == null ? null : new Arraydesign(design);
2933 14 Nov 14 olle 80   }
2933 14 Nov 14 olle 81   
2933 14 Nov 14 olle 82   
2933 14 Nov 14 olle 83   private Arraydesign(ArrayDesign design)
2933 14 Nov 14 olle 84   {
2933 14 Nov 14 olle 85     super(design);
2933 14 Nov 14 olle 86   }
2933 14 Nov 14 olle 87   
2933 14 Nov 14 olle 88   
2933 14 Nov 14 olle 89   /**
2933 14 Nov 14 olle 90     Get the array design item that represents this in BASE.
2933 14 Nov 14 olle 91   */
2933 14 Nov 14 olle 92   public ArrayDesign getArrayDesign()
2933 14 Nov 14 olle 93   {
2933 14 Nov 14 olle 94     return getItem();
2933 14 Nov 14 olle 95   }
2933 14 Nov 14 olle 96   
2933 14 Nov 14 olle 97   @SuppressWarnings("unchecked")
2933 14 Nov 14 olle 98   @Override
2933 14 Nov 14 olle 99   protected void initJSON(JSONObject json)
2933 14 Nov 14 olle 100   {
2933 14 Nov 14 olle 101     super.initJSON(json);
2933 14 Nov 14 olle 102     ArrayDesign ad = getItem();
2933 14 Nov 14 olle 103     json.put("numFeatures", ad.getNumDbFeatures());
2933 14 Nov 14 olle 104   }
2933 14 Nov 14 olle 105
2933 14 Nov 14 olle 106   
2933 14 Nov 14 olle 107 }