extensions/net.sf.basedb.meludi/trunk/src/net/sf/basedb/meludi/dao/BiomaterialList.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.lang.reflect.Field;
2933 14 Nov 14 olle 4 import java.util.List;
2933 14 Nov 14 olle 5
2933 14 Nov 14 olle 6 import net.sf.basedb.core.DbControl;
2933 14 Nov 14 olle 7 import net.sf.basedb.core.Include;
2933 14 Nov 14 olle 8 import net.sf.basedb.core.InvalidDataException;
2933 14 Nov 14 olle 9 import net.sf.basedb.core.Item;
3384 10 Jun 15 olle 10 import net.sf.basedb.core.ItemList;
2933 14 Nov 14 olle 11 import net.sf.basedb.core.ItemNotFoundException;
2933 14 Nov 14 olle 12 import net.sf.basedb.core.ItemQuery;
2933 14 Nov 14 olle 13 import net.sf.basedb.core.Type;
2933 14 Nov 14 olle 14 import net.sf.basedb.core.query.Expressions;
2933 14 Nov 14 olle 15 import net.sf.basedb.core.query.Hql;
2933 14 Nov 14 olle 16 import net.sf.basedb.core.query.Restrictions;
2933 14 Nov 14 olle 17
2933 14 Nov 14 olle 18 /**
2933 14 Nov 14 olle 19   Used to define special biomaterial lists.
2933 14 Nov 14 olle 20   
2933 14 Nov 14 olle 21   @author nicklas
2933 14 Nov 14 olle 22   @since 2.12
2933 14 Nov 14 olle 23 */
2933 14 Nov 14 olle 24 public class BiomaterialList 
2933 14 Nov 14 olle 25 {
2933 14 Nov 14 olle 26
2933 14 Nov 14 olle 27   /**
2933 14 Nov 14 olle 28     The definition of the biomaterial list used for storing RNA items that have been 
2933 14 Nov 14 olle 29     flagged by the RNA -> mRNA auto-select wizard.
2933 14 Nov 14 olle 30   */
2933 14 Nov 14 olle 31   public static final BiomaterialList FLAGGED_RNA = 
2933 14 Nov 14 olle 32     new BiomaterialList("Flagged RNA", "net.sf.basedb.reggie.rna.flagged", Item.EXTRACT,
2933 14 Nov 14 olle 33       "This list contains RNA items that doesn't meet the criterias set by the " +
2933 14 Nov 14 olle 34       "auto-select wizard for further processing to mRNA. The most typical reason is " +
2933 14 Nov 14 olle 35       "that not enough RNA is available.");
2933 14 Nov 14 olle 36
2933 14 Nov 14 olle 37   /**
2933 14 Nov 14 olle 38     The definition of the biomaterial list used for storing Pooled libraries that have been 
2933 14 Nov 14 olle 39     flagged due to failure to sequence the entire pool.
2933 14 Nov 14 olle 40     @since 2.13
2933 14 Nov 14 olle 41   */
2933 14 Nov 14 olle 42   public static final BiomaterialList FLAGGED_POOL = 
2933 14 Nov 14 olle 43     new BiomaterialList("Flagged PooledLibrary", "net.sf.basedb.reggie.pool.flagged", Item.EXTRACT,
2933 14 Nov 14 olle 44       "This list contains PooledLibrary items that have failed to be sequenced. Typically most pools "
2933 14 Nov 14 olle 45       + "should have enough biomaterial left for trying again, otherwise a new pool may need to be "
2933 14 Nov 14 olle 46       + "created from libraries or RNA.");
2933 14 Nov 14 olle 47
2933 14 Nov 14 olle 48   /**
2933 14 Nov 14 olle 49     The definition of the biomaterial list used for storing Histology items that have been 
2933 14 Nov 14 olle 50     flagged due to failure to create a stained sample.
2933 14 Nov 14 olle 51     @since 2.15
2933 14 Nov 14 olle 52   */
2933 14 Nov 14 olle 53   public static final BiomaterialList FLAGGED_HISTOLOGY = 
2933 14 Nov 14 olle 54     new BiomaterialList("Flagged Histology", "net.sf.basedb.reggie.histology.flagged", Item.SAMPLE,
2933 14 Nov 14 olle 55       "This list contains Histology items that have failed to be stained. If possible a new "
2933 14 Nov 14 olle 56       + "HE glass may be created from the block, otherwise a new histology piece may be needed from "
2933 14 Nov 14 olle 57       + "the frozen backup");
2933 14 Nov 14 olle 58
2933 14 Nov 14 olle 59   /**
2933 14 Nov 14 olle 60     Get the bioplate type by name of the static constant defined in this class.
2933 14 Nov 14 olle 61     
2933 14 Nov 14 olle 62     @param cName The name of the static constant
2933 14 Nov 14 olle 63     @return A bioplate type object or null if not found
2933 14 Nov 14 olle 64    */
2933 14 Nov 14 olle 65   public static BiomaterialList getByCName(String cName)
2933 14 Nov 14 olle 66   {
2933 14 Nov 14 olle 67     if (cName == null) return null;
2933 14 Nov 14 olle 68     BiomaterialList bioplateType = null;
2933 14 Nov 14 olle 69     try
2933 14 Nov 14 olle 70     {
2933 14 Nov 14 olle 71       Field f = BiomaterialList.class.getDeclaredField(cName);
2933 14 Nov 14 olle 72       bioplateType = (BiomaterialList)f.get(null);
2933 14 Nov 14 olle 73     }
2933 14 Nov 14 olle 74     catch (NoSuchFieldException ex)
2933 14 Nov 14 olle 75     {}
2933 14 Nov 14 olle 76     catch (IllegalAccessException ex)
2933 14 Nov 14 olle 77     {}
2933 14 Nov 14 olle 78     catch (ClassCastException ex)
2933 14 Nov 14 olle 79     {}
2933 14 Nov 14 olle 80     return bioplateType;
2933 14 Nov 14 olle 81   }
2933 14 Nov 14 olle 82   
2933 14 Nov 14 olle 83   private final String name;
2933 14 Nov 14 olle 84   private final String externalId;
2933 14 Nov 14 olle 85   private final Item bioMaterialType;
2933 14 Nov 14 olle 86   private final String description;
2933 14 Nov 14 olle 87   private int id;
2933 14 Nov 14 olle 88   
2933 14 Nov 14 olle 89   /**
2933 14 Nov 14 olle 90     Create a new definition
2933 14 Nov 14 olle 91     @param name The name of the subtype
2933 14 Nov 14 olle 92     @param bioMaterialType The type of biomaterial that can be placed on the bioplate 
2933 14 Nov 14 olle 93     @param subtype The subtype of biomaterial that can be placed on the bioplate
2933 14 Nov 14 olle 94   */
2933 14 Nov 14 olle 95   private BiomaterialList(String name, String externalId, Item bioMaterialType, String description)
2933 14 Nov 14 olle 96   {
2933 14 Nov 14 olle 97     this.name = name;
2933 14 Nov 14 olle 98     this.externalId = externalId;
2933 14 Nov 14 olle 99     this.bioMaterialType = bioMaterialType;
2933 14 Nov 14 olle 100     this.description = description;
2933 14 Nov 14 olle 101   }
2933 14 Nov 14 olle 102     
2933 14 Nov 14 olle 103   /**
2933 14 Nov 14 olle 104     Get the name of the biomaterial list.
2933 14 Nov 14 olle 105   */
2933 14 Nov 14 olle 106   public String getName()
2933 14 Nov 14 olle 107   {
2933 14 Nov 14 olle 108     return name;
2933 14 Nov 14 olle 109   }
2933 14 Nov 14 olle 110   
2933 14 Nov 14 olle 111   /**
2933 14 Nov 14 olle 112     Get the list description.
2933 14 Nov 14 olle 113   */
2933 14 Nov 14 olle 114   public String getDescription()
2933 14 Nov 14 olle 115   {
2933 14 Nov 14 olle 116     return description;
2933 14 Nov 14 olle 117   }
2933 14 Nov 14 olle 118   
2933 14 Nov 14 olle 119   /**
2933 14 Nov 14 olle 120     Get the external id of the biomaterial list.
2933 14 Nov 14 olle 121   */
2933 14 Nov 14 olle 122   public String getExternalId()
2933 14 Nov 14 olle 123   {
2933 14 Nov 14 olle 124     return externalId;
2933 14 Nov 14 olle 125   }
2933 14 Nov 14 olle 126   
2933 14 Nov 14 olle 127   /**
2933 14 Nov 14 olle 128     Get the biomaterial item type that can be used on the plate.
2933 14 Nov 14 olle 129   */
2933 14 Nov 14 olle 130   public Item getBioMaterialType()
2933 14 Nov 14 olle 131   {
2933 14 Nov 14 olle 132     return bioMaterialType;
2933 14 Nov 14 olle 133   }
2933 14 Nov 14 olle 134   
2933 14 Nov 14 olle 135   /**
2933 14 Nov 14 olle 136     Load the subtype as a BASE item.
2933 14 Nov 14 olle 137     @param dc The DbControl to use for database access
2933 14 Nov 14 olle 138     @return An ItemSubtype object
2933 14 Nov 14 olle 139   */
3384 10 Jun 15 olle 140   public ItemList load(DbControl dc)
2933 14 Nov 14 olle 141   {
3384 10 Jun 15 olle 142     ItemList list = null;
2933 14 Nov 14 olle 143     if (id == 0)
2933 14 Nov 14 olle 144     {
3384 10 Jun 15 olle 145       List<ItemList> result = list(dc);
2933 14 Nov 14 olle 146       if (result.size() == 0)
2933 14 Nov 14 olle 147       {
2933 14 Nov 14 olle 148         throw new ItemNotFoundException("BioMaterialList["+getName()+"]");
2933 14 Nov 14 olle 149       }
2933 14 Nov 14 olle 150       else if (result.size() > 1)
2933 14 Nov 14 olle 151       {
2933 14 Nov 14 olle 152         throw new InvalidDataException("Found > 1 BioMaterialList["+getName()+"]");
2933 14 Nov 14 olle 153       }
2933 14 Nov 14 olle 154       list = result.get(0);
2933 14 Nov 14 olle 155       id = list.getId();
2933 14 Nov 14 olle 156     }
2933 14 Nov 14 olle 157     else
2933 14 Nov 14 olle 158     {
3384 10 Jun 15 olle 159       list = ItemList.getById(dc, id);
2933 14 Nov 14 olle 160     }
2933 14 Nov 14 olle 161     return list;
2933 14 Nov 14 olle 162   }
2933 14 Nov 14 olle 163   
2933 14 Nov 14 olle 164   /**
2933 14 Nov 14 olle 165     List all biomaterial lists registered in BASE with an external id matching this list
2933 14 Nov 14 olle 166     definition. Normally, only a single biomaterial list type should be returned.
2933 14 Nov 14 olle 167   */
3384 10 Jun 15 olle 168   public List<ItemList> list(DbControl dc)
2933 14 Nov 14 olle 169   {
3384 10 Jun 15 olle 170     ItemQuery<ItemList> query = ItemList.getQuery();
2933 14 Nov 14 olle 171     query.restrict(
2933 14 Nov 14 olle 172       Restrictions.eq(
2933 14 Nov 14 olle 173         Hql.property("externalId"), 
2933 14 Nov 14 olle 174         Expressions.parameter("externalId", getExternalId(), Type.STRING)
2933 14 Nov 14 olle 175       ));
2933 14 Nov 14 olle 176     query.include(Include.ALL);
2933 14 Nov 14 olle 177     return query.list(dc);
2933 14 Nov 14 olle 178   }
2933 14 Nov 14 olle 179   
2933 14 Nov 14 olle 180
2933 14 Nov 14 olle 181   
2933 14 Nov 14 olle 182 }