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

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