/**
* Copyright (C) 2012-2017 52°North Initiative for Geospatial Open Source
* Software GmbH
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
* by the Free Software Foundation.
*
* If the program is linked with libraries which are licensed under one of
* the following licenses, the combination of the program with the linked
* library is not considered a "derivative work" of the program:
*
* - Apache License, version 2.0
* - Apache Software License, version 1.0
* - GNU Lesser General Public License, version 3
* - Mozilla Public License, versions 1.0, 1.1 and 2.0
* - Common Development and Distribution License (CDDL), version 1.0
*
* Therefore the distribution of the program linked with libraries licensed
* under the aforementioned licenses, is permitted by the copyright holders
* if the distribution is compliant with both the GNU General Public
* License version 2 and the aforementioned licenses.
*
* This program 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 General
* Public License for more details.
*/
package org.n52.sos.ogc.om;
import org.n52.sos.ogc.gml.time.Time;
import org.n52.sos.ogc.gml.time.TimeInstant;
import org.n52.sos.ogc.om.values.Value;
import org.n52.sos.ogc.ows.OwsExceptionReport;
/**
* Abstract streaming value class
*
* @author Carsten Hollmann <c.hollmann@52north.org>
* @since 4.1.0
*
* @param <S>
* Entity type
*/
public abstract class StreamingValue<S> extends AbstractStreaming {
private static final long serialVersionUID = -884370769373807775L;
private Time phenomenonTime;
private TimeInstant resultTime;
private Time validTime;
private String unit;
private boolean unitQueried = false;
protected OmObservation observationTemplate;
/**
* Get the next entity
*
* @return next entity object
* @throws OwsExceptionReport
* If an error occurs
*/
public abstract S nextEntity() throws OwsExceptionReport;
/**
* Query times
*/
protected abstract void queryTimes();
/**
* query unit
*/
protected abstract void queryUnit();
/**
* Get next {@link TimeValuePair} from entity
*
* @return Next {@link TimeValuePair}
* @throws OwsExceptionReport
* If an error occurs
*/
public abstract TimeValuePair nextValue() throws OwsExceptionReport;
/**
* Set the observation template which contains all metadata
*
* @param observationTemplate
* Observation template to set
*/
public void setObservationTemplate(OmObservation observationTemplate) {
this.observationTemplate = observationTemplate;
}
@Override
public Time getPhenomenonTime() {
isSetPhenomenonTime();
return phenomenonTime;
}
public boolean isSetPhenomenonTime() {
if (phenomenonTime == null) {
queryTimes();
}
return phenomenonTime != null;
}
@Override
public void setPhenomenonTime(Time phenomenonTime) {
this.phenomenonTime = phenomenonTime;
}
@Override
public Value<OmObservation> getValue() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setValue(Value<OmObservation> value) {
// TODO Auto-generated method stub
}
@Override
public String getUnit() {
isSetUnit();
return unit;
}
@Override
public void setUnit(String unit) {
this.unit = unit;
unitQueried = true;
}
@Override
public boolean isSetUnit() {
if (!unitQueried && unit == null) {
queryUnit();
unitQueried = true;
}
return unit != null;
}
public TimeInstant getResultTime() {
return resultTime;
}
protected void setResultTime(TimeInstant resultTime) {
this.resultTime = resultTime;
}
public boolean isSetResultTime() {
return getResultTime() != null;
}
public Time getValidTime() {
return validTime;
}
protected void setValidTime(Time validTime) {
this.validTime = validTime;
}
public boolean isSetValidTime() {
return getValidTime() != null;
}
}