package com.github.davidmoten.rtree.internal; import com.github.davidmoten.guavamini.Objects; import com.github.davidmoten.guavamini.Optional; import com.github.davidmoten.guavamini.Preconditions; import com.github.davidmoten.rtree.Entry; import com.github.davidmoten.rtree.geometry.Geometry; import com.github.davidmoten.rtree.internal.util.ObjectsHelper; /** * An entry in the R-tree which has a spatial representation. * * @param <T> * the type of Entry */ public final class EntryDefault<T, S extends Geometry> implements Entry<T, S> { private final T value; private final S geometry; /** * Constructor. * * @param value * the value of the entry * @param geometry * the geometry of the value */ public EntryDefault(T value, S geometry) { Preconditions.checkNotNull(geometry); this.value = value; this.geometry = geometry; } /** * Factory method. * * @param <T> * type of value * @param <S> * type of geometry * @param value * object being given a spatial context * @param geometry * geometry associated with the value * @return entry wrapping value and associated geometry */ public static <T, S extends Geometry> Entry<T, S> entry(T value, S geometry) { return new EntryDefault<T, S>(value, geometry); } /** * Returns the value wrapped by this {@link EntryDefault}. * * @return the entry value */ @Override public T value() { return value; } @Override public S geometry() { return geometry; } @Override public String toString() { String builder = "Entry [value=" + value + ", geometry=" + geometry + "]"; return builder; } @Override public int hashCode() { return Objects.hashCode(value, geometry); } @Override public boolean equals(Object obj) { @SuppressWarnings("rawtypes") Optional<EntryDefault> other = ObjectsHelper.asClass(obj, EntryDefault.class); if (other.isPresent()) { return Objects.equal(value, other.get().value) && Objects.equal(geometry, other.get().geometry); } else return false; } }