1474 |
29 Nov 11 |
pawels |
1 |
/******************************************************************************* |
1474 |
29 Nov 11 |
pawels |
* Copyright (c) 2011 The Norwegian Microarray Consortium. |
1474 |
29 Nov 11 |
pawels |
* All rights reserved. This program and the accompanying materials |
1474 |
29 Nov 11 |
pawels |
* are made available under the terms of the GNU Public License v3.0 |
1474 |
29 Nov 11 |
pawels |
* which accompanies this distribution, and is available at |
1474 |
29 Nov 11 |
pawels |
* http://www.gnu.org/licenses/gpl-3.0.html |
1474 |
29 Nov 11 |
pawels |
7 |
* |
1474 |
29 Nov 11 |
pawels |
* Contributors: |
1474 |
29 Nov 11 |
pawels |
* 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 |
/** 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 |
/** 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 |
/** 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 |
* 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 |
* 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 |
* @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 |
* Set protocol for this item. Type of the protocol is checked, and if wrong |
1474 |
29 Nov 11 |
pawels |
* the protocol is not set. |
1474 |
29 Nov 11 |
pawels |
* @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 |
} |