Skip to content

Commit

Permalink
Merge pull request #330 from CarstenHollmann/feature/db_om_parameter_…
Browse files Browse the repository at this point in the history
…sensor_relation_in_core

Add support for further om:parameter
  • Loading branch information
autermann committed Oct 5, 2015
2 parents a0d7ae3 + b29bdb0 commit 05bd5e6
Show file tree
Hide file tree
Showing 95 changed files with 3,416 additions and 717 deletions.
49 changes: 49 additions & 0 deletions coding/json-common/src/main/resources/schema/Parameter.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
"properties": {
"NamedValue": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name":
{
Expand All @@ -15,12 +19,57 @@
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "boolean"
},
{
"$ref": "#/definitions/quantity"
},
{
"$ref": "#/definitions/category"
},

{
"$ref": "http://www.52north.org/schema/json/Geometry#"
}
]
}
}
}
},
"definitions": {
"quantity": {
"type": "object",
"required": [
"uom",
"value"
],
"properties": {
"uom": {
"type": "string"
},
"value": {
"type": "number"
}
}
},
"category": {
"type": "object",
"required": [
"codespace",
"value"
],
"properties": {
"codespace": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import org.n52.sos.coding.json.SchemaConstants;
import org.n52.sos.decode.json.JSONDecoder;
import org.n52.sos.decode.json.JSONDecodingException;
import org.n52.sos.exception.ows.concrete.NotYetSupportedException;
import org.n52.sos.ogc.gml.AbstractFeature;
import org.n52.sos.ogc.gml.CodeWithAuthority;
import org.n52.sos.ogc.gml.ReferenceType;
Expand Down Expand Up @@ -163,38 +164,56 @@ private Time parsePhenomenonTime(JsonNode node) throws OwsExceptionReport {
return parseTime(node.path(JSONConstants.PHENOMENON_TIME));
}

protected Collection<NamedValue<?>> parseParameter(JsonNode node) throws OwsExceptionReport {
Set<NamedValue<?>> parameters = Sets.newHashSet();
JsonNode parameter = node.path(JSONConstants.PARAMETER);
if (parameter.isArray()) {
for (JsonNode jsonNode : parameter) {
parameters.add(parseNamedValue(jsonNode));
}
} else if (parameter.isObject()) {
parameters.add(parseNamedValue(parameter));
}
return parameters;
}
protected Collection<NamedValue<?>> parseParameter(JsonNode node) throws OwsExceptionReport {
Set<NamedValue<?>> parameters = Sets.newHashSet();
JsonNode parameter = node.path(JSONConstants.PARAMETER);
if (parameter.isArray()) {
for (JsonNode jsonNode : parameter) {
parameters.add(parseNamedValue(jsonNode));
}
} else if (parameter.isObject()) {
parameters.add(parseNamedValue(parameter));
}
return parameters;
}

private NamedValue<?> parseNamedValue(JsonNode parameter) throws OwsExceptionReport {
JsonNode namedValue = parameter.path(JSONConstants.NAMED_VALUE);
NamedValue<?> nv = parseNamedValueValue(parameter);
ReferenceType referenceType = new ReferenceType(namedValue.path(JSONConstants.NAME).asText());
nv.setName(referenceType);
return nv;
}

private NamedValue<?> parseNamedValueValue(JsonNode namedValue) throws OwsExceptionReport {
JsonNode value = namedValue.path(JSONConstants.VALUE);
if (value.isTextual()) {
NamedValue<W3CHrefAttribute> nv = new NamedValue<W3CHrefAttribute>();
nv.setValue(new HrefAttributeValue(new W3CHrefAttribute(value.asText())));
JsonNode namedValue = parameter.path(JSONConstants.NAMED_VALUE);
NamedValue<?> nv = parseNamedValueValue(namedValue.path(JSONConstants.VALUE));
ReferenceType referenceType = new ReferenceType(namedValue.path(JSONConstants.NAME).asText());
nv.setName(referenceType);
return nv;
}

private NamedValue<?> parseNamedValueValue(JsonNode value) throws OwsExceptionReport {
if (value.isTextual()) {
NamedValue<W3CHrefAttribute> nv = new NamedValue<W3CHrefAttribute>();
nv.setValue(new HrefAttributeValue(new W3CHrefAttribute(value.asText())));
return nv;
} else if (value.isBoolean()) {
NamedValue<Boolean> nv = new NamedValue<Boolean>();
nv.setValue(new BooleanValue(value.asBoolean()));
return nv;
} else {
NamedValue<Geometry> nv = new NamedValue<Geometry>();
nv.setValue(new GeometryValue(geometryDecoder.decodeJSON(value, false)));
return nv;
}
} else if (value.isInt()) {
NamedValue<Integer> nv = new NamedValue<Integer>();
nv.setValue(new CountValue(value.asInt()));
return nv;
} else if (value.isObject()) {
if (value.has(JSONConstants.CODESPACE)) {
NamedValue<String> nv = new NamedValue<String>();
nv.setValue(parseCategroyValue(value));
return nv;
} else if (value.has(JSONConstants.UOM)) {
NamedValue<Double> nv = new NamedValue<Double>();
nv.setValue(parseQuantityValue(value));
return nv;
} else if (value.has(JSONConstants.COORDINATES)) {
NamedValue<Geometry> nv = new NamedValue<Geometry>();
nv.setValue(new GeometryValue(geometryDecoder.decodeJSON(value, false)));
return nv;
}
}
throw new NotYetSupportedException(value.toString());
}

protected AbstractFeature parseFeatureOfInterest(JsonNode node) throws OwsExceptionReport {
Expand All @@ -221,11 +240,15 @@ private ObservationValue<?> parseValue(JsonNode node) throws OwsExceptionReport
}

protected ObservationValue<?> parseMeasurementValue(JsonNode node) throws OwsExceptionReport {
final QuantityValue qv =
new QuantityValue(node.path(JSONConstants.RESULT).path(JSONConstants.VALUE).doubleValue(), node
.path(JSONConstants.RESULT).path(JSONConstants.UOM).textValue());
final QuantityValue qv = parseQuantityValue(node.path(JSONConstants.RESULT));
// new QuantityValue(node.path(JSONConstants.RESULT).path(JSONConstants.VALUE).doubleValue(), node
// .path(JSONConstants.RESULT).path(JSONConstants.UOM).textValue());
return new SingleObservationValue<Double>(parsePhenomenonTime(node), qv);
}

private QuantityValue parseQuantityValue(JsonNode node) throws OwsExceptionReport {
return new QuantityValue(node.path(JSONConstants.VALUE).doubleValue(), node.path(JSONConstants.UOM).textValue());
}

private ObservationValue<?> parseTextObservationValue(JsonNode node) throws OwsExceptionReport {
final TextValue v = new TextValue(node.path(JSONConstants.RESULT).textValue());
Expand All @@ -243,11 +266,15 @@ private ObservationValue<?> parseTruthObservationValue(JsonNode node) throws Ows
}

private ObservationValue<?> parseCategoryObservationValue(JsonNode node) throws OwsExceptionReport {
final CategoryValue v =
new CategoryValue(node.path(JSONConstants.RESULT).path(JSONConstants.VALUE).textValue(), node
.path(JSONConstants.RESULT).path(JSONConstants.CODESPACE).textValue());
final CategoryValue v = parseCategroyValue(node.path(JSONConstants.RESULT));
// new CategoryValue(node.path(JSONConstants.RESULT).path(JSONConstants.VALUE).textValue(), node
// .path(JSONConstants.RESULT).path(JSONConstants.CODESPACE).textValue());
return new SingleObservationValue<String>(parsePhenomenonTime(node), v);
}

private CategoryValue parseCategroyValue(JsonNode node) throws OwsExceptionReport {
return new CategoryValue(node.path(JSONConstants.VALUE).textValue(), node.path(JSONConstants.CODESPACE).textValue());
}

private ObservationValue<?> parseGeometryObservation(JsonNode node) throws OwsExceptionReport {
GeometryValue v = new GeometryValue(geometryDecoder.decodeJSON(node.path(JSONConstants.RESULT), false));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,35 +105,34 @@ private void encodeIdentifier(OmObservation o, ObjectNode json) {
}

private void encodeProcedure(OmObservation o, ObjectNode json) {
json.put(JSONConstants.PROCEDURE,
o.getObservationConstellation().getProcedure().getIdentifier());
json.put(JSONConstants.PROCEDURE, o.getObservationConstellation().getProcedure().getIdentifier());
}

private void encodeParameter(OmObservation o, ObjectNode json) throws OwsExceptionReport {
if (o.isSetParameter()) {
if (o.getParameter().size() == 1) {
if (o.isSetParameter()) {
if (o.getParameter().size() == 1) {
json.put(JSONConstants.PARAMETER, encodeNamedValue(o.getParameter().iterator().next()));
} else {
ArrayNode parameters = json.putArray(JSONConstants.PARAMETER);
for (NamedValue<?> namedValue : o.getParameter()) {
parameters.add(encodeNamedValue(namedValue));
parameters.add(encodeNamedValue(namedValue));
}
}
}
}

private JsonNode encodeNamedValue(NamedValue<?> namedValue) throws OwsExceptionReport {
ObjectNode namedValueObject = nodeFactory().objectNode();
namedValueObject.put(JSONConstants.NAME, namedValue.getName().getHref());
namedValueObject.put(JSONConstants.VALUE, encodeObjectToJson(namedValue.getValue().getValue()));
ObjectNode parameterObject = nodeFactory().objectNode();
parameterObject.put(JSONConstants.NAMED_VALUE, namedValueObject);
return parameterObject;
}

private void encodeObservableProperty(OmObservation o, ObjectNode json) {
json.put(JSONConstants.OBSERVABLE_PROPERTY, o.getObservationConstellation().getObservableProperty()
.getIdentifier());
}
}

private JsonNode encodeNamedValue(NamedValue<?> namedValue) throws OwsExceptionReport {
ObjectNode namedValueObject = nodeFactory().objectNode();
namedValueObject.put(JSONConstants.NAME, namedValue.getName().getHref());
namedValueObject.put(JSONConstants.VALUE, encodeValue(namedValue.getValue()));
ObjectNode parameterObject = nodeFactory().objectNode();
parameterObject.put(JSONConstants.NAMED_VALUE, namedValueObject);
return parameterObject;
}

private void encodeObservableProperty(OmObservation o, ObjectNode json) {
json.put(JSONConstants.OBSERVABLE_PROPERTY,
o.getObservationConstellation().getObservableProperty().getIdentifier());
}

private void encodeObservationType(OmObservation o, ObjectNode json) throws OwsExceptionReport {
Expand Down Expand Up @@ -180,9 +179,19 @@ private void encodeResult(OmObservation o, ObjectNode json) throws OwsExceptionR
}

private JsonNode encodeResult(OmObservation o) throws OwsExceptionReport {

Value<?> value = o.getValue().getValue();
String type = getObservationType(o);
if (value instanceof TVPValue) {
if (type.equals(OmConstants.OBS_TYPE_SWE_ARRAY_OBSERVATION)) {
return encodeTVPValue(o);
}
} else {
return encodeValue(value);
}
throw new UnsupportedEncoderInputException(this, value);
}

private JsonNode encodeValue(Value<?> value) throws OwsExceptionReport {
if (value instanceof QuantityValue) {
return encodeQualityValue(value);
} else if (value instanceof CountValue) {
Expand All @@ -199,11 +208,7 @@ private JsonNode encodeResult(OmObservation o) throws OwsExceptionReport {
return encodeComplexValue(value);
} else if (value instanceof SweDataArrayValue) {
return encodeSweDataArrayValue(value);
} else if (value instanceof TVPValue) {
if (type.equals(OmConstants.OBS_TYPE_SWE_ARRAY_OBSERVATION)) {
return encodeTVPValue(o);
}
}
}
throw new UnsupportedEncoderInputException(this, value);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"type": "http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement",
"procedure": "http://52north.org/example/procedure/1",
"parameter": {
"parameter": [
{
"NamedValue": {
"name": "http://www.opengis.net/def/param-name/OGC-OM/2.0/samplingGeometry",
"value": {
Expand All @@ -13,6 +14,43 @@
}
}
},
{
"NamedValue": {
"name": "category",
"value": {
"codespace" : "codespace",
"value" : "category"
}
}
},
{
"NamedValue": {
"name": "quantity",
"value": {
"uom" : "uom",
"value" : 25.2
}
}
},
{
"NamedValue": {
"name": "boolean",
"value": true
}
},
{
"NamedValue": {
"name": "text",
"value": "text"
}
},
{
"NamedValue": {
"name": "count",
"value": 2
}
}
],
"observedProperty": "http://52north.org/example/observedProperty/1",
"identifier": {
"value": "measurement1",
Expand Down
39 changes: 24 additions & 15 deletions coding/netcdf/api/src/main/java/org/n52/sos/netcdf/NetCDFUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -205,23 +205,32 @@ public static List<NetCDFObservation> createNetCDFSosObservations(List<OmObserva
}

// check for samplingGeometry in observation
if (sosObs.isSetParameter() && hasSamplingGeometry(sosObs)) {
Geometry geometry = getSamplingGeometryGeometry(sosObs);
Set<Point> points = FeatureUtil.getPoints(geometry);
for (Point point : points) {
try {
// TODO is this correct?
point =
(Point) GeometryHandler.getInstance().switchCoordinateAxisFromToDatasourceIfNeeded(
point);
} catch (OwsExceptionReport e) {
throw new NoApplicableCodeException()
.withMessage("Exception while normalizing sampling geometry coordinate axis order.");
if (sosObs.isSetParameter()) {
if (sosObs.isSetHeightDepthParameter()) {
if (sosObs.isSetHeightParameter()) {
sensorHeights.get(sensor).add(sosObs.getHeightParameter().getValue().getValue().doubleValue());
} else if (sosObs.isSetDepthParameter()) {
sensorHeights.get(sensor).add(sosObs.getDepthParameter().getValue().getValue().doubleValue());
}
}
if (hasSamplingGeometry(sosObs)) {
Geometry geometry = getSamplingGeometryGeometry(sosObs);
Set<Point> points = FeatureUtil.getPoints(geometry);
for (Point point : points) {
try {
// TODO is this correct?
point =
(Point) GeometryHandler.getInstance().switchCoordinateAxisFromToDatasourceIfNeeded(
point);
} catch (OwsExceptionReport e) {
throw new NoApplicableCodeException()
.withMessage("Exception while normalizing sampling geometry coordinate axis order.");
}
sensorLngs.put(sensor, point.getX());
sensorLats.put(sensor, point.getY());
}
sensorLngs.put(sensor, point.getX());
sensorLats.put(sensor, point.getY());
sensorHeights.putAll(sensor, FeatureUtil.getHeights(points));
}
sensorHeights.putAll(sensor, FeatureUtil.getHeights(points));
}

// get the sensor's data map
Expand Down
Loading

0 comments on commit 05bd5e6

Please sign in to comment.