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

Code
Comments
Other
Rev Date Author Line
5199 15 Dec 09 nicklas 1 /**
5199 15 Dec 09 nicklas 2   $Id$
5199 15 Dec 09 nicklas 3
5199 15 Dec 09 nicklas 4   Copyright (C) 2009 Nicklas Nordborg
5199 15 Dec 09 nicklas 5
5199 15 Dec 09 nicklas 6   This file is part of BASE - BioArray Software Environment.
5199 15 Dec 09 nicklas 7   Available at http://base.thep.lu.se/
5199 15 Dec 09 nicklas 8
5199 15 Dec 09 nicklas 9   BASE is free software; you can redistribute it and/or
5199 15 Dec 09 nicklas 10   modify it under the terms of the GNU General Public License
5199 15 Dec 09 nicklas 11   as published by the Free Software Foundation; either version 3
5199 15 Dec 09 nicklas 12   of the License, or (at your option) any later version.
5199 15 Dec 09 nicklas 13
5199 15 Dec 09 nicklas 14   BASE is distributed in the hope that it will be useful,
5199 15 Dec 09 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5199 15 Dec 09 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5199 15 Dec 09 nicklas 17   GNU General Public License for more details.
5199 15 Dec 09 nicklas 18
5199 15 Dec 09 nicklas 19   You should have received a copy of the GNU General Public License
5199 15 Dec 09 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5199 15 Dec 09 nicklas 21 */
5199 15 Dec 09 nicklas 22 package net.sf.basedb.util.export.spotdata;
5199 15 Dec 09 nicklas 23
5199 15 Dec 09 nicklas 24 import java.util.Collection;
5199 15 Dec 09 nicklas 25 import java.util.Collections;
5199 15 Dec 09 nicklas 26
5199 15 Dec 09 nicklas 27 import net.sf.basedb.core.BioAssay;
5199 15 Dec 09 nicklas 28 import net.sf.basedb.core.DbControl;
5199 15 Dec 09 nicklas 29 import net.sf.basedb.core.Metadata;
5319 20 Apr 10 nicklas 30 import net.sf.basedb.core.Type;
5319 20 Apr 10 nicklas 31 import net.sf.basedb.core.Metadata.PropertyPath;
5319 20 Apr 10 nicklas 32 import net.sf.basedb.util.EqualsHelper;
5199 15 Dec 09 nicklas 33 import net.sf.basedb.util.formatter.Formatter;
5199 15 Dec 09 nicklas 34
5199 15 Dec 09 nicklas 35 /**
5199 15 Dec 09 nicklas 36   Assay field implementation that exports a named property 
5199 15 Dec 09 nicklas 37   from a bioassay. The default setting will export the "name"
5319 20 Apr 10 nicklas 38   property. One instance of this class is considered to
5319 20 Apr 10 nicklas 39   be equal to another if they are configured with the same property
5319 20 Apr 10 nicklas 40   and title.
5199 15 Dec 09 nicklas 41
5199 15 Dec 09 nicklas 42   @author Nicklas
5199 15 Dec 09 nicklas 43   @since 2.15
5199 15 Dec 09 nicklas 44   @base.modified $Date$
5199 15 Dec 09 nicklas 45 */
5199 15 Dec 09 nicklas 46 public class AssayPropertyField
5199 15 Dec 09 nicklas 47   implements AssayField
5199 15 Dec 09 nicklas 48 {
5199 15 Dec 09 nicklas 49   private final Metadata<BioAssay> metadata;
5319 20 Apr 10 nicklas 50   private PropertyPath<BioAssay, ?> propertyPath;
5199 15 Dec 09 nicklas 51   private String property;
5199 15 Dec 09 nicklas 52   private String title;
5319 20 Apr 10 nicklas 53   private Type type;
5199 15 Dec 09 nicklas 54   private Formatter<?> formatter;
5199 15 Dec 09 nicklas 55   
5199 15 Dec 09 nicklas 56   /**
5199 15 Dec 09 nicklas 57     Create a new annotation field. The property is automatically
5199 15 Dec 09 nicklas 58     set to "name". Call {@link #setProperty(String)}
5199 15 Dec 09 nicklas 59     and {@link #setTitle(String)} to change.
5319 20 Apr 10 nicklas 60     @see ExportableFieldFactory#assayProperty(String, String, Type, Formatter)
5199 15 Dec 09 nicklas 61   */
5199 15 Dec 09 nicklas 62   public AssayPropertyField()
5199 15 Dec 09 nicklas 63   {
5319 20 Apr 10 nicklas 64     this.metadata = Metadata.getInstance(BioAssay.class);
5199 15 Dec 09 nicklas 65     setProperty("name");
5199 15 Dec 09 nicklas 66     setTitle("Name");
5319 20 Apr 10 nicklas 67     setType(Type.STRING);
5199 15 Dec 09 nicklas 68   }
5199 15 Dec 09 nicklas 69   
5199 15 Dec 09 nicklas 70   /*
5199 15 Dec 09 nicklas 71     From the AssayField interface
5199 15 Dec 09 nicklas 72     -------------------------------
5199 15 Dec 09 nicklas 73   */
5199 15 Dec 09 nicklas 74   @Override
5199 15 Dec 09 nicklas 75   public String getTitle()
5199 15 Dec 09 nicklas 76   {
5199 15 Dec 09 nicklas 77     return title == null ? "" : title;
5199 15 Dec 09 nicklas 78   }
5199 15 Dec 09 nicklas 79   /**
5199 15 Dec 09 nicklas 80     Return all values that are given by the specified property.
5199 15 Dec 09 nicklas 81   */
5199 15 Dec 09 nicklas 82   @Override
5199 15 Dec 09 nicklas 83   public Collection<?> getAssayValue(DbControl dc, BioAssay ba)
5199 15 Dec 09 nicklas 84   {
6875 20 Apr 15 nicklas 85     Collection<?> c = null;
5319 20 Apr 10 nicklas 86     Object value = propertyPath.getValue(dc, ba);
5199 15 Dec 09 nicklas 87     if (value != null)
5199 15 Dec 09 nicklas 88     {
5199 15 Dec 09 nicklas 89       c = value instanceof Collection ? 
6875 20 Apr 15 nicklas 90           (Collection<?>)value : Collections.singleton(value);
5199 15 Dec 09 nicklas 91     }
5199 15 Dec 09 nicklas 92     return c;
5199 15 Dec 09 nicklas 93   }
5199 15 Dec 09 nicklas 94   @Override
5319 20 Apr 10 nicklas 95   public Type getType()
5319 20 Apr 10 nicklas 96   {
5319 20 Apr 10 nicklas 97     return type;
5319 20 Apr 10 nicklas 98   }
5319 20 Apr 10 nicklas 99   @Override
5199 15 Dec 09 nicklas 100   public Formatter<?> getFormatter()
5199 15 Dec 09 nicklas 101   {
5199 15 Dec 09 nicklas 102     return formatter;
5199 15 Dec 09 nicklas 103   }
5373 03 Aug 10 nicklas 104   /**
5373 03 Aug 10 nicklas 105     @return Always FALSE
5373 03 Aug 10 nicklas 106   */
5373 03 Aug 10 nicklas 107   @Override
5373 03 Aug 10 nicklas 108   public boolean isAnnotation()
5373 03 Aug 10 nicklas 109   {
5373 03 Aug 10 nicklas 110     return false;
5373 03 Aug 10 nicklas 111   }
5199 15 Dec 09 nicklas 112   // -----------------------------------
5319 20 Apr 10 nicklas 113
5199 15 Dec 09 nicklas 114   /**
5319 20 Apr 10 nicklas 115     An assay field is equal to another assay field if it uses the same
5319 20 Apr 10 nicklas 116     property and has the same title.
5319 20 Apr 10 nicklas 117   */
5319 20 Apr 10 nicklas 118   @Override
5319 20 Apr 10 nicklas 119   public boolean equals(Object obj)
5319 20 Apr 10 nicklas 120   {
5319 20 Apr 10 nicklas 121     if (this == obj) return true;
5319 20 Apr 10 nicklas 122     if (!(obj instanceof AssayPropertyField)) return false;
5319 20 Apr 10 nicklas 123     AssayPropertyField other = (AssayPropertyField)obj;
5319 20 Apr 10 nicklas 124     return EqualsHelper.equals(this.getProperty(), other.getProperty()) 
5319 20 Apr 10 nicklas 125       && EqualsHelper.equals(this.getTitle(), other.getTitle());
5319 20 Apr 10 nicklas 126   }
5319 20 Apr 10 nicklas 127
5319 20 Apr 10 nicklas 128   @Override
5319 20 Apr 10 nicklas 129   public int hashCode()
5319 20 Apr 10 nicklas 130   {
5319 20 Apr 10 nicklas 131     return 13 * EqualsHelper.hashCode(getProperty()) + 
5319 20 Apr 10 nicklas 132       EqualsHelper.hashCode(getTitle());
5319 20 Apr 10 nicklas 133   }
5319 20 Apr 10 nicklas 134
5319 20 Apr 10 nicklas 135   @Override
5319 20 Apr 10 nicklas 136   public String toString()
5319 20 Apr 10 nicklas 137   {
5319 20 Apr 10 nicklas 138     return "AssayPropertyField(title=" + getTitle() + "; property=" + getProperty() + ")";
5319 20 Apr 10 nicklas 139   }
5319 20 Apr 10 nicklas 140
5319 20 Apr 10 nicklas 141   /**
5199 15 Dec 09 nicklas 142     Set the property that should be exported. For syntax
5319 20 Apr 10 nicklas 143     see {@link Metadata#getPropertyPath(String, boolean)}.
5199 15 Dec 09 nicklas 144     Do not forget to also change the title.
5199 15 Dec 09 nicklas 145   */
5199 15 Dec 09 nicklas 146   public void setProperty(String property)
5199 15 Dec 09 nicklas 147   {
5199 15 Dec 09 nicklas 148     this.property = property;
5319 20 Apr 10 nicklas 149     this.propertyPath = metadata.getPropertyPath(property, true);
5199 15 Dec 09 nicklas 150   }
5199 15 Dec 09 nicklas 151   
5199 15 Dec 09 nicklas 152   /**
5319 20 Apr 10 nicklas 153     Get the configured property.
5319 20 Apr 10 nicklas 154   */
5319 20 Apr 10 nicklas 155   public String getProperty()
5319 20 Apr 10 nicklas 156   {
5319 20 Apr 10 nicklas 157     return property;
5319 20 Apr 10 nicklas 158   }
5319 20 Apr 10 nicklas 159   
5319 20 Apr 10 nicklas 160   /**
5199 15 Dec 09 nicklas 161     Set the title of the exported property.
5199 15 Dec 09 nicklas 162   */
5199 15 Dec 09 nicklas 163   public void setTitle(String title)
5199 15 Dec 09 nicklas 164   {
5199 15 Dec 09 nicklas 165     this.title = title;
5199 15 Dec 09 nicklas 166   }
5199 15 Dec 09 nicklas 167
5199 15 Dec 09 nicklas 168   /**
5319 20 Apr 10 nicklas 169     Set the data type of the exported property.
5319 20 Apr 10 nicklas 170     @since 2.15
5319 20 Apr 10 nicklas 171   */
5319 20 Apr 10 nicklas 172   public void setType(Type type)
5319 20 Apr 10 nicklas 173   {
5319 20 Apr 10 nicklas 174     this.type = type;
5319 20 Apr 10 nicklas 175   }
5319 20 Apr 10 nicklas 176   
5319 20 Apr 10 nicklas 177   /**
5199 15 Dec 09 nicklas 178     Set a formatter to use for formatting the exported values.
5199 15 Dec 09 nicklas 179   */
5199 15 Dec 09 nicklas 180   public void setFormatter(Formatter<?> formatter)
5199 15 Dec 09 nicklas 181   {
5199 15 Dec 09 nicklas 182     this.formatter = formatter;
5199 15 Dec 09 nicklas 183   }
5199 15 Dec 09 nicklas 184   
5199 15 Dec 09 nicklas 185 }