127df6478feeedf80e4bb5f5ececb71560aa6e74
[jabaws.git] / datamodel / compbio / data / sequence / Score.java
1 package compbio.data.sequence;\r
2 \r
3 import java.io.BufferedWriter;\r
4 import java.io.IOException;\r
5 import java.io.OutputStream;\r
6 import java.io.OutputStreamWriter;\r
7 import java.text.NumberFormat;\r
8 import java.util.Arrays;\r
9 import java.util.List;\r
10 import java.util.Locale;\r
11 import java.util.Set;\r
12 \r
13 import javax.xml.bind.annotation.XmlAccessType;\r
14 import javax.xml.bind.annotation.XmlAccessorType;\r
15 \r
16 import compbio.util.annotation.Immutable;\r
17 \r
18 @XmlAccessorType(XmlAccessType.FIELD)\r
19 @Immutable\r
20 public class Score {\r
21 \r
22         public static final NumberFormat NUMBER_FORMAT = NumberFormat\r
23                         .getNumberInstance(Locale.UK);\r
24         static {\r
25                 NUMBER_FORMAT.setGroupingUsed(false);\r
26                 NUMBER_FORMAT.setMaximumFractionDigits(3);\r
27         }\r
28 \r
29         private ConservationMethod method;\r
30 \r
31         private List<Float> scores;\r
32 \r
33         private Score() {\r
34                 // JaXB default constructor\r
35         }\r
36 \r
37         public Score(ConservationMethod method, List<Float> scores) {\r
38                 this.method = method;\r
39                 this.scores = scores;\r
40         }\r
41 \r
42         public ConservationMethod getMethod() {\r
43                 return method;\r
44         }\r
45 \r
46         public List<Float> getScores() {\r
47                 return scores;\r
48         }\r
49 \r
50         @Override\r
51         public String toString() {\r
52                 return "Score [method=" + method + ", scores=" + scores + "]";\r
53         }\r
54 \r
55         @Override\r
56         public int hashCode() {\r
57                 final int prime = 31;\r
58                 int result = 1;\r
59                 result = prime * result + ((method == null) ? 0 : method.hashCode());\r
60                 result = prime * result + ((scores == null) ? 0 : scores.hashCode());\r
61                 return result;\r
62         }\r
63 \r
64         /*\r
65          * TODO test ! (non-Javadoc)\r
66          * \r
67          * @see java.lang.Object#equals(java.lang.Object)\r
68          */\r
69         @Override\r
70         public boolean equals(Object obj) {\r
71                 if (this == obj)\r
72                         return true;\r
73                 if (obj == null)\r
74                         return false;\r
75                 if (getClass() != obj.getClass())\r
76                         return false;\r
77                 Score other = (Score) obj;\r
78                 if (method != other.method)\r
79                         return false;\r
80                 if (scores == other.scores) {\r
81                         return true;\r
82                 }\r
83                 if (scores == null) {\r
84                         return false;\r
85                 }\r
86                 if (!Arrays.deepEquals(scores.toArray(), other.scores.toArray()))\r
87                         return false;\r
88                 return true;\r
89         }\r
90 \r
91         public static void write(Set<Score> scores, OutputStream output)\r
92                         throws IOException {\r
93                 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(\r
94                                 output));\r
95                 for (Score score : scores) {\r
96                         writer.write("#" + score.method + " ");\r
97                         for (Float scoreVal : score.getScores()) {\r
98                                 writer.write(NUMBER_FORMAT.format(scoreVal) + " ");\r
99                         }\r
100                         writer.write("\n");\r
101                 }\r
102                 writer.flush();\r
103         }\r
104 }\r