diff --git a/NOTICE b/NOTICE index 65bee7924b5864af2723f81bb48cbc641101a231..909d5f29d80ae15ac17f37291052e062e88379e2 100644 --- a/NOTICE +++ b/NOTICE @@ -393,7 +393,7 @@ The following software have components provided under the terms of this license: - Jackson datatype: jdk8 (from https://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jdk8) - Jackson module: Afterburner (from http://wiki.fasterxml.com/JacksonHome, https://github.com/FasterXML/jackson-modules-base) - Jackson module: JAXB Annotations (from http://github.com/FasterXML/jackson-module-jaxb-annotations, http://wiki.fasterxml.com/JacksonJAXBAnnotations, https://github.com/FasterXML/jackson-modules-base) -- Jackson-annotations (from http://github.com/FasterXML/jackson, http://wiki.fasterxml.com/JacksonHome) +- Jackson-annotations (from http://github.com/FasterXML/jackson, http://wiki.fasterxml.com/JacksonHome, https://github.com/FasterXML/jackson) - Jackson-core (from http://wiki.fasterxml.com/JacksonHome, https://github.com/FasterXML/jackson-core) - Jackson-dataformat-XML (from http://wiki.fasterxml.com/JacksonExtensionXmlDataBinding, https://github.com/FasterXML/jackson-dataformat-xml) - Jackson-dataformat-YAML (from http://wiki.fasterxml.com/JacksonExtensionYAML, https://github.com/FasterXML/jackson, https://github.com/FasterXML/jackson-dataformats-text) @@ -538,7 +538,7 @@ The following software have components provided under the terms of this license: - io.grpc:grpc-protobuf-lite (from https://github.com/grpc/grpc-java) - io.grpc:grpc-stub (from https://github.com/grpc/grpc-java) - ion-java (from https://github.com/amzn/ion-java/, https://github.com/amznlabs/ion-java/) -- jackson-databind (from http://github.com/FasterXML/jackson, http://wiki.fasterxml.com/JacksonHome) +- jackson-databind (from http://github.com/FasterXML/jackson, http://wiki.fasterxml.com/JacksonHome, https://github.com/FasterXML/jackson) - java-cloudant (from https://cloudant.com) - javatuples (from http://www.javatuples.org) - javax.annotation-api (from http://jcp.org/en/jsr/detail?id=250) diff --git a/storage-core/src/main/java/org/opengroup/osdu/storage/conversion/CrsConversionService.java b/storage-core/src/main/java/org/opengroup/osdu/storage/conversion/CrsConversionService.java index e059840ea9c77417e95f93dca4e2414060ae8b4f..2c2e882449f03c5b80d972a1ef320813dcd40b4d 100644 --- a/storage-core/src/main/java/org/opengroup/osdu/storage/conversion/CrsConversionService.java +++ b/storage-core/src/main/java/org/opengroup/osdu/storage/conversion/CrsConversionService.java @@ -34,6 +34,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.opengroup.osdu.core.common.model.http.DpsHeaders; import org.opengroup.osdu.core.common.model.storage.ConversionStatus; import org.opengroup.osdu.storage.di.SpringConfig; + +import static org.opengroup.osdu.core.common.Constants.*; +import static org.opengroup.osdu.core.common.crs.CrsConversionServiceErrorMessages.MISSING_GEOMETRIES; import static org.opengroup.osdu.core.common.util.JsonUtils.jsonElementToString; @Service @@ -139,18 +142,18 @@ public class CrsConversionService { Iterator<String> keys = filteredObjects.keySet().iterator(); while(keys.hasNext()) { String attributeName = keys.next(); - JsonObject asIngestedCoordinates = filteredObjects.getAsJsonObject(attributeName).getAsJsonObject(Constants.AS_INGESTED_COORDINATES); + JsonObject asIngestedCoordinates = filteredObjects.getAsJsonObject(attributeName).getAsJsonObject(AS_INGESTED_COORDINATES); if (asIngestedCoordinates != null) { GeoJsonFeatureCollection fc = new GeoJsonFeatureCollection(); - if (asIngestedCoordinates.has(Constants.TYPE) && (!asIngestedCoordinates.get(Constants.TYPE).isJsonNull())) fc.setType(asIngestedCoordinates.get(Constants.TYPE).getAsString()); - if (asIngestedCoordinates.has(Constants.PROPERTIES) && (!asIngestedCoordinates.get(Constants.PROPERTIES).isJsonNull())) fc.setProperties(asIngestedCoordinates.getAsJsonObject(Constants.PROPERTIES)); - if (asIngestedCoordinates.has(Constants.PERSISTABLE_REFERENCE_CRS) && (!asIngestedCoordinates.get(Constants.PERSISTABLE_REFERENCE_CRS).isJsonNull())) fc.setPersistableReferenceCrs(asIngestedCoordinates.get(Constants.PERSISTABLE_REFERENCE_CRS).getAsString()); - if (asIngestedCoordinates.has(Constants.COORDINATE_REFERENCE_SYSTEM_ID) && (!asIngestedCoordinates.get(Constants.COORDINATE_REFERENCE_SYSTEM_ID).isJsonNull())) fc.setCoordinateReferenceSystemID(asIngestedCoordinates.get(Constants.COORDINATE_REFERENCE_SYSTEM_ID).getAsString()); - if (asIngestedCoordinates.has(Constants.VERTICAL_UNIT_ID) && (!asIngestedCoordinates.get(Constants.VERTICAL_UNIT_ID).isJsonNull())) fc.setVerticalUnitID(asIngestedCoordinates.get(Constants.VERTICAL_UNIT_ID).getAsString()); - if (asIngestedCoordinates.has(Constants.PERSISTABLE_REFERENCE_UNIT_Z) && (!asIngestedCoordinates.get(Constants.PERSISTABLE_REFERENCE_UNIT_Z).isJsonNull())) fc.setPersistableReferenceUnitZ(asIngestedCoordinates.get(Constants.PERSISTABLE_REFERENCE_UNIT_Z).getAsString()); - if (asIngestedCoordinates.has(Constants.BBOX) && (!asIngestedCoordinates.get(Constants.BBOX).isJsonNull())) fc.setBbox(this.bboxValues(asIngestedCoordinates.getAsJsonArray(Constants.BBOX))); - - JsonArray featuresArray = (asIngestedCoordinates.has(Constants.FEATURES) && (!asIngestedCoordinates.get(Constants.FEATURES).isJsonNull())) ? asIngestedCoordinates.getAsJsonArray(Constants.FEATURES) : null; + if (isJsonObjectNotNull(asIngestedCoordinates, TYPE)) fc.setType(asIngestedCoordinates.get(TYPE).getAsString()); + if (isJsonObjectNotNull(asIngestedCoordinates, PROPERTIES) && isPropertyJsonObject(asIngestedCoordinates, PROPERTIES)) fc.setProperties(asIngestedCoordinates.getAsJsonObject(PROPERTIES)); + if (isJsonObjectNotNull(asIngestedCoordinates, PERSISTABLE_REFERENCE_CRS)) fc.setPersistableReferenceCrs(asIngestedCoordinates.get(PERSISTABLE_REFERENCE_CRS).getAsString()); + if (isJsonObjectNotNull(asIngestedCoordinates, COORDINATE_REFERENCE_SYSTEM_ID)) fc.setCoordinateReferenceSystemID(asIngestedCoordinates.get(COORDINATE_REFERENCE_SYSTEM_ID).getAsString()); + if (isJsonObjectNotNull(asIngestedCoordinates, VERTICAL_UNIT_ID)) fc.setVerticalUnitID(asIngestedCoordinates.get(VERTICAL_UNIT_ID).getAsString()); + if (isJsonObjectNotNull(asIngestedCoordinates, PERSISTABLE_REFERENCE_UNIT_Z)) fc.setPersistableReferenceUnitZ(asIngestedCoordinates.get(PERSISTABLE_REFERENCE_UNIT_Z).getAsString()); + if (isJsonObjectNotNull(asIngestedCoordinates, BBOX) && isPropertyJsonArray(asIngestedCoordinates, BBOX)) fc.setBbox(this.bboxValues(asIngestedCoordinates.getAsJsonArray(BBOX))); + + JsonArray featuresArray = isJsonObjectNotNull(asIngestedCoordinates, FEATURES) && isPropertyJsonArray(asIngestedCoordinates, FEATURES) ? asIngestedCoordinates.getAsJsonArray(FEATURES) : null; if (featuresArray == null || featuresArray.size() == 0) { statusBuilder.addError(CrsConversionServiceErrorMessages.MISSING_FEATURES); continue; @@ -617,39 +620,39 @@ public class CrsConversionService { private GeoJsonFeature getFeature(JsonObject featureItem, ConversionStatus.ConversionStatusBuilder statusBuilder) { GeoJsonFeature feature = new GeoJsonFeature(); - if (featureItem.has(Constants.TYPE) && (!featureItem.get(Constants.TYPE).isJsonNull())) feature.setType(featureItem.get(Constants.TYPE).getAsString()); - if (featureItem.has(Constants.PROPERTIES) && (!featureItem.get(Constants.PROPERTIES).isJsonNull())) feature.setProperties(featureItem.getAsJsonObject(Constants.PROPERTIES)); - if (featureItem.has(Constants.BBOX) && (!featureItem.get(Constants.BBOX).isJsonNull())) feature.setBbox(this.bboxValues(featureItem.getAsJsonArray(Constants.BBOX))); + if (isJsonObjectNotNull(featureItem, TYPE)) feature.setType(featureItem.get(TYPE).getAsString()); + if (isJsonObjectNotNull(featureItem, PROPERTIES) && isPropertyJsonObject(featureItem, PROPERTIES)) feature.setProperties(featureItem.getAsJsonObject(PROPERTIES)); + if (isJsonObjectNotNull(featureItem, BBOX) && isPropertyJsonArray(featureItem, BBOX)) feature.setBbox(this.bboxValues(featureItem.getAsJsonArray(BBOX))); - if (featureItem.has(Constants.GEOMETRY) && (!featureItem.get(Constants.GEOMETRY).isJsonNull())) { - JsonObject geometry = featureItem.getAsJsonObject(Constants.GEOMETRY); - String geometryType = (geometry.has(Constants.TYPE) && (!geometry.get(Constants.TYPE).isJsonNull())) ? geometry.get(Constants.TYPE).getAsString() : ""; + if (isJsonObjectNotNull(featureItem, GEOMETRY) && isPropertyJsonObject(featureItem, GEOMETRY)) { + JsonObject geometry = featureItem.getAsJsonObject(GEOMETRY); + String geometryType = isJsonObjectNotNull(geometry, TYPE) ? geometry.get(TYPE).getAsString() : ""; - if (geometryType.equals(Constants.ANY_CRS_GEOMETRY_COLLECTION)) { - JsonArray geometriesArray = (geometry.has(Constants.GEOMETRIES) && (!geometry.get(Constants.GEOMETRIES).isJsonNull())) ? geometry.get(Constants.GEOMETRIES).getAsJsonArray() : new JsonArray(); + if (geometryType.equals(ANY_CRS_GEOMETRY_COLLECTION)) { + JsonArray geometriesArray = isJsonObjectNotNull(geometry, GEOMETRIES) && isPropertyJsonArray(geometry, GEOMETRIES) ? geometry.get(GEOMETRIES).getAsJsonArray() : new JsonArray(); if (geometriesArray == null || geometriesArray.size() == 0) { - statusBuilder.addError(CrsConversionServiceErrorMessages.MISSING_GEOMETRIES); + statusBuilder.addError(MISSING_GEOMETRIES); } else { GeoJsonGeometryCollection gc = new GeoJsonGeometryCollection(); GeoJsonBase[] geometries = new GeoJsonBase[geometriesArray.size()]; for (int k = 0; k < geometriesArray.size(); k++) { JsonObject geometryObj = geometriesArray.get(k).getAsJsonObject(); - String geometriesType = (geometryObj.has(Constants.TYPE) && (!geometryObj.get(Constants.TYPE).isJsonNull())) ? geometryObj.get(Constants.TYPE).getAsString() : ""; - JsonArray coordinatesValues = (geometryObj.has(Constants.COORDINATES) && (!geometryObj.get(Constants.COORDINATES).isJsonNull())) ? geometryObj.get(Constants.COORDINATES).getAsJsonArray() : new JsonArray(); + String geometriesType = isJsonObjectNotNull(geometryObj, TYPE) ? geometryObj.get(TYPE).getAsString() : ""; + JsonArray coordinatesValues = isJsonObjectNotNull(geometryObj, COORDINATES) && isPropertyJsonArray(geometryObj, COORDINATES) ? geometryObj.get(COORDINATES).getAsJsonArray() : new JsonArray(); JsonObject gmCoordinatesObj = this.getCoordinates(coordinatesValues, statusBuilder); Gson gson = new Gson(); switch (geometriesType) { - case Constants.POINT: geometries[k] = this.getGeoJsonPoint(gson, gmCoordinatesObj, statusBuilder); + case POINT: geometries[k] = this.getGeoJsonPoint(gson, gmCoordinatesObj, statusBuilder); break; - case Constants.MULTIPOINT: geometries[k] = this.getGeoJsonMultiPoint(gson, gmCoordinatesObj, statusBuilder); + case MULTIPOINT: geometries[k] = this.getGeoJsonMultiPoint(gson, gmCoordinatesObj, statusBuilder); break; - case Constants.LINE_STRING: geometries[k] = this.getGeoJsonLineString(gson, gmCoordinatesObj, statusBuilder); + case LINE_STRING: geometries[k] = this.getGeoJsonLineString(gson, gmCoordinatesObj, statusBuilder); break; - case Constants.MULTILINE_STRING: geometries[k] = this.getGeoJsonMultiLineString(gson, gmCoordinatesObj, statusBuilder); + case MULTILINE_STRING: geometries[k] = this.getGeoJsonMultiLineString(gson, gmCoordinatesObj, statusBuilder); break; - case Constants.POLYGON: geometries[k] = this.getGeoJsonPolygon(gson, gmCoordinatesObj, statusBuilder); + case POLYGON: geometries[k] = this.getGeoJsonPolygon(gson, gmCoordinatesObj, statusBuilder); break; - case Constants.MULTIPOLYGON: geometries[k] = this.getGeoJsonMultiPolygon(gson, gmCoordinatesObj, statusBuilder); + case MULTIPOLYGON: geometries[k] = this.getGeoJsonMultiPolygon(gson, gmCoordinatesObj, statusBuilder); break; default: statusBuilder.addError(String.format(CrsConversionServiceErrorMessages.INVALID_GEOMETRIES, geometriesType)); break; @@ -660,7 +663,7 @@ public class CrsConversionService { } } } else { - JsonArray coordinatesValues = (geometry.has(Constants.COORDINATES) && (!geometry.get(Constants.COORDINATES).isJsonNull())) ? geometry.get(Constants.COORDINATES).getAsJsonArray() : new JsonArray(); + JsonArray coordinatesValues = isJsonObjectNotNull(geometry, COORDINATES) && isPropertyJsonArray(geometry, COORDINATES) ? geometry.get(COORDINATES).getAsJsonArray() : new JsonArray(); JsonObject coordinatesObj = this.getCoordinates(coordinatesValues, statusBuilder); this.setGeometry(geometryType, feature, coordinatesObj, statusBuilder); } @@ -733,7 +736,7 @@ public class CrsConversionService { private JsonObject getCoordinates(JsonArray coordinates, ConversionStatus.ConversionStatusBuilder statusBuilder) { JsonObject coordinatesObj = new JsonObject(); if (coordinates.size() > 0) { - coordinatesObj.add(Constants.COORDINATES, coordinates); + coordinatesObj.add(COORDINATES, coordinates); } else { statusBuilder.addError(CrsConversionServiceErrorMessages.MISSING_COORDINATES); } @@ -747,6 +750,16 @@ public class CrsConversionService { } return bbox; } - - -} \ No newline at end of file + + private boolean isJsonObjectNotNull(JsonObject jsonObject, String propertyName){ + return jsonObject.has(propertyName) && !jsonObject.get(propertyName).isJsonNull(); + } + + private boolean isPropertyJsonObject(JsonObject jsonObject, String propertyName) { + return jsonObject.get(propertyName).isJsonObject(); + } + + private boolean isPropertyJsonArray(JsonObject jsonObject, String propertyName) { + return jsonObject.get(propertyName).isJsonArray(); + } +}