extensions/net.sf.basedb.meludi/trunk/src/net/sf/basedb/meludi/dao/Datafiletype.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.DataFileType;
2933 14 Nov 14 olle 7 import net.sf.basedb.core.DbControl;
2933 14 Nov 14 olle 8 import net.sf.basedb.core.Include;
2933 14 Nov 14 olle 9 import net.sf.basedb.core.InvalidDataException;
2933 14 Nov 14 olle 10 import net.sf.basedb.core.Item;
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 file types for data files.
2933 14 Nov 14 olle 20   
2933 14 Nov 14 olle 21   @author nicklas
2933 14 Nov 14 olle 22   @since 2.16
2933 14 Nov 14 olle 23 */
2933 14 Nov 14 olle 24 public class Datafiletype 
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 file server containing analyzed data files.
2933 14 Nov 14 olle 29   */
3044 16 Dec 14 olle 30 /*
2933 14 Nov 14 olle 31   public static final Datafiletype FASTQ = 
2933 14 Nov 14 olle 32     new Datafiletype("FASTQ", "net.sf.basedb.reggie.fastq", 
2933 14 Nov 14 olle 33       Item.DERIVEDBIOASSAY, "fastq.gz", Subtype.SEQUENCE_DATA,
2933 14 Nov 14 olle 34       true, true,
2933 14 Nov 14 olle 35       "Compressed FASTQ files with sequence data");
3044 16 Dec 14 olle 36 */
2933 14 Nov 14 olle 37
2933 14 Nov 14 olle 38   /**
2933 14 Nov 14 olle 39     The file server containing analyzed data files.
2933 14 Nov 14 olle 40   */
3044 16 Dec 14 olle 41 /*
2933 14 Nov 14 olle 42   public static final Datafiletype BAM = 
2933 14 Nov 14 olle 43     new Datafiletype("Compressed Sequence Alignment/Map", "assembly.bam", 
2933 14 Nov 14 olle 44       Item.DERIVEDBIOASSAY, "bam", Subtype.ALIGNED_SEQUENCE_DATA, 
2933 14 Nov 14 olle 45       true, false,
2933 14 Nov 14 olle 46       "BAM format is a BGZF-compressed SAM file.");
3044 16 Dec 14 olle 47 */
2933 14 Nov 14 olle 48
2933 14 Nov 14 olle 49   /**
2933 14 Nov 14 olle 50     File type for Cufflinks fpkm_tracking files.
2933 14 Nov 14 olle 51     @since 2.17
2933 14 Nov 14 olle 52   */
3044 16 Dec 14 olle 53 /*
2933 14 Nov 14 olle 54   public static final Datafiletype FPKM = 
2933 14 Nov 14 olle 55     new Datafiletype("FPKM tracking file", "sequencing.fpkm_tracking", 
2933 14 Nov 14 olle 56       Item.RAWBIOASSAY, "fpkm_tracking", Subtype.RAW_DATA, 
2933 14 Nov 14 olle 57       true, false,
2933 14 Nov 14 olle 58       "Gene- or isoform expression levels in Fragments Per Kilobase of exon model per Million mapped fragments.");
3044 16 Dec 14 olle 59 */
2933 14 Nov 14 olle 60     
2933 14 Nov 14 olle 61   /**
2933 14 Nov 14 olle 62     Get the file type by name of the static constant defined in this class.
2933 14 Nov 14 olle 63     
2933 14 Nov 14 olle 64     @param cName The name of the static constant
2933 14 Nov 14 olle 65     @return A bioplate type object or null if not found
2933 14 Nov 14 olle 66    */
2933 14 Nov 14 olle 67   public static Datafiletype getByCName(String cName)
2933 14 Nov 14 olle 68   {
2933 14 Nov 14 olle 69     if (cName == null) return null;
2933 14 Nov 14 olle 70     Datafiletype fs = null;
2933 14 Nov 14 olle 71     try
2933 14 Nov 14 olle 72     {
2933 14 Nov 14 olle 73       Field f = Datafiletype.class.getDeclaredField(cName);
2933 14 Nov 14 olle 74       fs = (Datafiletype)f.get(null);
2933 14 Nov 14 olle 75     }
2933 14 Nov 14 olle 76     catch (NoSuchFieldException ex)
2933 14 Nov 14 olle 77     {}
2933 14 Nov 14 olle 78     catch (IllegalAccessException ex)
2933 14 Nov 14 olle 79     {}
2933 14 Nov 14 olle 80     catch (ClassCastException ex)
2933 14 Nov 14 olle 81     {}
2933 14 Nov 14 olle 82     return fs;
2933 14 Nov 14 olle 83   }
2933 14 Nov 14 olle 84   
2933 14 Nov 14 olle 85   private final String name;
2933 14 Nov 14 olle 86   private final String externalId;
2933 14 Nov 14 olle 87   private final Item itemType;
2933 14 Nov 14 olle 88   private final String fileExtension;
2933 14 Nov 14 olle 89   private final Subtype subtype;
2933 14 Nov 14 olle 90   private final boolean required;
2933 14 Nov 14 olle 91   private final boolean allowMultiple;
2933 14 Nov 14 olle 92   private final String description;
2933 14 Nov 14 olle 93   private int id;
2933 14 Nov 14 olle 94   
2933 14 Nov 14 olle 95   /**
2933 14 Nov 14 olle 96     Create a new definition
2933 14 Nov 14 olle 97   */
2933 14 Nov 14 olle 98   private Datafiletype(String name, String externalId, Item itemType, String fileExtension, Subtype subtype, boolean required, boolean allowMultiple, String description)
2933 14 Nov 14 olle 99   {
2933 14 Nov 14 olle 100     this.name = name;
2933 14 Nov 14 olle 101     this.externalId = externalId;
2933 14 Nov 14 olle 102     this.itemType = itemType;
2933 14 Nov 14 olle 103     this.fileExtension = fileExtension;
2933 14 Nov 14 olle 104     this.subtype = subtype;
2933 14 Nov 14 olle 105     this.required = required;
2933 14 Nov 14 olle 106     this.allowMultiple = allowMultiple;
2933 14 Nov 14 olle 107     this.description = description;
2933 14 Nov 14 olle 108   }
2933 14 Nov 14 olle 109     
2933 14 Nov 14 olle 110   /**
2933 14 Nov 14 olle 111     Get the name of the biomaterial list.
2933 14 Nov 14 olle 112   */
2933 14 Nov 14 olle 113   public String getName()
2933 14 Nov 14 olle 114   {
2933 14 Nov 14 olle 115     return name;
2933 14 Nov 14 olle 116   }
2933 14 Nov 14 olle 117   
2933 14 Nov 14 olle 118   /**
2933 14 Nov 14 olle 119     Get the list description.
2933 14 Nov 14 olle 120   */
2933 14 Nov 14 olle 121   public String getDescription()
2933 14 Nov 14 olle 122   {
2933 14 Nov 14 olle 123     return description;
2933 14 Nov 14 olle 124   }
2933 14 Nov 14 olle 125   
2933 14 Nov 14 olle 126   /**
2933 14 Nov 14 olle 127     Get the external id.
2933 14 Nov 14 olle 128   */
2933 14 Nov 14 olle 129   public String getExternalId()
2933 14 Nov 14 olle 130   {
2933 14 Nov 14 olle 131     return externalId;
2933 14 Nov 14 olle 132   }
2933 14 Nov 14 olle 133   
2933 14 Nov 14 olle 134   public Item getItemType()
2933 14 Nov 14 olle 135   {
2933 14 Nov 14 olle 136     return itemType;
2933 14 Nov 14 olle 137   }
2933 14 Nov 14 olle 138   
2933 14 Nov 14 olle 139   public String getExtension()
2933 14 Nov 14 olle 140   {
2933 14 Nov 14 olle 141     return fileExtension;
2933 14 Nov 14 olle 142   }
2933 14 Nov 14 olle 143   
2933 14 Nov 14 olle 144   public Subtype getSubtype()
2933 14 Nov 14 olle 145   {
2933 14 Nov 14 olle 146     return subtype;
2933 14 Nov 14 olle 147   }
2933 14 Nov 14 olle 148   
2933 14 Nov 14 olle 149   public boolean isRequired()
2933 14 Nov 14 olle 150   {
2933 14 Nov 14 olle 151     return required;
2933 14 Nov 14 olle 152   }
2933 14 Nov 14 olle 153   
2933 14 Nov 14 olle 154   public boolean getAllowMultiple()
2933 14 Nov 14 olle 155   {
2933 14 Nov 14 olle 156     return allowMultiple;
2933 14 Nov 14 olle 157   }
2933 14 Nov 14 olle 158   
2933 14 Nov 14 olle 159   /**
2933 14 Nov 14 olle 160     Load the file type as a BASE item
2933 14 Nov 14 olle 161     @param dc The DbControl to use for database access
2933 14 Nov 14 olle 162     @return An FileServer object
2933 14 Nov 14 olle 163   */
2933 14 Nov 14 olle 164   public DataFileType load(DbControl dc)
2933 14 Nov 14 olle 165   {
2933 14 Nov 14 olle 166     DataFileType type = null;
2933 14 Nov 14 olle 167     if (id == 0)
2933 14 Nov 14 olle 168     {
2933 14 Nov 14 olle 169       List<DataFileType> result = list(dc);
2933 14 Nov 14 olle 170       if (result.size() == 0)
2933 14 Nov 14 olle 171       {
2933 14 Nov 14 olle 172         throw new ItemNotFoundException("DataFileType["+getName()+"]");
2933 14 Nov 14 olle 173       }
2933 14 Nov 14 olle 174       else if (result.size() > 1)
2933 14 Nov 14 olle 175       {
2933 14 Nov 14 olle 176         throw new InvalidDataException("Found > 1 DataFileType["+getName()+"]");
2933 14 Nov 14 olle 177       }
2933 14 Nov 14 olle 178       type = result.get(0);
2933 14 Nov 14 olle 179       id = type.getId();
2933 14 Nov 14 olle 180     }
2933 14 Nov 14 olle 181     else
2933 14 Nov 14 olle 182     {
2933 14 Nov 14 olle 183       type = DataFileType.getById(dc, id);
2933 14 Nov 14 olle 184     }
2933 14 Nov 14 olle 185     return type;
2933 14 Nov 14 olle 186   }
2933 14 Nov 14 olle 187   
2933 14 Nov 14 olle 188   /**
2933 14 Nov 14 olle 189     Load the file type as a BASE item. Same as {@link #load(DbControl)} but return null
2933 14 Nov 14 olle 190     if no BASE item is found instead of throwing an exception.
2933 14 Nov 14 olle 191     @param dc The DbControl to use for database access
2933 14 Nov 14 olle 192     @return A DataFileType object
2933 14 Nov 14 olle 193   */
2933 14 Nov 14 olle 194   public DataFileType get(DbControl dc)
2933 14 Nov 14 olle 195   {
2933 14 Nov 14 olle 196     DataFileType type = null;
2933 14 Nov 14 olle 197     if (id == 0)
2933 14 Nov 14 olle 198     {
2933 14 Nov 14 olle 199       List<DataFileType> result = list(dc);
2933 14 Nov 14 olle 200       if (result.size() == 1)
2933 14 Nov 14 olle 201       {
2933 14 Nov 14 olle 202         type = result.get(0);
2933 14 Nov 14 olle 203         id = type.getId();
2933 14 Nov 14 olle 204       }
2933 14 Nov 14 olle 205     }
2933 14 Nov 14 olle 206     else
2933 14 Nov 14 olle 207     {
2933 14 Nov 14 olle 208       type = DataFileType.getById(dc, id);
2933 14 Nov 14 olle 209     }
2933 14 Nov 14 olle 210     return type;
2933 14 Nov 14 olle 211   }
2933 14 Nov 14 olle 212
2933 14 Nov 14 olle 213   
2933 14 Nov 14 olle 214   /**
2933 14 Nov 14 olle 215     List all file server registered in BASE with an name matching this 
2933 14 Nov 14 olle 216     definition. Normally, only a single file server should be returned.
2933 14 Nov 14 olle 217   */
2933 14 Nov 14 olle 218   public List<DataFileType> list(DbControl dc)
2933 14 Nov 14 olle 219   {
2933 14 Nov 14 olle 220     ItemQuery<DataFileType> query = DataFileType.getQuery();
2933 14 Nov 14 olle 221     query.restrict(
2933 14 Nov 14 olle 222       Restrictions.eq(
2933 14 Nov 14 olle 223         Hql.property("name"), 
2933 14 Nov 14 olle 224         Expressions.parameter("name", getName(), Type.STRING)
2933 14 Nov 14 olle 225       ));
2933 14 Nov 14 olle 226     query.include(Include.ALL);
2933 14 Nov 14 olle 227     return query.list(dc);
2933 14 Nov 14 olle 228   }
2933 14 Nov 14 olle 229   
2933 14 Nov 14 olle 230
2933 14 Nov 14 olle 231   
2933 14 Nov 14 olle 232 }