Further work on statistics display
[jabaws.git] / datamodel / compbio / data / sequence / Score.java
index 8a110ee..f28bd0d 100644 (file)
@@ -6,10 +6,9 @@ import java.io.OutputStream;
 import java.io.OutputStreamWriter;\r
 import java.text.NumberFormat;\r
 import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.List;\r
 import java.util.Locale;\r
 import java.util.Set;\r
+import java.util.TreeSet;\r
 \r
 import javax.xml.bind.annotation.XmlAccessType;\r
 import javax.xml.bind.annotation.XmlAccessorType;\r
@@ -33,13 +32,16 @@ public class Score {
                NUMBER_FORMAT.setGroupingUsed(false);\r
                NUMBER_FORMAT.setMaximumFractionDigits(3);\r
        }\r
+       // This should be Enum<?> but JAXB cannot serialize it.\r
+       private final String method;\r
 \r
-       private Enum<?> method;\r
+       private TreeSet<Range> ranges = new TreeSet<Range>();\r
 \r
-       private List<Float> scores;\r
+       private ArrayList<Float> scores = new ArrayList<Float>(0);\r
 \r
        private Score() {\r
                // JaXB default constructor\r
+               method = null;\r
        }\r
 \r
        /**\r
@@ -52,18 +54,40 @@ public class Score {
         *            the actual conservation values for each column of the\r
         *            alignment\r
         */\r
-       public Score(Enum<?> method, List<Float> scores) {\r
-               this.method = method;\r
+       public Score(Enum<?> method, ArrayList<Float> scores) {\r
+               this.method = method.toString();\r
                this.scores = new ArrayList<Float>(scores);\r
        }\r
 \r
+       /**\r
+        * @param method\r
+        *            the ConservationMethod with which {@code scores} were\r
+        *            calculated\r
+        * @param scores\r
+        *            the actual conservation values for each column of the\r
+        *            alignment\r
+        * @param ranges\r
+        *            The set of ranges i.e. parts of the sequence with specific\r
+        *            function, usually can be calculated based on scores\r
+        */\r
+       public Score(Enum<?> method, ArrayList<Float> scores, TreeSet<Range> ranges) {\r
+               this.method = method.toString();\r
+               this.ranges = ranges;\r
+               this.scores = scores;\r
+       }\r
+\r
+       public Score(Enum<?> method, TreeSet<Range> ranges) {\r
+               this.method = method.toString();\r
+               this.ranges = ranges;\r
+       }\r
+\r
        public Score(Enum<?> method, float[] scores) {\r
-               this.method = method;\r
+               this.method = method.toString();\r
                this.scores = toList(scores);\r
        }\r
 \r
-       private List<Float> toList(float[] values) {\r
-               List<Float> vlist = new ArrayList<Float>();\r
+       private ArrayList<Float> toList(float[] values) {\r
+               ArrayList<Float> vlist = new ArrayList<Float>();\r
                for (float v : values) {\r
                        vlist.add(new Float(v));\r
                }\r
@@ -74,7 +98,7 @@ public class Score {
         * \r
         * @return the ConservationMethod\r
         */\r
-       public Enum<?> getMethod() {\r
+       public String getMethod() {\r
                return method;\r
        }\r
 \r
@@ -83,29 +107,39 @@ public class Score {
         * \r
         * @return the column scores for the alignment\r
         */\r
-       public List<Float> getScores() {\r
+       public ArrayList<Float> getScores() {\r
                return scores;\r
        }\r
 \r
+       /**\r
+        * Return Ranges if any Collections.EMPTY_SET otherwise\r
+        * \r
+        * @return\r
+        */\r
+       public TreeSet<Range> getRanges() {\r
+               return ranges;\r
+       }\r
+\r
+       public void setRanges(TreeSet<Range> ranges) {\r
+               this.ranges = ranges;\r
+       }\r
+\r
        @Override\r
        public String toString() {\r
-               return "Score [method=" + method + ", scores=" + scores + "]";\r
+               return "Score [method=" + method + ", ranges=" + ranges + ", scores="\r
+                               + scores + "]";\r
        }\r
 \r
        @Override\r
        public int hashCode() {\r
-               final int prime = 31;\r
+               final int prime = 7;\r
                int result = 1;\r
                result = prime * result + ((method == null) ? 0 : method.hashCode());\r
+               result = prime * result + ((ranges == null) ? 0 : ranges.hashCode());\r
                result = prime * result + ((scores == null) ? 0 : scores.hashCode());\r
                return result;\r
        }\r
 \r
-       /*\r
-        * TODO test ! (non-Javadoc)\r
-        * \r
-        * @see java.lang.Object#equals(java.lang.Object)\r
-        */\r
        @Override\r
        public boolean equals(Object obj) {\r
                if (this == obj)\r
@@ -115,15 +149,20 @@ public class Score {
                if (getClass() != obj.getClass())\r
                        return false;\r
                Score other = (Score) obj;\r
-               if (method != other.method)\r
+               if (method == null) {\r
+                       if (other.method != null)\r
+                               return false;\r
+               } else if (!method.equals(other.method))\r
                        return false;\r
-               if (scores == other.scores) {\r
-                       return true;\r
-               }\r
-               if (scores == null) {\r
+               if (ranges == null) {\r
+                       if (other.ranges != null)\r
+                               return false;\r
+               } else if (!ranges.equals(other.ranges))\r
                        return false;\r
-               }\r
-               if (!Arrays.deepEquals(scores.toArray(), other.scores.toArray()))\r
+               if (scores == null) {\r
+                       if (other.scores != null)\r
+                               return false;\r
+               } else if (!scores.equals(other.scores))\r
                        return false;\r
                return true;\r
        }\r