A lib directory to the project with gson library.
[Persons_Comparator.git] / src / Eye.java
index b02dbfcac2602262801fe521b123cc8234e4f253..ed2231b7aaa81da839726fea50b760f917f178f3 100644 (file)
@@ -1,17 +1,69 @@
 import java.awt.Color;
 
-public class Eye {
+public class Eye implements Comparable<Eye> {
     private Color color;
+    private String[] colorsList = {"black", "green", "blue", "brown"};
 
-    Eye(Color color) {
+    Eye() {
+    }
+
+    /**
+     * @param color
+     */
+    Eye(String color) {
         setColor(color);
     }
 
+    public String[] getColorsList() {
+        return colorsList;
+    }
+
+    /**
+     * @return
+     */
     public Color getColor() {
         return color;
     }
 
-    public void setColor(Color color) {
-        this.color = color;
+    /**
+     * @param color
+     */
+    public void setColor(String color) {
+        if (validateColor(color)) {
+            if (color.equals("brown"))
+                this.color = new Color(88, 41, 0);
+            else
+                this.color = Color.getColor(color);
+
+        } else {
+            throw new IllegalArgumentException("Color must be " + colorsList);
+        }
+    }
+
+    /**
+     * @param color
+     * @return
+     */
+    private boolean validateColor(String color) {
+        for (String c : colorsList) {
+            if (color.equals(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @param eye
+     * @return
+     */
+    @Override
+    public int compareTo(Eye eye) {
+        double r_diff = this.getColor().getRed() - eye.getColor().getRed();
+        double g_diff = this.getColor().getGreen() - eye.getColor().getGreen();
+        double b_diff = this.getColor().getBlue() - eye.getColor().getBlue();
+        //See https://en.wikipedia.org/wiki/Color_difference
+        Double distance = Math.sqrt(2 * Math.pow(r_diff, 2) + 4 * Math.pow(g_diff, 2) + 3 * Math.pow(b_diff, 2));
+        return distance.intValue();
     }
 }