/* * 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.Date; import org.geotools.util.Utilities; import org.opengis.temporal.Instant; import org.opengis.temporal.Period; import org.opengis.temporal.RelativePosition; /** * A one-dimensional geometric primitive that represent extent in time. * * @author Mehdi Sidhoum (Geomatys) * * * @source $URL$ */ public class DefaultPeriod extends DefaultTemporalGeometricPrimitive implements Period { /** * This is the TM_Instant at which this Period starts. */ private Instant begining; /** * This is the TM_Instant at which this Period ends. */ private Instant ending; public DefaultPeriod(Instant begining, Instant ending) { if (begining.relativePosition(ending).equals(RelativePosition.BEFORE)) { this.begining = begining; this.ending = ending; } /*if (((DefaultInstant) begining).getPosition().getDate().before(((DefaultInstant) ending).getPosition().getDate())) { this.begining = begining; this.ending = ending; } */else { throw new IllegalArgumentException("The temporal position of the beginning of the period must be less than (i.e. earlier than) the temporal position of the end of the period"); } } /** * Links this period to the instant at which it starts. */ public Instant getBeginning() { return begining; } public void setBegining(Instant begining) { this.begining = begining; } public void setBegining(Date date) { this.begining = new DefaultInstant(new DefaultPosition(date)); } /** * Links this period to the instant at which it ends. */ public Instant getEnding() { return ending; } public void setEnding(Instant ending) { this.ending = ending; } public void setEnding(Date date) { this.ending = new DefaultInstant(new DefaultPosition(date)); } /** * 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 DefaultPeriod) { final DefaultPeriod that = (DefaultPeriod) object; return Utilities.equals(this.begining, that.begining) && Utilities.equals(this.ending, that.ending); } 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 DefaultPeriod) { // final DefaultPeriod that = (DefaultPeriod) object; // // if (Utilities.equals(this.begining, that.begining) && // Utilities.equals(this.ending, that.ending)) // return 0; // else { // // TODO // } // } // // 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.begining != null ? this.begining.hashCode() : 0); hash = 37 * hash + (this.ending != null ? this.ending.hashCode() : 0); return hash; } @Override public String toString() { StringBuilder s = new StringBuilder("Period:").append('\n'); if (begining != null) { s.append("begin:").append(begining).append('\n'); } if (ending != null) { s.append("end:").append(ending).append('\n'); } return s.toString(); } }