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

Code
Comments
Other
Rev Date Author Line
5865 12 Mar 20 nicklas 1 package net.sf.basedb.reggie.dao;
5865 12 Mar 20 nicklas 2
5865 12 Mar 20 nicklas 3 import java.lang.reflect.Field;
5865 12 Mar 20 nicklas 4 import java.lang.reflect.Modifier;
5865 12 Mar 20 nicklas 5
5865 12 Mar 20 nicklas 6 import org.json.simple.JSONObject;
5865 12 Mar 20 nicklas 7
5865 12 Mar 20 nicklas 8 import net.sf.basedb.core.DbControl;
5865 12 Mar 20 nicklas 9 import net.sf.basedb.core.ItemQuery;
5865 12 Mar 20 nicklas 10 import net.sf.basedb.core.Tag;
5865 12 Mar 20 nicklas 11 import net.sf.basedb.core.query.Annotations;
5865 12 Mar 20 nicklas 12 import net.sf.basedb.core.query.Expressions;
5865 12 Mar 20 nicklas 13 import net.sf.basedb.core.query.Hql;
5865 12 Mar 20 nicklas 14 import net.sf.basedb.core.query.Restrictions;
5865 12 Mar 20 nicklas 15
5865 12 Mar 20 nicklas 16
5865 12 Mar 20 nicklas 17 /**
5865 12 Mar 20 nicklas 18   Class for collecting barcode-related settings.
5865 12 Mar 20 nicklas 19   
5865 12 Mar 20 nicklas 20   Expect this class to evolve as more things are implemented.
5865 12 Mar 20 nicklas 21   
5865 12 Mar 20 nicklas 22   @author nicklas
5865 12 Mar 20 nicklas 23   @since 4.26
5865 12 Mar 20 nicklas 24 */
5865 12 Mar 20 nicklas 25 public class BarcodeSet 
5865 12 Mar 20 nicklas 26 {
5865 12 Mar 20 nicklas 27
5865 12 Mar 20 nicklas 28   /**
5865 12 Mar 20 nicklas 29     The TruSeq single barcode set.
5865 12 Mar 20 nicklas 30   */
5865 12 Mar 20 nicklas 31   public static final BarcodeSet TRUSEQ_SINGLE = new BarcodeSet("TRUSEQ_SINGLE", "TruSeqSingle");
5865 12 Mar 20 nicklas 32   
5865 12 Mar 20 nicklas 33   /**
5865 12 Mar 20 nicklas 34     The TruSeq dual unique barcode set.
5865 12 Mar 20 nicklas 35   */
5865 12 Mar 20 nicklas 36   public static final BarcodeSet TRUSEQ_UNIQUE_DUAL = new BarcodeSet("TRUSEQ_DUAL_UNIQUE", "TruSeqUniqueDual");
5865 12 Mar 20 nicklas 37
5865 12 Mar 20 nicklas 38   /**
6887 24 Nov 22 nicklas 39     The IDT10 dual unique barcode set.
6887 24 Nov 22 nicklas 40     @since 4.41
6887 24 Nov 22 nicklas 41   */
6887 24 Nov 22 nicklas 42   public static final BarcodeSet IDT10_UDI = new BarcodeSet("IDT10_UDI", "IDT10_UDI");
6887 24 Nov 22 nicklas 43
6887 24 Nov 22 nicklas 44   /**
5865 12 Mar 20 nicklas 45     Get a barcode set by it's display name.
5865 12 Mar 20 nicklas 46     @param name The name of the barcode set
5865 12 Mar 20 nicklas 47     @return A barcode set object or null if not found
5865 12 Mar 20 nicklas 48   */
5865 12 Mar 20 nicklas 49   public static BarcodeSet getByName(String name)
5865 12 Mar 20 nicklas 50   {
5865 12 Mar 20 nicklas 51     for (Field f : BarcodeSet.class.getDeclaredFields())
5865 12 Mar 20 nicklas 52     {
5865 12 Mar 20 nicklas 53       if (Modifier.isStatic(f.getModifiers()) && f.getType() == BarcodeSet.class)
5865 12 Mar 20 nicklas 54       {
5865 12 Mar 20 nicklas 55         try
5865 12 Mar 20 nicklas 56         {
5865 12 Mar 20 nicklas 57           BarcodeSet bs = (BarcodeSet)f.get(null);
5865 12 Mar 20 nicklas 58           if (bs.getName().equals(name)) return bs;
5865 12 Mar 20 nicklas 59         } 
5865 12 Mar 20 nicklas 60         catch (IllegalArgumentException | IllegalAccessException e) 
5865 12 Mar 20 nicklas 61         {} // Should not happen
5865 12 Mar 20 nicklas 62       }
5865 12 Mar 20 nicklas 63     }
5865 12 Mar 20 nicklas 64     return null;
5865 12 Mar 20 nicklas 65   }
5865 12 Mar 20 nicklas 66   
5865 12 Mar 20 nicklas 67   /**
5865 12 Mar 20 nicklas 68     Get the barcode set by name of the static constant defined in this class.
5865 12 Mar 20 nicklas 69     
5865 12 Mar 20 nicklas 70     @param cName The name of the static constant
5865 12 Mar 20 nicklas 71     @return A barcode set object or null if not found
5865 12 Mar 20 nicklas 72   */
5865 12 Mar 20 nicklas 73   public static BarcodeSet getByCName(String cName)
5865 12 Mar 20 nicklas 74   {
5865 12 Mar 20 nicklas 75     if (cName == null) return null;
5865 12 Mar 20 nicklas 76     BarcodeSet bs = null;
5865 12 Mar 20 nicklas 77     try
5865 12 Mar 20 nicklas 78     {
5865 12 Mar 20 nicklas 79       Field f = BarcodeSet.class.getDeclaredField(cName);
5865 12 Mar 20 nicklas 80       bs = (BarcodeSet)f.get(null);
5865 12 Mar 20 nicklas 81     }
5865 12 Mar 20 nicklas 82     catch (NoSuchFieldException ex)
5865 12 Mar 20 nicklas 83     {}
5865 12 Mar 20 nicklas 84     catch (IllegalAccessException ex)
5865 12 Mar 20 nicklas 85     {}
5865 12 Mar 20 nicklas 86     catch (ClassCastException ex)
5865 12 Mar 20 nicklas 87     {}
5865 12 Mar 20 nicklas 88     return bs;
5865 12 Mar 20 nicklas 89   }
5865 12 Mar 20 nicklas 90   
5865 12 Mar 20 nicklas 91   private final String id;
5865 12 Mar 20 nicklas 92   private final String name;
5865 12 Mar 20 nicklas 93   
5865 12 Mar 20 nicklas 94   private BarcodeSet(String id, String name)
5865 12 Mar 20 nicklas 95   {
5865 12 Mar 20 nicklas 96     this.id = id;
5865 12 Mar 20 nicklas 97     this.name = name;
5865 12 Mar 20 nicklas 98   }
5865 12 Mar 20 nicklas 99   
5865 12 Mar 20 nicklas 100   public String getId()
5865 12 Mar 20 nicklas 101   {
5865 12 Mar 20 nicklas 102     return id;
5865 12 Mar 20 nicklas 103   }
5865 12 Mar 20 nicklas 104   
5865 12 Mar 20 nicklas 105   public String getName()
5865 12 Mar 20 nicklas 106   {
5865 12 Mar 20 nicklas 107     return name;
5865 12 Mar 20 nicklas 108   }
5865 12 Mar 20 nicklas 109
5865 12 Mar 20 nicklas 110   /**
5865 12 Mar 20 nicklas 111     Add a filter to the given query to only return items that
5865 12 Mar 20 nicklas 112     has been annotated as belonging to this barcode set.
5865 12 Mar 20 nicklas 113   */
5865 12 Mar 20 nicklas 114   public void addFilter(DbControl dc, ItemQuery<Tag> query)
5865 12 Mar 20 nicklas 115   {
5865 12 Mar 20 nicklas 116     query.join(Annotations.innerJoin(Annotationtype.BARCODE_SET.load(dc), "bs"));
5865 12 Mar 20 nicklas 117     query.restrict(Restrictions.eq(Hql.alias("bs"), Expressions.string(getName())));
5865 12 Mar 20 nicklas 118   }
5865 12 Mar 20 nicklas 119
5865 12 Mar 20 nicklas 120   
5865 12 Mar 20 nicklas 121   /**
5865 12 Mar 20 nicklas 122     Get the information as a JSON object ready to be sent as an AJAX response.
5865 12 Mar 20 nicklas 123   */
5865 12 Mar 20 nicklas 124   public JSONObject asJSONObject()
5865 12 Mar 20 nicklas 125   {
5865 12 Mar 20 nicklas 126     JSONObject json = new JSONObject();
5865 12 Mar 20 nicklas 127     json.put("id", getId());
5865 12 Mar 20 nicklas 128     json.put("name", getName());
5865 12 Mar 20 nicklas 129     return json;
5865 12 Mar 20 nicklas 130   }
5865 12 Mar 20 nicklas 131
5865 12 Mar 20 nicklas 132 }