src/core/net/sf/basedb/util/export/spotdata/Base1FieldConverter.java

Code
Comments
Other
Rev Date Author Line
5292 26 Mar 10 nicklas 1 /**
5292 26 Mar 10 nicklas 2   $Id: FieldConverter.java 5277 2010-03-22 12:45:37Z nicklas $
5292 26 Mar 10 nicklas 3
5292 26 Mar 10 nicklas 4   Copyright (C) 2009 Nicklas Nordborg
5292 26 Mar 10 nicklas 5
5292 26 Mar 10 nicklas 6   This file is part of BASE - BioArray Software Environment.
5292 26 Mar 10 nicklas 7   Available at http://base.thep.lu.se/
5292 26 Mar 10 nicklas 8
5292 26 Mar 10 nicklas 9   BASE is free software; you can redistribute it and/or
5292 26 Mar 10 nicklas 10   modify it under the terms of the GNU General Public License
5292 26 Mar 10 nicklas 11   as published by the Free Software Foundation; either version 3
5292 26 Mar 10 nicklas 12   of the License, or (at your option) any later version.
5292 26 Mar 10 nicklas 13
5292 26 Mar 10 nicklas 14   BASE is distributed in the hope that it will be useful,
5292 26 Mar 10 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5292 26 Mar 10 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5292 26 Mar 10 nicklas 17   GNU General Public License for more details.
5292 26 Mar 10 nicklas 18
5292 26 Mar 10 nicklas 19   You should have received a copy of the GNU General Public License
5292 26 Mar 10 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5292 26 Mar 10 nicklas 21 */
5292 26 Mar 10 nicklas 22 package net.sf.basedb.util.export.spotdata;
5292 26 Mar 10 nicklas 23
5292 26 Mar 10 nicklas 24
5292 26 Mar 10 nicklas 25 import net.sf.basedb.core.BioAssaySet;
5292 26 Mar 10 nicklas 26 import net.sf.basedb.core.DbControl;
5292 26 Mar 10 nicklas 27 import net.sf.basedb.core.ItemNotFoundException;
5292 26 Mar 10 nicklas 28 import net.sf.basedb.core.ExtraValue.CoordinateType;
5292 26 Mar 10 nicklas 29
5292 26 Mar 10 nicklas 30 /**
5292 26 Mar 10 nicklas 31   Exportable field converter that support BASE 1 naming conventions.
5292 26 Mar 10 nicklas 32   This implementation rely in most cases on formulas with the same 
5292 26 Mar 10 nicklas 33   name as the BASE 1 field. BASE 1 fields that happens to have the 
5292 26 Mar 10 nicklas 34   same name in BASE 2 doesn't need formulas.
5292 26 Mar 10 nicklas 35   <p>
5292 26 Mar 10 nicklas 36   This class extends the standard field converter and only overrides
5292 26 Mar 10 nicklas 37   methods that is used by the {@link net.sf.basedb.plugins.Base1PluginExecuter} 
5292 26 Mar 10 nicklas 38   so thatit can work as expected. The major differences are the name of
5292 26 Mar 10 nicklas 39   intensity fields and the _xc_ prefix on extra value fields.
5292 26 Mar 10 nicklas 40   
5292 26 Mar 10 nicklas 41   @author Nicklas
5292 26 Mar 10 nicklas 42   @version 2.15
5292 26 Mar 10 nicklas 43   @base.modified $Date: 2010-03-22 13:45:37 +0100 (må, 22 mar 2010) $
5292 26 Mar 10 nicklas 44 */
5292 26 Mar 10 nicklas 45 public class Base1FieldConverter
5292 26 Mar 10 nicklas 46   extends StandardFieldConverter
5292 26 Mar 10 nicklas 47 {
5292 26 Mar 10 nicklas 48   
5292 26 Mar 10 nicklas 49   /**
5292 26 Mar 10 nicklas 50     Create a new converter for the given bioassay set.
5292 26 Mar 10 nicklas 51     @param dc A DbControl to use for database access
5292 26 Mar 10 nicklas 52     @param source The source bioassay set
5292 26 Mar 10 nicklas 53   */
5292 26 Mar 10 nicklas 54   public Base1FieldConverter(DbControl dc, BioAssaySet source)
5292 26 Mar 10 nicklas 55   {
5292 26 Mar 10 nicklas 56     super(dc, source);
5292 26 Mar 10 nicklas 57   }
5292 26 Mar 10 nicklas 58   
5292 26 Mar 10 nicklas 59   /*
5292 26 Mar 10 nicklas 60     From the ExportableFieldConverter interface
5292 26 Mar 10 nicklas 61     -------------------------------------------
5292 26 Mar 10 nicklas 62   */
5292 26 Mar 10 nicklas 63
5292 26 Mar 10 nicklas 64   /**
5292 26 Mar 10 nicklas 65     Convert a reporter field. The conversion is done in steps
5292 26 Mar 10 nicklas 66     until a match is found:
5292 26 Mar 10 nicklas 67     <ul>
5292 26 Mar 10 nicklas 68     <li>If the field starts with '_xc_' it could be an extra value. We
5292 26 Mar 10 nicklas 69       check if there is a position extra value with an external id that is the
5292 26 Mar 10 nicklas 70       same as the rest of the field (eg. without the _xc_ prefix).
5292 26 Mar 10 nicklas 71     <li>Check if a formula that has the exactly the same name as the
5292 26 Mar 10 nicklas 72       given field name exists. The formula must be a column expression
5292 26 Mar 10 nicklas 73       and it must usable on the raw data type and the intensity transform 
5292 26 Mar 10 nicklas 74       that the source bioassay set uses.
5292 26 Mar 10 nicklas 75     <li>Check if an extended reporter property with exactly the same name
5292 26 Mar 10 nicklas 76       as the given field name exists.
5292 26 Mar 10 nicklas 77     </ul>
5292 26 Mar 10 nicklas 78     @param name The BASE 1 field name
5292 26 Mar 10 nicklas 79     @param required Controls if null is returned or an exception is thrown when
5292 26 Mar 10 nicklas 80       a field is not found
5292 26 Mar 10 nicklas 81     @return A DynamicField expression or null if the field name can't be 
5292 26 Mar 10 nicklas 82       converted
5292 26 Mar 10 nicklas 83   */
5292 26 Mar 10 nicklas 84   @Override
5292 26 Mar 10 nicklas 85   public DynamicField getReporterField(String name, boolean required) 
5292 26 Mar 10 nicklas 86   {
5292 26 Mar 10 nicklas 87     DynamicField fld = null;
5292 26 Mar 10 nicklas 88     if (name.startsWith("_xc_"))
5292 26 Mar 10 nicklas 89     {
5292 26 Mar 10 nicklas 90       fld = getExtraValueField(name.substring(4), CoordinateType.POSITION, name);
5292 26 Mar 10 nicklas 91     }
5292 26 Mar 10 nicklas 92     if (fld == null)
5292 26 Mar 10 nicklas 93     {
5292 26 Mar 10 nicklas 94       fld = getFormulaField(name, name);
5292 26 Mar 10 nicklas 95     }
5292 26 Mar 10 nicklas 96     if (fld == null)
5292 26 Mar 10 nicklas 97     {
5292 26 Mar 10 nicklas 98       fld = getReporterProperty(name, name);
5292 26 Mar 10 nicklas 99     }
5292 26 Mar 10 nicklas 100     if (fld == null && required)
5292 26 Mar 10 nicklas 101     {
5292 26 Mar 10 nicklas 102       throw new ItemNotFoundException("Unknown reporter field: " + name +
5292 26 Mar 10 nicklas 103         " (you can add this field as an formula)");
5292 26 Mar 10 nicklas 104     }
5292 26 Mar 10 nicklas 105     return fld;
5292 26 Mar 10 nicklas 106   }
5292 26 Mar 10 nicklas 107
5292 26 Mar 10 nicklas 108   /**
5292 26 Mar 10 nicklas 109     Convert a spot field. The conversion is done in steps
5292 26 Mar 10 nicklas 110     until a match is found:
5292 26 Mar 10 nicklas 111     <ul>
5292 26 Mar 10 nicklas 112     <li>If the field starts with '_xc_' it could be an extra value. We
5292 26 Mar 10 nicklas 113       check if there is an spot extra value with an external id that is the
5292 26 Mar 10 nicklas 114       same as the rest of the field (eg. without the _xc_ prefix).
5292 26 Mar 10 nicklas 115     <li>Check if a formula that has the exactly the same name as the
5292 26 Mar 10 nicklas 116       given field name exists. The formula must be a column expression
5292 26 Mar 10 nicklas 117       and it must usable on the raw data type and the intensity transform 
5292 26 Mar 10 nicklas 118       that the source bioassay set uses.
5292 26 Mar 10 nicklas 119     <li>Check if a raw data property with exactly the same name
5292 26 Mar 10 nicklas 120       as the given field name exists.
5292 26 Mar 10 nicklas 121     <li>Check if the field name is 'intensityX' where 'X' is a channel
5292 26 Mar 10 nicklas 122       number.
5292 26 Mar 10 nicklas 123     </ul>
5292 26 Mar 10 nicklas 124     @param name The BASE 1 field name
5292 26 Mar 10 nicklas 125     @param required Controls if null is returned or an exception is thrown when
5292 26 Mar 10 nicklas 126       a field is not found
5292 26 Mar 10 nicklas 127     @return A DynamicField expression or null if the field name can't be 
5292 26 Mar 10 nicklas 128       converted
5292 26 Mar 10 nicklas 129   */
5292 26 Mar 10 nicklas 130   @Override
5292 26 Mar 10 nicklas 131   public DynamicField getSpotField(String name, boolean required) 
5292 26 Mar 10 nicklas 132   {
5292 26 Mar 10 nicklas 133     DynamicField fld = null;
5292 26 Mar 10 nicklas 134     if (name.startsWith("_xc_"))
5292 26 Mar 10 nicklas 135     {
5292 26 Mar 10 nicklas 136       fld = getExtraValueField(name.substring(4), CoordinateType.SPOT, name);
5292 26 Mar 10 nicklas 137     }
5292 26 Mar 10 nicklas 138     if (fld == null)
5292 26 Mar 10 nicklas 139     {
5292 26 Mar 10 nicklas 140       fld = getFormulaField(name, name);
5292 26 Mar 10 nicklas 141     }
5292 26 Mar 10 nicklas 142     if (fld == null)
5292 26 Mar 10 nicklas 143     {
5300 31 Mar 10 nicklas 144       fld = getRawDataProperty(name, name);
5292 26 Mar 10 nicklas 145     }
5292 26 Mar 10 nicklas 146     if (fld == null)
5292 26 Mar 10 nicklas 147     {
5292 26 Mar 10 nicklas 148       fld = getIntensityField(name, name);
5292 26 Mar 10 nicklas 149     }
5292 26 Mar 10 nicklas 150     if (fld == null && required)
5292 26 Mar 10 nicklas 151     {
5292 26 Mar 10 nicklas 152       throw new ItemNotFoundException("Unknown spot field: " + name +
5292 26 Mar 10 nicklas 153         " (you can add this field as a formula)");
5292 26 Mar 10 nicklas 154     }    
5292 26 Mar 10 nicklas 155     return fld;
5292 26 Mar 10 nicklas 156   }
5292 26 Mar 10 nicklas 157
5292 26 Mar 10 nicklas 158   // --------------------------------
5292 26 Mar 10 nicklas 159
5292 26 Mar 10 nicklas 160   /**
5292 26 Mar 10 nicklas 161     Create a dynamic field for spot intensity if the field name has
5292 26 Mar 10 nicklas 162     the pattern 'intensityX' where 'X' is a channel number between 1
5292 26 Mar 10 nicklas 163     and the number of channels in the raw data type used by the 
5292 26 Mar 10 nicklas 164     source bioassay set.
5292 26 Mar 10 nicklas 165     @param fieldName The field name
5292 26 Mar 10 nicklas 166     @return A dynamic field, or null if the name doesn't match the pattern
5292 26 Mar 10 nicklas 167   */
5292 26 Mar 10 nicklas 168   @Override
5292 26 Mar 10 nicklas 169   protected DynamicField getIntensityField(String fieldName, String exportTitle)
5292 26 Mar 10 nicklas 170   {
5292 26 Mar 10 nicklas 171     DynamicField df = null;
5292 26 Mar 10 nicklas 172     for (int i = 1; i <= getSource().getRawDataType().getChannels(); ++i)
5292 26 Mar 10 nicklas 173     {
5292 26 Mar 10 nicklas 174       if (fieldName.equals("intensity"+i))
5292 26 Mar 10 nicklas 175       {
5292 26 Mar 10 nicklas 176         df = ExportableFieldFactory.channel(i, exportTitle, null);
5292 26 Mar 10 nicklas 177         break;
5292 26 Mar 10 nicklas 178       }
5292 26 Mar 10 nicklas 179     }
5292 26 Mar 10 nicklas 180     return df;
5292 26 Mar 10 nicklas 181   }
5292 26 Mar 10 nicklas 182
5292 26 Mar 10 nicklas 183 }