/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.temporal.object; import java.util.Collection; import org.geotools.util.Utilities; import org.opengis.temporal.Instant; import org.opengis.temporal.Period; import org.opengis.temporal.Position; /** * A zero-dimensional geometric primitive that represents position in time, equivalent to a point * in space. * * @author Mehdi Sidhoum (Geomatys) * * * @source $URL$ */ public class DefaultInstant extends DefaultTemporalGeometricPrimitive implements Instant { /** * This is the Collection of temporal {@link Period}s, * for which this Instant is the beginning. The collection may be empty. */ private Collection<Period> begunBy; /** * This is the Collection of temporal {@link Period}s, * for which this Instant is the end. The collection may be empty. */ private Collection<Period> endBy; /** * This is the position of this TM_Instant, it shall be associated with a single temporal reference system. */ private Position position; public DefaultInstant(Position position) { this.position = position; } /** * Get the position of this instant. */ public Position getPosition() { return position; } /** * Get the Collection of temporal {@link Period}s, * for which this Instant is the beginning. The collection may be empty. * @see Period#begin */ public Collection<Period> getBegunBy() { return begunBy; } /** * Get the Collection of temporal {@link Period}s, * for which this Instant is the end. The collection may be empty. * @see Period#end */ public Collection<Period> getEndedBy() { return endBy; } public void setPosition(Position position) { this.position = position; } public void setBegunBy(Collection<Period> begunBy) { this.begunBy = begunBy; } public void setEndBy(Collection<Period> endBy) { this.endBy = endBy; } /** * Verify if this entry is identical to the specified object. */ @Override public boolean equals(final Object object) { if (object == this) { return true; } if (object instanceof DefaultInstant) { final DefaultInstant that = (DefaultInstant) object; return Utilities.equals(this.position, that.position) && Utilities.equals(this.begunBy, that.begunBy) && Utilities.equals(this.endBy, that.endBy); } return false; } // /** // * Verify if this entry is identical to the specified object. // */ // public int compareTo(Object object) { // if (object == this) { // return 0; // } // if (object instanceof DefaultInstant) { // final DefaultInstant that = (DefaultInstant) object; // // if (Utilities.equals(this.position, that.position) && // Utilities.equals(this.begunBy, that.begunBy) && // Utilities.equals(this.endBy, that.endBy)) // return 0; // else // return this.position.getDate().compareTo(that.getPosition().getDate()); // } // // throw new ClassCastException("Object of type " + object.getClass() + " cannot be compared to " + this.getClass()); // } @Override public int hashCode() { int hash = 5; hash = 37 * hash + (this.position != null ? this.position.hashCode() : 0); hash = 37 * hash + (this.begunBy != null ? this.begunBy.hashCode() : 0); hash = 37 * hash + (this.endBy != null ? this.endBy.hashCode() : 0); return hash; } @Override public String toString() { StringBuilder s = new StringBuilder("Instant:").append('\n'); if (position != null) { s.append("position:").append(position).append('\n'); } if (begunBy != null) { s.append("begunBy:").append(begunBy).append('\n'); } if (endBy != null) { s.append("endBy:").append(endBy).append('\n'); } return s.toString(); } }