/*
* 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 org.geotools.metadata.iso.citation.Citations;
import org.geotools.referencing.NamedIdentifier;
import org.geotools.util.Utilities;
import org.geotools.temporal.reference.DefaultTemporalReferenceSystem;
import org.geotools.util.SimpleInternationalString;
import org.opengis.temporal.IndeterminateValue;
import org.opengis.temporal.TemporalPosition;
import org.opengis.temporal.TemporalReferenceSystem;
/**
* Used for describing temporal positions referenced to other temporal reference systems.
*
* @author Mehdi Sidhoum (Geomatys)
*
*
* @source $URL$
*/
public class DefaultTemporalPosition implements TemporalPosition {
/**
* This is the TM_ReferenceSystem associated with this TM_TemporalPosition,
* if not specified, it is assumed to be an association to the Gregorian calendar and UTC.
*/
private TemporalReferenceSystem frame;
/**
* This attribute provides the only value for TM_TemporalPosition unless a subtype of TM_TemporalPosition is used as the data type.
*/
private IndeterminateValue indeterminatePosition;
/**
* Creates a new instance from a TemporalReferenceSystem and an IndeterminateValue
* @param frame cannot be @CODE null
* @param indeterminatePosition can be @CODE NULL if none.
*/
public DefaultTemporalPosition(TemporalReferenceSystem frame, IndeterminateValue indeterminatePosition) {
this.frame = frame;
this.indeterminatePosition = indeterminatePosition;
}
/**
* When this attribute is used with a subtype of {@code TemporalPosition}, it provides a qualifier to the specific value
* for temporal position provided by the subtype.
*
*/
public IndeterminateValue getIndeterminatePosition() {
return this.indeterminatePosition;
}
/**
* Returns the TM_ReferenceSystem associated with this TM_TemporalPosition,
* if not specified, it is assumed to be an association to the Gregorian calendar and UTC.
* @return
*/
public TemporalReferenceSystem getFrame() {
if (frame == null) {
frame = new DefaultTemporalReferenceSystem(new NamedIdentifier(
Citations.CRS, new SimpleInternationalString("Gregorian calendar")), null);
}
return frame;
}
public void setFrame(TemporalReferenceSystem frame) {
this.frame = frame;
}
public void setIndeterminatePosition(IndeterminateValue indeterminatePosition) {
this.indeterminatePosition = indeterminatePosition;
}
@Override
public boolean equals(final Object object) {
if (object == this) {
return true;
}
if (object instanceof DefaultTemporalPosition) {
final DefaultTemporalPosition that = (DefaultTemporalPosition) object;
return Utilities.equals(this.frame, that.frame) &&
Utilities.equals(this.indeterminatePosition, that.indeterminatePosition);
}
return false;
}
@Override
public int hashCode() {
int hash = 5;
hash = 37 * hash + (this.frame != null ? this.frame.hashCode() : 0);
hash = 37 * hash + (this.indeterminatePosition != null ? this.indeterminatePosition.hashCode() : 0);
return hash;
}
@Override
public String toString() {
StringBuilder s = new StringBuilder("TemporalPosition:").append('\n');
if (frame != null) {
s.append("frame:").append(frame).append('\n');
}
if (indeterminatePosition != null) {
s.append("indeterminatePosition:").append(indeterminatePosition).append('\n');
}
return s.toString();
}
}