package votorola.a.diff.harvest;

import java.util.Date;

import votorola.g.lang.ThreadSafe;
import votorola.g.lang.Warning;

/**
 * Final class to represent points in the archive. This is not necessary generic
 * enough, so it is not a stable API yet and only used by
 * {@linkplain PipermailHarvester}.
 * 
 */
@Warning("non-API")
@ThreadSafe
final public class Marker implements Comparable<Marker> {

    private final String path;
    private final Date date;

    /**
     * Use factories.
     */
    private Marker(final String path, final Date date) {
        this.path = path;
        this.date = date;
    }

    /**
     * Construct a new marker.
     * 
     * @param path
     * @param date
     */
    @Warning("non-API")
    public static Marker create(final String path, final Date date) {
        return new Marker(path, date);
    }

    /**
     * 
     */
    @Warning("non-API")
    public static Marker dummy() {
        return dummy;
    }

    private static Marker dummy = new Marker("", new Date(0));

    public String path() {
        return path;
    }

    public Date date() {
        return date;
    }

    /**
     * If both date and marker are equal, this returns true.
     * 
     * @return equality
     */
    @Override
    public boolean equals(final Object o) {
        if (this == o) {
            return true;
        }
        return (o instanceof Marker) && ((Marker) o).path.equals(path)
                && ((Marker) o).date.equals(date);
    }

    /**
     * Obey equals contract.
     */
    @Override
    public int hashCode() {
        return path.hashCode() * 37 + date.hashCode();
    }

    /**
     * Compare through date.
     */
    public int compareTo(Marker m) {
        return m.date.compareTo(date);
    }
}