Implement the person comparator :
[Persons_Comparator.git] / src / Person.java
index d1ceb350724cbae919c3642f77b51fa8548278f2..5d9d812924ec1daf2c66351c4f90272a397e7bce 100644 (file)
@@ -1,18 +1,29 @@
 import java.util.Comparator;
 
-public class Person implements Comparable<Person>, Comparator<Person> {
+public class Person implements Comparator<Person> {
     private Firstname firstname;
     private Origin origin;
     private Size size;
     private Weight weight;
     private Eye eye;
+    private Integer distanceFromReference;
 
-    Person(Firstname firstname, Origin origin, Size size, Weight weight, Eye eye) {
-        setFirstname(firstname);
-        setOrigin(origin);
-        setPersonSize(size);
-        setWeight(weight);
-        setEye(eye);
+    Person() {
+        setFirstname(new Firstname());
+        setOrigin(new Origin());
+        setPersonSize(new Size());
+        setWeight(new Weight());
+        setEye(new Eye());
+        setDistanceFromReference(0);
+    }
+
+    Person(String firstname, String country, Integer size, Integer weight, String colorEye) {
+        setFirstname(new Firstname(firstname));
+        setOrigin(new Origin(country));
+        setPersonSize(new Size(size));
+        setWeight(new Weight(weight));
+        setEye(new Eye(colorEye));
+        setDistanceFromReference(0);
     }
 
     public void setFirstname(Firstname firstname) {
@@ -55,15 +66,34 @@ public class Person implements Comparable<Person>, Comparator<Person> {
         return eye;
     }
 
+    public void setDistanceFromReference(Integer distanceFromReference) {
+        this.distanceFromReference = distanceFromReference;
+    }
+
+    public Integer getDistanceFromReference() {
+        return distanceFromReference;
+    }
+
     @Override
-    public int compareTo(Person person) {
-        return this.firstname.compareTo(person.getFirstname()) + this.origin.compareTo(person.getOrigin())
-                + this.size.compareTo(person.getPersonSize()) + this.weight.compareTo(person.getWeight())
-                + this.eye.compareTo(person.getEye());
+    public String toString() {
+        return "Person{" +
+                "firstname=" + firstname.getFirstname() +
+                ", origin=" + origin.getCountry() +
+                ", size=" + size.getSize() +
+                ", weight=" + weight.getWeight() +
+                ", eye=" + eye.getStrColor() + "(" + this.getEye().getColor().getRed() + "," + this.getEye().getColor().getGreen() + "," + this.getEye().getColor().getBlue() + ")" +
+                ", distanceFromReference=" + this.getDistanceFromReference() +
+                '}';
+    }
+
+    public Integer distanceTo(Person person) {
+        return this.getFirstname().distanceTo(person.getFirstname()) + this.getOrigin().distanceTo(person.getOrigin())
+                + this.getPersonSize().distanceTo(person.getPersonSize()) + this.getWeight().distanceTo(person.getWeight())
+                + this.getEye().distanceTo(person.getEye());
     }
 
     @Override
     public int compare(Person p1, Person p2) {
-        return p1.compareTo(p2);
+        return p1.getDistanceFromReference().compareTo(p2.getDistanceFromReference());
     }
 }