package javacodebook.io.randomaccess;

import java.io.*;

/**
 * Die Klasse Person ist die Datenklasse. Eine Person hat die Daten
 * Name, Alter, Adresse.
 */
public class Person implements DataEntry, Comparable {

    //Bestimmt die max. Anzahl Bytes, die ein Datensatz belegen kann
    public static final int SIZE = 200;

    private String name;
    private int alter;
    private String adresse;

    public Person() {
    }

    public Person(String name, int alter, String adresse) {
        this.name = name;
        this.alter = alter;
        this.adresse = adresse;
    }

    public void readData(DataInput in) throws IOException {
        name = in.readUTF();
        alter = in.readInt();
        adresse = in.readUTF();
    }

    public void writeData(DataOutput out) throws IOException {
        out.writeUTF(name);
        out.writeInt(alter);
        out.writeUTF(adresse);
    }

    public String toString() {
        return "Person: " + name + ", "
        + alter + " Jahre, " + adresse;
    }

    public String getSearchKey() {
        return name;
    }

    public int getMaxSize() {
        return SIZE;
    }

    public void clear() {
        name = "";
        alter = 0;
        adresse = "";
    }

    public String getName() {
        return name;
    }

    public int getAlter() {
        return alter;
    }

    public String getAdresse() {
        return adresse;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAlter(int alter) {
        this.alter = alter;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

     public Object clone() {
        return new Person(name, alter, adresse);
    }

   /**
     * Erlaubt den Vergleich mit einer anderen Person über den Namen.
     * Wird für die Sortierung benötigt.
     */
    public int compareTo(Object obj) {
        if(!(obj instanceof Person))
            throw new ClassCastException("Vergleichsobjekt ist keine Person");
        return name.compareTo(((Person)obj).getName());
    }

}