Start the implementation of inputs gathering and the comparator code (still buggy...
[Persons_Comparator.git] / src / Eye.java
1 import java.awt.Color;
2 import java.util.Arrays;
3
4 public class Eye implements Comparable<Eye> {
5 private String strColor;
6 private Color color;
7 private String[] colorsList = {"black", "blue", "brown", "green"};
8
9 Eye() {
10 sortColorList();
11 }
12
13 /**
14 * @param color
15 */
16 Eye(String color) {
17 setStrColor(color);
18 setColor(color);
19 sortColorList();
20 }
21
22 public String getStrColor() {
23 return strColor;
24 }
25
26 public void setStrColor(String strColor) {
27 if (validateColor(strColor)) {
28 this.strColor = strColor;
29 } else {
30 throw new IllegalArgumentException("Color must be" + this.colorListToString());
31 }
32 }
33
34 public String[] getColorsList() {
35 return colorsList;
36 }
37
38 /**
39 * @return
40 */
41 public Color getColor() {
42 return color;
43 }
44
45 /**
46 * @param color
47 */
48 public void setColor(String color) {
49 if (validateColor(color)) {
50 if (color.equals("black"))
51 this.color = Color.black;
52 else if (color.equals("blue"))
53 this.color = Color.blue;
54 else if (color.equals("brown"))
55 this.color = new Color(88, 41, 0);
56 else if (color.equals("green"))
57 this.color = Color.green;
58 } else {
59 throw new IllegalArgumentException("Color must be" + this.colorListToString());
60 }
61 }
62
63 /**
64 * @param color
65 * @return
66 */
67 private boolean validateColor(String color) {
68 for (String c : colorsList) {
69 if (color.equals(c)) {
70 return true;
71 }
72 }
73 return false;
74 }
75
76 private void sortColorList() {
77 Arrays.sort(this.colorsList);
78 }
79
80 /**
81 * @param eye
82 * @return
83 */
84 @Override
85 public int compareTo(Eye eye) {
86 double r_diff = this.getColor().getRed() - eye.getColor().getRed();
87 double g_diff = this.getColor().getGreen() - eye.getColor().getGreen();
88 double b_diff = this.getColor().getBlue() - eye.getColor().getBlue();
89 //See https://en.wikipedia.org/wiki/Color_difference
90 Double distance = Math.sqrt(2 * Math.pow(r_diff, 2) + 4 * Math.pow(g_diff, 2) + 3 * Math.pow(b_diff, 2));
91 return distance.intValue();
92 }
93
94 private String colorListToString() {
95 StringBuilder stringBuilder = new StringBuilder();
96 for (String c : colorsList) {
97 stringBuilder.append(" ");
98 stringBuilder.append(c);
99 }
100 return stringBuilder.toString();
101 }
102 }