extensions/net.sf.basedb.meludi/trunk/src/net/sf/basedb/meludi/dao/BioplateEventtype.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
2933 14 Nov 14 olle 7 import net.sf.basedb.core.BioPlateEventType;
2933 14 Nov 14 olle 8 import net.sf.basedb.core.DbControl;
2933 14 Nov 14 olle 9 import net.sf.basedb.core.Include;
2933 14 Nov 14 olle 10 import net.sf.basedb.core.InvalidDataException;
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 a bioplate event type items.
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 BioplateEventtype 
2933 14 Nov 14 olle 25 {
2933 14 Nov 14 olle 26   
2933 14 Nov 14 olle 27   /**
2933 14 Nov 14 olle 28     Get the annotation type by name of the static constant defined in this class.
2933 14 Nov 14 olle 29     
2933 14 Nov 14 olle 30     @param name The name of the static constant
2933 14 Nov 14 olle 31     @return An annotationtype object or null if not found
2933 14 Nov 14 olle 32   */
2933 14 Nov 14 olle 33   public static BioplateEventtype getByCName(String cName)
2933 14 Nov 14 olle 34   {
2933 14 Nov 14 olle 35     if (cName == null) return null;
2933 14 Nov 14 olle 36     BioplateEventtype type = null;
2933 14 Nov 14 olle 37     try
2933 14 Nov 14 olle 38     {
2933 14 Nov 14 olle 39       Field f = BioplateEventtype.class.getDeclaredField(cName);
2933 14 Nov 14 olle 40       type = (BioplateEventtype)f.get(null);
2933 14 Nov 14 olle 41     }
2933 14 Nov 14 olle 42     catch (NoSuchFieldException ex)
2933 14 Nov 14 olle 43     {}
2933 14 Nov 14 olle 44     catch (IllegalAccessException ex)
2933 14 Nov 14 olle 45     {}
2933 14 Nov 14 olle 46     catch (ClassCastException ex)
2933 14 Nov 14 olle 47     {}
2933 14 Nov 14 olle 48     return type;
2933 14 Nov 14 olle 49   }
2933 14 Nov 14 olle 50   
2933 14 Nov 14 olle 51   private final String name;
2933 14 Nov 14 olle 52   private final String systemId;
2933 14 Nov 14 olle 53   private final String description;
2933 14 Nov 14 olle 54   private int id;
2933 14 Nov 14 olle 55
2933 14 Nov 14 olle 56
2933 14 Nov 14 olle 57   /**
2933 14 Nov 14 olle 58     Create a new definition of a bioplate event type.
2933 14 Nov 14 olle 59     
2933 14 Nov 14 olle 60     @param name The name of the event type
2933 14 Nov 14 olle 61     @param systemId The system id of the event type
2933 14 Nov 14 olle 62   */
2933 14 Nov 14 olle 63   private BioplateEventtype(String name, String systemId, String description)
2933 14 Nov 14 olle 64   {
2933 14 Nov 14 olle 65     this.name = name;
2933 14 Nov 14 olle 66     this.systemId = systemId;
2933 14 Nov 14 olle 67     this.description = description;
2933 14 Nov 14 olle 68   }
2933 14 Nov 14 olle 69   
2933 14 Nov 14 olle 70   /**
2933 14 Nov 14 olle 71     Get the name of the event type.
2933 14 Nov 14 olle 72   */
2933 14 Nov 14 olle 73   public String getName()
2933 14 Nov 14 olle 74   {
2933 14 Nov 14 olle 75     return name;
2933 14 Nov 14 olle 76   }
2933 14 Nov 14 olle 77   
2933 14 Nov 14 olle 78   public String getSystemId()
2933 14 Nov 14 olle 79   {
2933 14 Nov 14 olle 80     return systemId;
2933 14 Nov 14 olle 81   }
2933 14 Nov 14 olle 82   
2933 14 Nov 14 olle 83   public String getDescription()
2933 14 Nov 14 olle 84   {
2933 14 Nov 14 olle 85     return description;
2933 14 Nov 14 olle 86   }
2933 14 Nov 14 olle 87   
2933 14 Nov 14 olle 88   /**
2933 14 Nov 14 olle 89     Load the underlying bioplate event type. If it doesn't exists and exception is thrown.
2933 14 Nov 14 olle 90     
2933 14 Nov 14 olle 91     @param dc The DbControl to use for database access
2933 14 Nov 14 olle 92     @return A BioPlateEventType object
2933 14 Nov 14 olle 93   */
2933 14 Nov 14 olle 94   public BioPlateEventType load(DbControl dc)
2933 14 Nov 14 olle 95   {
2933 14 Nov 14 olle 96     BioPlateEventType type = null;
2933 14 Nov 14 olle 97     if (id == 0)
2933 14 Nov 14 olle 98     {
2933 14 Nov 14 olle 99       List<BioPlateEventType> result = list(dc);
2933 14 Nov 14 olle 100       if (result.size() == 0)
2933 14 Nov 14 olle 101       {
2933 14 Nov 14 olle 102         throw new ItemNotFoundException("BioPlateEventType["+systemId+"]");
2933 14 Nov 14 olle 103       }
2933 14 Nov 14 olle 104       else if (result.size() > 1)
2933 14 Nov 14 olle 105       {
2933 14 Nov 14 olle 106         throw new InvalidDataException("Found > 1 BioPlateEventType["+systemId+"]");
2933 14 Nov 14 olle 107       }
2933 14 Nov 14 olle 108       type = result.get(0);
2933 14 Nov 14 olle 109       id = type.getId();
2933 14 Nov 14 olle 110     }
2933 14 Nov 14 olle 111     else
2933 14 Nov 14 olle 112     {
2933 14 Nov 14 olle 113       type = BioPlateEventType.getById(dc, id);
2933 14 Nov 14 olle 114     }
2933 14 Nov 14 olle 115     return type;
2933 14 Nov 14 olle 116   }
2933 14 Nov 14 olle 117     
2933 14 Nov 14 olle 118   /**
2933 14 Nov 14 olle 119     List all bioplate event types registered in BASE with a name
2933 14 Nov 14 olle 120     matching this definition. Normally, only a single event type
2933 14 Nov 14 olle 121     type should be returned.
2933 14 Nov 14 olle 122   */
2933 14 Nov 14 olle 123   public List<BioPlateEventType> list(DbControl dc)
2933 14 Nov 14 olle 124   {
2933 14 Nov 14 olle 125     ItemQuery<BioPlateEventType> query = BioPlateEventType.getQuery();
2933 14 Nov 14 olle 126     query.restrict(Restrictions.eq(Hql.property("systemId"), Expressions.parameter("systemId", systemId, Type.STRING)));
2933 14 Nov 14 olle 127     query.include(Include.ALL);
2933 14 Nov 14 olle 128     return query.list(dc);
2933 14 Nov 14 olle 129   }
2933 14 Nov 14 olle 130
2933 14 Nov 14 olle 131
2933 14 Nov 14 olle 132 }