extensions/no.uib.cbu.base.magetabexport/trunk/src/main/java/no/uib/cbu/base/magetabexport/ItemInfo.java

Code
Comments
Other
Rev Date Author Line
1474 29 Nov 11 pawels 1 /*******************************************************************************
1474 29 Nov 11 pawels 2  * Copyright (c) 2011 The Norwegian Microarray Consortium.
1474 29 Nov 11 pawels 3  * All rights reserved. This program and the accompanying materials
1474 29 Nov 11 pawels 4  * are made available under the terms of the GNU Public License v3.0
1474 29 Nov 11 pawels 5  * which accompanies this distribution, and is available at
1474 29 Nov 11 pawels 6  * http://www.gnu.org/licenses/gpl-3.0.html
1474 29 Nov 11 pawels 7  * 
1474 29 Nov 11 pawels 8  * Contributors:
1474 29 Nov 11 pawels 9  *     The Norwegian Microarray Consortium - initial API and implementation
1474 29 Nov 11 pawels 10  ******************************************************************************/
1474 29 Nov 11 pawels 11 package no.uib.cbu.base.magetabexport;
1474 29 Nov 11 pawels 12
1474 29 Nov 11 pawels 13 import java.util.ArrayList;
1474 29 Nov 11 pawels 14 import java.util.Collections;
1474 29 Nov 11 pawels 15 import java.util.Hashtable;
1474 29 Nov 11 pawels 16 import java.util.List;
1474 29 Nov 11 pawels 17
1474 29 Nov 11 pawels 18 public class ItemInfo {
1474 29 Nov 11 pawels 19   
1474 29 Nov 11 pawels 20   public enum TYPE {SOURCE, SAMPLE, POOLED_SAMPLE, EXTRACT, 
1474 29 Nov 11 pawels 21     POOLED_EXTRACT, LABELED_EXTRACT, POOLED_LABELED_EXTRACT,
1474 29 Nov 11 pawels 22     HYBRIDIZATION, SCAN, ARRAY_DATA_FILE, NORMALIZATION,
1474 29 Nov 11 pawels 23     DERIVED_ARRAY_DATA_FILE};
1474 29 Nov 11 pawels 24
1474 29 Nov 11 pawels 25   private TYPE type;
1474 29 Nov 11 pawels 26   private String name;
1474 29 Nov 11 pawels 27   
1474 29 Nov 11 pawels 28   /** Protocol that was used to generate this item*/
1474 29 Nov 11 pawels 29   private ProtocolInfo protocol;
1474 29 Nov 11 pawels 30   
1474 29 Nov 11 pawels 31   /** MaterialType property available to SOURCE, SAMPLE, EXTRACT and LABELED_EXTRACT items */
1474 29 Nov 11 pawels 32   private String materialType;
1474 29 Nov 11 pawels 33   
1474 29 Nov 11 pawels 34   /** A list of characteristics hashed on the name */
1474 29 Nov 11 pawels 35   private Hashtable<String, Characteristic> characteristics;
1474 29 Nov 11 pawels 36   
1474 29 Nov 11 pawels 37   
1474 29 Nov 11 pawels 38   
1474 29 Nov 11 pawels 39   public ItemInfo(TYPE itemType, String itemName) {
1474 29 Nov 11 pawels 40     type = itemType;
1474 29 Nov 11 pawels 41     name = itemName;
1474 29 Nov 11 pawels 42     characteristics = new Hashtable<String, Characteristic>();
1474 29 Nov 11 pawels 43   }
1474 29 Nov 11 pawels 44   
1474 29 Nov 11 pawels 45
1474 29 Nov 11 pawels 46   /**
1474 29 Nov 11 pawels 47    * The method returns a sorted list of names. The list is a fresh new object so it can be manipulated.
1474 29 Nov 11 pawels 48    * The String objects that it contains are not copied, so their properties must not be changed. 
1474 29 Nov 11 pawels 49    * 
1474 29 Nov 11 pawels 50    * @return sorted list of names of characteristics set on this item.
1474 29 Nov 11 pawels 51    */
1474 29 Nov 11 pawels 52   public List<String> getAllCharacteristicsNames() {
1474 29 Nov 11 pawels 53     ArrayList<String> names = new ArrayList<String>(characteristics.keySet());
1474 29 Nov 11 pawels 54     Collections.sort(names, String.CASE_INSENSITIVE_ORDER);    
1474 29 Nov 11 pawels 55     return names;
1474 29 Nov 11 pawels 56   }
1474 29 Nov 11 pawels 57   
1474 29 Nov 11 pawels 58   public String getCharacteristicValue(String characteristicName) {
1474 29 Nov 11 pawels 59     if (characteristics.containsKey(characteristicName)) {
1474 29 Nov 11 pawels 60       return characteristics.get(characteristicName).value;
1474 29 Nov 11 pawels 61     }
1474 29 Nov 11 pawels 62     return null;
1474 29 Nov 11 pawels 63   }
1474 29 Nov 11 pawels 64   
1474 29 Nov 11 pawels 65   public String getCharacteristicSource(String characteristicName) {
1474 29 Nov 11 pawels 66     if (characteristics.containsKey(characteristicName)) {
1474 29 Nov 11 pawels 67       return characteristics.get(characteristicName).source;
1474 29 Nov 11 pawels 68     }
1474 29 Nov 11 pawels 69     return null;
1474 29 Nov 11 pawels 70   }
1474 29 Nov 11 pawels 71
1474 29 Nov 11 pawels 72   
1474 29 Nov 11 pawels 73   public void addCharacteristic(String name, String value, String source) {
1474 29 Nov 11 pawels 74     if (name == null || name.equals("")) {
1474 29 Nov 11 pawels 75       return;
1474 29 Nov 11 pawels 76     }
1474 29 Nov 11 pawels 77     characteristics.put(name, new Characteristic(name,value,source));
1474 29 Nov 11 pawels 78   }
1474 29 Nov 11 pawels 79   
1474 29 Nov 11 pawels 80   public TYPE getType() {  return type; }
1474 29 Nov 11 pawels 81
1474 29 Nov 11 pawels 82   public String getName() { return name; }
1474 29 Nov 11 pawels 83   
1474 29 Nov 11 pawels 84   public ProtocolInfo getProtocol() { return protocol; }
1474 29 Nov 11 pawels 85   
1474 29 Nov 11 pawels 86   /**
1474 29 Nov 11 pawels 87    * Set protocol for this item. Type of the protocol is checked, and if wrong
1474 29 Nov 11 pawels 88    * the protocol is not set.
1474 29 Nov 11 pawels 89    * @param pi
1474 29 Nov 11 pawels 90    */
1474 29 Nov 11 pawels 91   public void setProtocol(ProtocolInfo p) {
1474 29 Nov 11 pawels 92     if (p == null) {
1474 29 Nov 11 pawels 93       protocol = null;
1474 29 Nov 11 pawels 94       return;
1474 29 Nov 11 pawels 95     }
1474 29 Nov 11 pawels 96     
1474 29 Nov 11 pawels 97     ProtocolInfo.TYPE pType = p.getType();
1474 29 Nov 11 pawels 98     if ((type.equals(TYPE.SAMPLE) && pType.equals(ProtocolInfo.TYPE.SAMPLING)) ||
1474 29 Nov 11 pawels 99       (type.equals(TYPE.EXTRACT) && pType.equals(ProtocolInfo.TYPE.EXTRACTION)) || 
1474 29 Nov 11 pawels 100       (type.equals(TYPE.LABELED_EXTRACT) && pType.equals(ProtocolInfo.TYPE.LABELING)) ||
1474 29 Nov 11 pawels 101       (type.equals(TYPE.HYBRIDIZATION) && pType.equals(ProtocolInfo.TYPE.HYBRIDIZATION)) ||
1474 29 Nov 11 pawels 102       (type.equals(TYPE.SCAN) && pType.equals(ProtocolInfo.TYPE.SCANNING)) ||
1474 29 Nov 11 pawels 103       (type.equals(TYPE.DERIVED_ARRAY_DATA_FILE) && pType.equals(ProtocolInfo.TYPE.DATA_PROCESSING)) ||
1474 29 Nov 11 pawels 104       (isPooled() && pType.equals(ProtocolInfo.TYPE.POOLING))) {
1474 29 Nov 11 pawels 105       
1474 29 Nov 11 pawels 106       protocol = p;
1474 29 Nov 11 pawels 107     }
1474 29 Nov 11 pawels 108   }
1474 29 Nov 11 pawels 109   
1474 29 Nov 11 pawels 110   public String getMaterialType() { return materialType; }
1474 29 Nov 11 pawels 111
1474 29 Nov 11 pawels 112   public void setMaterialType(String materialType) { 
1474 29 Nov 11 pawels 113     if (isBioMaterial()) { 
1474 29 Nov 11 pawels 114       this.materialType = materialType; 
1474 29 Nov 11 pawels 115     }
1474 29 Nov 11 pawels 116   }
1474 29 Nov 11 pawels 117
1474 29 Nov 11 pawels 118   public boolean isBioMaterial() {
1474 29 Nov 11 pawels 119     return type.equals(TYPE.SOURCE) || type.equals(TYPE.SAMPLE) ||
1474 29 Nov 11 pawels 120         type.equals(TYPE.EXTRACT) || type.equals(TYPE.LABELED_EXTRACT) ||
1474 29 Nov 11 pawels 121         isPooled();
1474 29 Nov 11 pawels 122   }
1474 29 Nov 11 pawels 123   
1474 29 Nov 11 pawels 124   public boolean isPooled() {
1474 29 Nov 11 pawels 125     return type.equals(TYPE.POOLED_SAMPLE) || 
1474 29 Nov 11 pawels 126         type.equals(TYPE.POOLED_EXTRACT) || 
1474 29 Nov 11 pawels 127         type.equals(TYPE.POOLED_LABELED_EXTRACT);
1474 29 Nov 11 pawels 128   }
1474 29 Nov 11 pawels 129   
1474 29 Nov 11 pawels 130   public boolean equals(Object o) {
1474 29 Nov 11 pawels 131     if (o == null || !(o instanceof ItemInfo)) {
1474 29 Nov 11 pawels 132       return false;
1474 29 Nov 11 pawels 133     }
1474 29 Nov 11 pawels 134     
1474 29 Nov 11 pawels 135     ItemInfo ii = (ItemInfo)o;
1474 29 Nov 11 pawels 136     if (name == null || ii.getName() == null) {
1474 29 Nov 11 pawels 137       return name==null && ii.getName()==null && type.equals(ii.getType());
1474 29 Nov 11 pawels 138     } else {
1474 29 Nov 11 pawels 139       return ii.getName().equals(name) &&  ii.getType().equals(type);
1474 29 Nov 11 pawels 140     }
1474 29 Nov 11 pawels 141
1474 29 Nov 11 pawels 142   }
1474 29 Nov 11 pawels 143   
1474 29 Nov 11 pawels 144   public int hashCode() {
1474 29 Nov 11 pawels 145     return (name!=null?name.hashCode():0) + type.hashCode();
1474 29 Nov 11 pawels 146   }
1474 29 Nov 11 pawels 147 }
1474 29 Nov 11 pawels 148
1474 29 Nov 11 pawels 149 class Characteristic {
1474 29 Nov 11 pawels 150   String name;
1474 29 Nov 11 pawels 151   String value;
1474 29 Nov 11 pawels 152   String source;
1474 29 Nov 11 pawels 153   
1474 29 Nov 11 pawels 154   public Characteristic (String name, String value, String sourceRef) {
1474 29 Nov 11 pawels 155     this.name = name;
1474 29 Nov 11 pawels 156     this.value = value;
1474 29 Nov 11 pawels 157     this.source = sourceRef;
1474 29 Nov 11 pawels 158   }
1474 29 Nov 11 pawels 159 }