extensions/net.sf.basedb.meludi/trunk/src/net/sf/basedb/meludi/dao/Geometry.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.ItemNotFoundException;
2933 14 Nov 14 olle 10 import net.sf.basedb.core.ItemQuery;
2933 14 Nov 14 olle 11 import net.sf.basedb.core.PlateGeometry;
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.Restrictions;
2933 14 Nov 14 olle 16
2933 14 Nov 14 olle 17
2933 14 Nov 14 olle 18
2933 14 Nov 14 olle 19 /**
2933 14 Nov 14 olle 20   Used to define Bioplate geometries.
2933 14 Nov 14 olle 21   
2933 14 Nov 14 olle 22   @author nicklas
2933 14 Nov 14 olle 23   @since 2.5
2933 14 Nov 14 olle 24 */
2933 14 Nov 14 olle 25 public class Geometry
2933 14 Nov 14 olle 26 {
2933 14 Nov 14 olle 27
2933 14 Nov 14 olle 28   /*
2933 14 Nov 14 olle 29     Plate geometry with 3 rows and 2 columns. Typically used by paraffin blocks and
2933 14 Nov 14 olle 30     HE glass.
2933 14 Nov 14 olle 31   */
2933 14 Nov 14 olle 32   public static final Geometry THREE_BY_TWO = new Geometry("6-well (3 x 2)", 3, 2);
2933 14 Nov 14 olle 33   
2933 14 Nov 14 olle 34   /**
2933 14 Nov 14 olle 35     Plate geometry with 9 rows and 9 columns. A typical generic storage plate in
2933 14 Nov 14 olle 36     the project.
2933 14 Nov 14 olle 37    */
2933 14 Nov 14 olle 38   public static final Geometry NINE_BY_NINE = new Geometry("81-well (9 x 9)", 9, 9);
2933 14 Nov 14 olle 39
2933 14 Nov 14 olle 40   /**
5175 04 Dec 18 olle 41     Plate geometry with 10 rows and 10 columns.
5175 04 Dec 18 olle 42   */
5175 04 Dec 18 olle 43   public static final Geometry TEN_BY_TEN = new Geometry("100-well (10 x 10)", 10, 10);
5175 04 Dec 18 olle 44
5175 04 Dec 18 olle 45   /**
2933 14 Nov 14 olle 46     Plate geometry with 8 rows and 12 columns.
2933 14 Nov 14 olle 47   */
2933 14 Nov 14 olle 48   public static final Geometry EIGHT_BY_TWELVE = new Geometry("96-well (8 × 12)", 8, 12);
2933 14 Nov 14 olle 49
2933 14 Nov 14 olle 50   /**
2933 14 Nov 14 olle 51     Plate geometry with 1 row and 12 columns.
2933 14 Nov 14 olle 52   */
2933 14 Nov 14 olle 53   public static final Geometry ONE_BY_TWELVE = new Geometry("12-well (1 × 12)", 1, 12);
2933 14 Nov 14 olle 54   
2933 14 Nov 14 olle 55   /**
2933 14 Nov 14 olle 56     Get the Geometry by name of the static constant defined in this class.
2933 14 Nov 14 olle 57     
2933 14 Nov 14 olle 58     @param name The name of the static constant
2933 14 Nov 14 olle 59     @return A Geometry object or null if not found
2933 14 Nov 14 olle 60   */
2933 14 Nov 14 olle 61   public static Geometry getByCName(String cName)
2933 14 Nov 14 olle 62   {
2933 14 Nov 14 olle 63     if (cName == null) return null;
2933 14 Nov 14 olle 64     Geometry geo = null;
2933 14 Nov 14 olle 65     try
2933 14 Nov 14 olle 66     {
2933 14 Nov 14 olle 67       Field f = Geometry.class.getDeclaredField(cName);
2933 14 Nov 14 olle 68       geo = (Geometry)f.get(null);
2933 14 Nov 14 olle 69     }
2933 14 Nov 14 olle 70     catch (NoSuchFieldException ex)
2933 14 Nov 14 olle 71     {}
2933 14 Nov 14 olle 72     catch (IllegalAccessException ex)
2933 14 Nov 14 olle 73     {}
2933 14 Nov 14 olle 74     catch (ClassCastException ex)
2933 14 Nov 14 olle 75     {}
2933 14 Nov 14 olle 76     return geo;
2933 14 Nov 14 olle 77   }
2933 14 Nov 14 olle 78
2933 14 Nov 14 olle 79   
2933 14 Nov 14 olle 80   private final String name;
2933 14 Nov 14 olle 81   private final int rows;
2933 14 Nov 14 olle 82   private final int cols;
2933 14 Nov 14 olle 83   
2933 14 Nov 14 olle 84   private int id;
2933 14 Nov 14 olle 85
2933 14 Nov 14 olle 86   /**
2933 14 Nov 14 olle 87     Create a new definition.
2933 14 Nov 14 olle 88   */
2933 14 Nov 14 olle 89   private Geometry(String name, int rows, int cols)
2933 14 Nov 14 olle 90   {
2933 14 Nov 14 olle 91     this.name = name;
2933 14 Nov 14 olle 92     this.rows = rows;
2933 14 Nov 14 olle 93     this.cols = cols;
2933 14 Nov 14 olle 94   }
2933 14 Nov 14 olle 95
2933 14 Nov 14 olle 96   /**
2933 14 Nov 14 olle 97     Get the name of the plate geometry.
2933 14 Nov 14 olle 98    */
2933 14 Nov 14 olle 99   public String getName()
2933 14 Nov 14 olle 100   {
2933 14 Nov 14 olle 101     return name;
2933 14 Nov 14 olle 102   }
2933 14 Nov 14 olle 103   
2933 14 Nov 14 olle 104   /**
2933 14 Nov 14 olle 105     Get the number of rows in this geometry.
2933 14 Nov 14 olle 106   */
2933 14 Nov 14 olle 107   public int getRows()
2933 14 Nov 14 olle 108   {
2933 14 Nov 14 olle 109     return rows;
2933 14 Nov 14 olle 110   }
2933 14 Nov 14 olle 111
2933 14 Nov 14 olle 112   /**
2933 14 Nov 14 olle 113     Get the number of columns in this geometry.
2933 14 Nov 14 olle 114   */
2933 14 Nov 14 olle 115   public int getColumns()
2933 14 Nov 14 olle 116   {
2933 14 Nov 14 olle 117     return cols;
2933 14 Nov 14 olle 118   }
2933 14 Nov 14 olle 119
2933 14 Nov 14 olle 120   
2933 14 Nov 14 olle 121   /**
2933 14 Nov 14 olle 122     Load the geometry as a BASE item.
2933 14 Nov 14 olle 123     @param dc The DbControl to use for database access
2933 14 Nov 14 olle 124     @return An PlateGeometry object
2933 14 Nov 14 olle 125   */
2933 14 Nov 14 olle 126   public PlateGeometry load(DbControl dc)
2933 14 Nov 14 olle 127   {
2933 14 Nov 14 olle 128     PlateGeometry geometry = null;
2933 14 Nov 14 olle 129     if (id == 0)
2933 14 Nov 14 olle 130     {
2933 14 Nov 14 olle 131       List<PlateGeometry> result = list(dc);
2933 14 Nov 14 olle 132   
2933 14 Nov 14 olle 133       if (result.size() == 0)
2933 14 Nov 14 olle 134       {
2933 14 Nov 14 olle 135         throw new ItemNotFoundException("PlateGeometry["+getRows()+","+getColumns()+"]");
2933 14 Nov 14 olle 136       }
2933 14 Nov 14 olle 137       else if (result.size() > 1)
2933 14 Nov 14 olle 138       {
2933 14 Nov 14 olle 139         throw new InvalidDataException("Found > 1 PlateGeometry["+getRows()+","+getColumns()+"]");
2933 14 Nov 14 olle 140       }
2933 14 Nov 14 olle 141       else
2933 14 Nov 14 olle 142       {
2933 14 Nov 14 olle 143         geometry = result.get(0);
2933 14 Nov 14 olle 144         id = geometry.getId();
2933 14 Nov 14 olle 145       }
2933 14 Nov 14 olle 146     }
2933 14 Nov 14 olle 147     else
2933 14 Nov 14 olle 148     {
2933 14 Nov 14 olle 149       geometry = PlateGeometry.getById(dc, id);
2933 14 Nov 14 olle 150     }
2933 14 Nov 14 olle 151     return geometry;
2933 14 Nov 14 olle 152   }
2933 14 Nov 14 olle 153
2933 14 Nov 14 olle 154   /**
2933 14 Nov 14 olle 155     List all Plate geometries in the database that matches the size of this definition.
2933 14 Nov 14 olle 156   */
2933 14 Nov 14 olle 157   public List<PlateGeometry> list(DbControl dc)
2933 14 Nov 14 olle 158   {
2933 14 Nov 14 olle 159     ItemQuery<PlateGeometry> query = PlateGeometry.getQuery();
2933 14 Nov 14 olle 160     query.restrict(
2933 14 Nov 14 olle 161       Restrictions.eq(
2933 14 Nov 14 olle 162         Hql.property("rows"), 
2933 14 Nov 14 olle 163         Expressions.parameter("rows", getRows(), Type.INT)
2933 14 Nov 14 olle 164       ));
2933 14 Nov 14 olle 165     query.restrict(
2933 14 Nov 14 olle 166       Restrictions.eq(
2933 14 Nov 14 olle 167         Hql.property("columns"), 
2933 14 Nov 14 olle 168         Expressions.parameter("columns", getColumns(), Type.INT)
2933 14 Nov 14 olle 169       ));
2933 14 Nov 14 olle 170     query.include(Include.ALL);
2933 14 Nov 14 olle 171     return query.list(dc);
2933 14 Nov 14 olle 172   }
2933 14 Nov 14 olle 173
2933 14 Nov 14 olle 174 }