From 513c7bc111590dd57b88388c0f6d5e693bab51db Mon Sep 17 00:00:00 2001 From: "Yen, David (398B-Affiliate)" Date: Fri, 10 May 2024 17:55:29 -0700 Subject: [PATCH 1/3] add subType for OPERA image files --- CHANGELOG.md | 10 + pom.xml | 4 +- .../metadata/aggregator/Constants.java | 2 +- .../aggregator/MetadataAggregatorLambda.java | 56 +- .../aggregator/MetadataFilesToEcho.java | 2 +- .../metadata/aggregator/bo/TaskConfigBO.java | 30 + .../aggregator/factory/TaskConfigFactory.java | 71 + .../processor/RelatedUrlsProcessor.java | 54 + .../generated/AdditionalAttributeType.java | 2 + .../metadata/umm/generated/BoundaryType.java | 2 + .../umm/generated/BoundingRectangleType.java | 2 + .../umm/generated/ExclusiveZoneType.java | 2 + .../metadata/umm/generated/GPolygonType.java | 2 + .../metadata/umm/generated/GeometryType.java | 2 + .../HorizontalSpatialDomainType.java | 2 + .../metadata/umm/generated/LineType.java | 2 + .../metadata/umm/generated/OrbitType.java | 23 +- .../metadata/umm/generated/PointType.java | 2 + .../umm/generated/RelatedUrlType.java | 110 +- .../umm/generated/SpatialExtentType.java | 2 + .../umm/generated/TrackPassTileType.java | 2 + .../metadata/umm/generated/TrackType.java | 16 +- .../metadata/umm/generated/Ummg166.java | 625 ++++++++ .../generated/VerticalSpatialDomainType.java | 32 +- src/main/resources/jsonschema/UMM-G1.6.6.json | 1310 +++++++++++++++++ .../test/MetadataAggregatorLambdaTest.java | 23 +- .../test/MetadataFilesToEchoTest.java | 26 +- .../metadata/test/TaskConfigFactoryTest.java | 84 ++ .../nasa/cumulus/metadata/test/UMMTest.java | 41 +- .../OPERA_L3_DSWX-S1_PROVISIONAL_V0.json | 115 ++ ...6T170251Z_20221026T184342Z_L8_30_v0.0.json | 165 ++- ...Z_L8_30_v0.0_appendFieldToJSON_String.json | 110 +- ...0221026T184342Z_L8_30_v0.0_publishAll.json | 164 ++- ...8_30_v0.0_publishAllEmptyCatchError_3.json | 104 +- ...42Z_L8_30_v0.0_publishAllWithSpecific.json | 163 +- ...26T184342Z_L8_30_v0.0_publishSpecific.json | 110 +- ...GHRSST-SSTskin-MODIS_T-N-v02.0-fv01.0.json | 53 +- ..._112035_20120303_121638_withcyclepass.json | 61 +- ...870_20150401T004312_2015091_FNL_V04.0.json | 58 +- ...nthly_2015_04_FNL_v04.0_OrbitStartEnd.json | 60 +- ...232816_20210619T002429_F02_notOverIDL.json | 195 ++- ...19T002429_20210619T012042_F02_overIde.json | 221 ++- ...10612T080137_O_APID1402.PTM_1.archive.json | 66 +- ...92858_20220920T142800_swotCalVal_ummg.json | 47 +- ...7T150730_20231107T155607_PIB0_01_bbox.json | 129 +- ...730_20231107T155607_PIB0_01_footprint.json | 389 ++++- ...107T155607_PIB0_01_footprintOrbitBBox.json | 5 +- ...T150730_20231107T155607_PIB0_01_orbit.json | 126 +- 48 files changed, 4704 insertions(+), 178 deletions(-) create mode 100644 src/main/java/gov/nasa/cumulus/metadata/aggregator/bo/TaskConfigBO.java create mode 100644 src/main/java/gov/nasa/cumulus/metadata/aggregator/factory/TaskConfigFactory.java create mode 100644 src/main/java/gov/nasa/cumulus/metadata/aggregator/processor/RelatedUrlsProcessor.java create mode 100644 src/main/java/gov/nasa/cumulus/metadata/umm/generated/Ummg166.java create mode 100644 src/main/resources/jsonschema/UMM-G1.6.6.json create mode 100644 src/test/java/gov/nasa/cumulus/metadata/test/TaskConfigFactoryTest.java create mode 100644 src/test/resources/collection_config/OPERA_L3_DSWX-S1_PROVISIONAL_V0.json diff --git a/CHANGELOG.md b/CHANGELOG.md index e99e185..9a6ed7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] +### Added +- **PODAAC-6181** + - add relatedUrl subType BROWSE IMAGE SOURCE +### Deprecated +### Removed +### Fixed +### Security + + ## [8.6.0] ### Added - **PODAAC-5876** diff --git a/pom.xml b/pom.xml index f4b7f9a..952ddd5 100755 --- a/pom.xml +++ b/pom.xml @@ -44,13 +44,13 @@ com.amazonaws aws-java-sdk-s3 - 1.12.701 + 1.12.719 com.amazonaws aws-java-sdk-secretsmanager - 1.12.701 + 1.12.719 org.apache.httpcomponents diff --git a/src/main/java/gov/nasa/cumulus/metadata/aggregator/Constants.java b/src/main/java/gov/nasa/cumulus/metadata/aggregator/Constants.java index 7b74d13..0fe5c05 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/aggregator/Constants.java +++ b/src/main/java/gov/nasa/cumulus/metadata/aggregator/Constants.java @@ -6,5 +6,5 @@ public static class Metadata{ public static final String START_ORBIT = "startorbit"; public static final String END_ORBIT = "endorbit"; } - public static final String UMMG_VERSION = "1.6.5"; + public static final String UMMG_VERSION = "1.6.6"; } diff --git a/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataAggregatorLambda.java b/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataAggregatorLambda.java index c5edb67..46c7099 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataAggregatorLambda.java +++ b/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataAggregatorLambda.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.math.BigInteger; import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; import java.nio.file.Paths; import java.security.KeyManagementException; import java.security.KeyStoreException; @@ -15,9 +16,12 @@ import java.util.Hashtable; import java.util.List; +import gov.nasa.cumulus.metadata.aggregator.bo.TaskConfigBO; +import gov.nasa.cumulus.metadata.aggregator.factory.TaskConfigFactory; import gov.nasa.cumulus.metadata.aggregator.processor.DMRPPProcessor; import gov.nasa.cumulus.metadata.aggregator.processor.FootprintProcessor; import gov.nasa.cumulus.metadata.aggregator.processor.ImageProcessor; +import gov.nasa.cumulus.metadata.aggregator.processor.RelatedUrlsProcessor; import gov.nasa.cumulus.metadata.state.MENDsIsoXMLSpatialTypeEnum; import gov.nasa.cumulus.metadata.state.WorkflowTypeEnum; import gov.nasa.cumulus.metadata.util.S3Utils; @@ -57,11 +61,7 @@ public String PerformFunction(String input, Context context) throws Exception { * this will help the logic in postIngestProcess function. */ this.setWorkFlowType((String) config.get("stateMachine")); - // This is a switch to determine, shall footprint, orbit or boundingbox shall be processed from iso.xml - // while ingesting swot collections - JSONArray isoXMLSpatialTypeJsonArray = (JSONArray) config.get("isoXMLSpatialType"); - HashSet isoXMLSpatialTypeHashSet = createIsoXMLSpatialTypeSet(isoXMLSpatialTypeJsonArray); - + TaskConfigBO taskConfigBO = TaskConfigFactory.createTaskConfigBO(config); String isoRegex = (String) config.get("isoRegex"); String archiveXmlRegex = (String) config.get("archiveXmlRegex"); @@ -154,8 +154,7 @@ public String PerformFunction(String input, Context context) throws Exception { MetadataFilesToEcho mtfe; boolean isIsoFile = (iso != null); - - mtfe = new MetadataFilesToEcho(isIsoFile, isoXMLSpatialTypeHashSet); + mtfe = new MetadataFilesToEcho(isIsoFile, taskConfigBO.getIsoXMLSpatialTypeHashSet()); //set the name/granuleId mtfe.getGranule().setName(granuleId); mtfe.setDatasetValues(collectionName, collectionVersion, rangeIs360, boundingBox, additionalAttributes); @@ -190,20 +189,27 @@ public String PerformFunction(String input, Context context) throws Exception { } } - //write UMM-G to file + /** + * generate the ummg json object. Use RelatedUrlsProcessor to append more items to RelateUrls. + * See RelatedUrls java doc to know detailed logic to process payload.granules[0].files[] + */ + String cmrFilePath = "/tmp/" + granuleId + ".cmr.json"; try { - mtfe.writeJson("/tmp/" + granuleId + ".cmr.json"); + JSONObject granuleJson = mtfe.createJson(); + RelatedUrlsProcessor relatedUrlsProcessor = new RelatedUrlsProcessor(); + granuleJson = relatedUrlsProcessor.appendSubTypes(granuleJson, taskConfigBO, files); + FileUtils.writeStringToFile(new File(cmrFilePath), granuleJson.toJSONString(), StandardCharsets.UTF_8); } catch (IOException e) { AdapterLogger.LogError(this.className + " mtfe.writeJson error:" + e.getMessage()); e.printStackTrace(); throw e; } - //copy new file to S3 /* + * Upload cmr.json to s3 bucket * Add UMM-G file to payload/file objects */ - File cmrFile = new File("/tmp/" + granuleId + ".cmr.json"); + File cmrFile = new File(cmrFilePath); s3Utils.upload(region, internalBucket, Paths.get(stagingDirectory, "/" + granuleId + ".cmr.json").toString(), cmrFile); @@ -237,34 +243,6 @@ public String PerformFunction(String input, Context context) throws Exception { } return returnable.toJSONString(); } - - public HashSet createIsoXMLSpatialTypeSet(JSONArray isoXMLSpatialTypeConfigJSONArray) throws IllegalArgumentException{ - HashSet isoSpatialTypes = new HashSet<>(); - // if not containing isoXMLTypes, then return an empty HashSet - if(isoXMLSpatialTypeConfigJSONArray == null || isoXMLSpatialTypeConfigJSONArray.size()==0) { - return isoSpatialTypes; - } - isoXMLSpatialTypeConfigJSONArray.forEach(item -> { - String t = (String) item; - MENDsIsoXMLSpatialTypeEnum en = MENDsIsoXMLSpatialTypeEnum.getEnum(getIsoXMLSpatialTypeStr(t)); - isoSpatialTypes.add(en); - }); - AdapterLogger.LogDebug(this.className + " isoSpatialTypes HashSet: " + isoSpatialTypes); - return isoSpatialTypes; - } - - public String getIsoXMLSpatialTypeStr(String token) { - final String trimmedToken = StringUtils.trim(token); - String s; - try { - s = MENDsIsoXMLSpatialTypeEnum.getEnumValuList().stream() - .filter(e -> StringUtils.equals(trimmedToken, e)).findFirst().get(); - } catch (java.util.NoSuchElementException e) { - s = ""; - } - return s; - } - /** * get S3 fileStaging direction from S3 full key * diff --git a/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataFilesToEcho.java b/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataFilesToEcho.java index ad9288d..39c8397 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataFilesToEcho.java +++ b/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataFilesToEcho.java @@ -1074,13 +1074,13 @@ public JSONObject createJson() granule.setIngestTime(new Date()); UMMGranuleFile granuleFile = new UMMGranuleFile(granule, dataset, rangeIs360, this.isoXMLSpatialTypeEnumHashSet); JSONObject granuleJson = granuleFile.defineGranule(); + JSONUtils.cleanJSON(granuleJson); return granuleJson; } public void writeJson(String outputLocation) throws IOException, ParseException, URISyntaxException{ JSONObject granuleJson = createJson(); - JSONUtils.cleanJSON(granuleJson); FileUtils.writeStringToFile(new File(outputLocation), granuleJson.toJSONString(), StandardCharsets.UTF_8); } diff --git a/src/main/java/gov/nasa/cumulus/metadata/aggregator/bo/TaskConfigBO.java b/src/main/java/gov/nasa/cumulus/metadata/aggregator/bo/TaskConfigBO.java new file mode 100644 index 0000000..b79804d --- /dev/null +++ b/src/main/java/gov/nasa/cumulus/metadata/aggregator/bo/TaskConfigBO.java @@ -0,0 +1,30 @@ +package gov.nasa.cumulus.metadata.aggregator.bo; + +import gov.nasa.cumulus.metadata.state.MENDsIsoXMLSpatialTypeEnum; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +public class TaskConfigBO { + HashSet isoXMLSpatialTypeHashSet; + ArrayList> subTypeHashArray = new ArrayList<>(); + + public TaskConfigBO() {} + + public HashSet getIsoXMLSpatialTypeHashSet() { + return isoXMLSpatialTypeHashSet; + } + + public void setIsoXMLSpatialTypeHashSet(HashSet isoXMLSpatialTypeHashSet) { + this.isoXMLSpatialTypeHashSet = isoXMLSpatialTypeHashSet; + } + + public ArrayList> getSubTypeHashArray() { + return subTypeHashArray; + } + + public void setSubTypeHashArray(ArrayList> subTypeHashArray) { + this.subTypeHashArray = subTypeHashArray; + } +} diff --git a/src/main/java/gov/nasa/cumulus/metadata/aggregator/factory/TaskConfigFactory.java b/src/main/java/gov/nasa/cumulus/metadata/aggregator/factory/TaskConfigFactory.java new file mode 100644 index 0000000..6a1887e --- /dev/null +++ b/src/main/java/gov/nasa/cumulus/metadata/aggregator/factory/TaskConfigFactory.java @@ -0,0 +1,71 @@ +package gov.nasa.cumulus.metadata.aggregator.factory; + +import cumulus_message_adapter.message_parser.AdapterLogger; +import gov.nasa.cumulus.metadata.aggregator.bo.TaskConfigBO; +import gov.nasa.cumulus.metadata.state.MENDsIsoXMLSpatialTypeEnum; +import org.apache.commons.lang3.StringUtils; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +public class TaskConfigFactory { + static String className = "gov.nasa.cumulus.metadata.aggregator.factory.TaskConfigFactory"; + + public static TaskConfigBO createTaskConfigBO(JSONObject config) { + TaskConfigBO taskConfigBO = new TaskConfigBO(); + //Construct isoXMLSpatialTypeHashset + JSONArray isoXMLSpatialTypeJsonArray = (JSONArray) config.get("isoXMLSpatialType"); + taskConfigBO.setIsoXMLSpatialTypeHashSet(createIsoXMLSpatialTypeSet(isoXMLSpatialTypeJsonArray)); + //Construct subTypeHashArray + JSONArray subTypeTypeJsonArray = (JSONArray) config.get("relatedUrlSubTypeMap"); + taskConfigBO.setSubTypeHashArray(createSubTypeHashArray(subTypeTypeJsonArray)); + return taskConfigBO; + + } + + public static HashSet createIsoXMLSpatialTypeSet(JSONArray isoXMLSpatialTypeConfigJSONArray) throws IllegalArgumentException{ + HashSet isoSpatialTypes = new HashSet<>(); + // if not containing isoXMLTypes, then return an empty HashSet + if(isoXMLSpatialTypeConfigJSONArray == null || isoXMLSpatialTypeConfigJSONArray.size()==0) { + return isoSpatialTypes; + } + isoXMLSpatialTypeConfigJSONArray.forEach(item -> { + String t = (String) item; + MENDsIsoXMLSpatialTypeEnum en = MENDsIsoXMLSpatialTypeEnum.getEnum(getIsoXMLSpatialTypeStr(t)); + isoSpatialTypes.add(en); + }); + AdapterLogger.LogDebug(className + " isoSpatialTypes HashSet: " + isoSpatialTypes); + return isoSpatialTypes; + } + + public static String getIsoXMLSpatialTypeStr(String token) { + final String trimmedToken = StringUtils.trim(token); + String s; + try { + s = MENDsIsoXMLSpatialTypeEnum.getEnumValuList().stream() + .filter(e -> StringUtils.equals(trimmedToken, e)).findFirst().get(); + } catch (java.util.NoSuchElementException e) { + s = ""; + } + return s; + } + + public static ArrayList> createSubTypeHashArray(JSONArray jsonArray) { + ArrayList> subTypeHashArray = new ArrayList<>(); + if(jsonArray !=null && jsonArray.size()>0) { + jsonArray.forEach(item -> { + String regex = ((JSONObject) item).get("regex").toString(); + String subType = ((JSONObject) item).get("subType").toString(); + HashMap mapper = new HashMap<>(); + mapper.put("regex", regex); + mapper.put("subType", subType); + subTypeHashArray.add(mapper); + }); + } + return subTypeHashArray; + } + +} diff --git a/src/main/java/gov/nasa/cumulus/metadata/aggregator/processor/RelatedUrlsProcessor.java b/src/main/java/gov/nasa/cumulus/metadata/aggregator/processor/RelatedUrlsProcessor.java new file mode 100644 index 0000000..9a4b63a --- /dev/null +++ b/src/main/java/gov/nasa/cumulus/metadata/aggregator/processor/RelatedUrlsProcessor.java @@ -0,0 +1,54 @@ +package gov.nasa.cumulus.metadata.aggregator.processor; + +import gov.nasa.cumulus.metadata.aggregator.bo.TaskConfigBO; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * this class is a post-processing of created umm-g + * by appending relatedUrl items into RelatedUrls array based on + * + * if any item within payload.granules[0].files[] matched collection configurations meta.subTypeMap array's + * regex + */ +public class RelatedUrlsProcessor { + public void RelatedUrlsProcessor() { + } + + public JSONObject appendSubTypes(JSONObject granuleJson, TaskConfigBO taskConfigBO, JSONArray files) { + ArrayList> subTypeHashArray=taskConfigBO.getSubTypeHashArray(); + JSONArray relateUrlsArray = (JSONArray) granuleJson.get("RelatedUrls"); + // 1: Loop through the existing RelatedUrls array to find any match for the subType regex. + // for the finding match, set Subtype to + for(int i=0; i subTypeHash : subTypeHashArray) { + if(URLStr.matches(subTypeHash.get("regex"))) { + relatedUrlJson.put("Subtype", subTypeHash.get("subType")); + } + } + } + // 2: Loop through the existing Input files:[] array to find any match for the subType regex. + // for the finding match, append a new RelatedUrl item with Subtype set to subTypeHash.get("subType") + for(Object file: files) { + JSONObject fileJson = (JSONObject) file; + String source = fileJson.get("source").toString(); + for(HashMap subTypeHash : subTypeHashArray) { + if(source.matches(subTypeHash.get("regex"))) { + JSONObject relatedUrl = new JSONObject(); + relatedUrl.put("URL", source); + relatedUrl.put("Type", "GET DATA"); + relatedUrl.put("Subtype", subTypeHash.get("subType")); + relateUrlsArray.add(relatedUrl); + } + } + } + return granuleJson; + } + +} diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/AdditionalAttributeType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/AdditionalAttributeType.java index 21e88fc..f3d942c 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/AdditionalAttributeType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/AdditionalAttributeType.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -11,6 +12,7 @@ * A reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection. * */ +@Generated("jsonschema2pojo") public class AdditionalAttributeType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/BoundaryType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/BoundaryType.java index e4aca53..6bf0573 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/BoundaryType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/BoundaryType.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -11,6 +12,7 @@ * A boundary is set of points connected by straight lines representing a polygon on the earth. It takes a minimum of three points to make a boundary. Points must be specified in counter-clockwise order and closed (the first and last vertices are the same). * */ +@Generated("jsonschema2pojo") public class BoundaryType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/BoundingRectangleType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/BoundingRectangleType.java index 5bbd991..dae33ad 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/BoundingRectangleType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/BoundingRectangleType.java @@ -1,6 +1,7 @@ package gov.nasa.cumulus.metadata.umm.generated; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -9,6 +10,7 @@ * This entity holds the horizontal spatial coverage of a bounding box. * */ +@Generated("jsonschema2pojo") public class BoundingRectangleType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/ExclusiveZoneType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/ExclusiveZoneType.java index ecedbb4..6cbc703 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/ExclusiveZoneType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/ExclusiveZoneType.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -11,6 +12,7 @@ * Contains the excluded boundaries from the GPolygon. * */ +@Generated("jsonschema2pojo") public class ExclusiveZoneType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/GPolygonType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/GPolygonType.java index d57a4d4..b6b2d91 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/GPolygonType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/GPolygonType.java @@ -1,6 +1,7 @@ package gov.nasa.cumulus.metadata.umm.generated; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -9,6 +10,7 @@ * A GPolygon specifies an area on the earth represented by a main boundary with optional boundaries for regions excluded from the main boundary. * */ +@Generated("jsonschema2pojo") public class GPolygonType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/GeometryType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/GeometryType.java index 6eda0f4..80f2c66 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/GeometryType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/GeometryType.java @@ -3,6 +3,7 @@ import java.util.LinkedHashSet; import java.util.Set; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -11,6 +12,7 @@ * This entity holds the geometry representing the spatial coverage information of a granule. * */ +@Generated("jsonschema2pojo") public class GeometryType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/HorizontalSpatialDomainType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/HorizontalSpatialDomainType.java index ae42034..9c5c7c5 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/HorizontalSpatialDomainType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/HorizontalSpatialDomainType.java @@ -1,6 +1,7 @@ package gov.nasa.cumulus.metadata.umm.generated; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -9,6 +10,7 @@ * Information about a granule with horizontal spatial coverage. * */ +@Generated("jsonschema2pojo") public class HorizontalSpatialDomainType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/LineType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/LineType.java index d55c423..31b4e12 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/LineType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/LineType.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -11,6 +12,7 @@ * This entity holds the horizontal spatial coverage of a line. A line area contains at lease two points. * */ +@Generated("jsonschema2pojo") public class LineType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/OrbitType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/OrbitType.java index 8b07027..64f6708 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/OrbitType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/OrbitType.java @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.Map; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -11,6 +12,7 @@ * This entity stores orbital coverage information of the granule. This coverage is an alternative way of expressing granule spatial coverage. This information supports orbital backtrack searching on a granule. * */ +@Generated("jsonschema2pojo") public class OrbitType { /** @@ -36,7 +38,7 @@ public class OrbitType { */ @SerializedName("StartDirection") @Expose - private OrbitType.OrbitDirectionTypeEnum startDirection; + private OrbitDirectionTypeEnum startDirection; /** * The latitude value of a spatially referenced point, in degrees. Latitude values range from -90 to 90. * (Required) @@ -52,7 +54,7 @@ public class OrbitType { */ @SerializedName("EndDirection") @Expose - private OrbitType.OrbitDirectionTypeEnum endDirection; + private OrbitDirectionTypeEnum endDirection; /** * The longitude value of a spatially referenced point, in degrees. Longitude values range from -180 to 180. @@ -95,7 +97,7 @@ public void setStartLatitude(Double startLatitude) { * (Required) * */ - public OrbitType.OrbitDirectionTypeEnum getStartDirection() { + public OrbitDirectionTypeEnum getStartDirection() { return startDirection; } @@ -104,7 +106,7 @@ public OrbitType.OrbitDirectionTypeEnum getStartDirection() { * (Required) * */ - public void setStartDirection(OrbitType.OrbitDirectionTypeEnum startDirection) { + public void setStartDirection(OrbitDirectionTypeEnum startDirection) { this.startDirection = startDirection; } @@ -131,7 +133,7 @@ public void setEndLatitude(Double endLatitude) { * (Required) * */ - public OrbitType.OrbitDirectionTypeEnum getEndDirection() { + public OrbitDirectionTypeEnum getEndDirection() { return endDirection; } @@ -140,7 +142,7 @@ public OrbitType.OrbitDirectionTypeEnum getEndDirection() { * (Required) * */ - public void setEndDirection(OrbitType.OrbitDirectionTypeEnum endDirection) { + public void setEndDirection(OrbitDirectionTypeEnum endDirection) { this.endDirection = endDirection; } @@ -204,6 +206,7 @@ public boolean equals(Object other) { * Orbit start and end direction. A for ascending orbit and D for descending. * */ + @Generated("jsonschema2pojo") public enum OrbitDirectionTypeEnum { @SerializedName("A") @@ -211,10 +214,10 @@ public enum OrbitDirectionTypeEnum { @SerializedName("D") D("D"); private final String value; - private final static Map CONSTANTS = new HashMap(); + private final static Map CONSTANTS = new HashMap(); static { - for (OrbitType.OrbitDirectionTypeEnum c: values()) { + for (OrbitDirectionTypeEnum c: values()) { CONSTANTS.put(c.value, c); } } @@ -232,8 +235,8 @@ public String value() { return this.value; } - public static OrbitType.OrbitDirectionTypeEnum fromValue(String value) { - OrbitType.OrbitDirectionTypeEnum constant = CONSTANTS.get(value); + public static OrbitDirectionTypeEnum fromValue(String value) { + OrbitDirectionTypeEnum constant = CONSTANTS.get(value); if (constant == null) { throw new IllegalArgumentException(value); } else { diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/PointType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/PointType.java index 627eea0..8326a6c 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/PointType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/PointType.java @@ -1,6 +1,7 @@ package gov.nasa.cumulus.metadata.umm.generated; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -9,6 +10,7 @@ * The longitude and latitude values of a spatially referenced point in degrees. * */ +@Generated("jsonschema2pojo") public class PointType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/RelatedUrlType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/RelatedUrlType.java index 6f3ccac..1f0bccc 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/RelatedUrlType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/RelatedUrlType.java @@ -3,71 +3,73 @@ import java.util.HashMap; import java.util.Map; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; /** * This entity holds all types of online URL associated with the granule such as guide document or ordering site etc. - * + * */ +@Generated("jsonschema2pojo") public class RelatedUrlType { /** * The URL for the relevant resource. * (Required) - * + * */ @SerializedName("URL") @Expose private String url; /** - * + * * (Required) - * + * */ @SerializedName("Type") @Expose - private RelatedUrlType.RelatedUrlTypeEnum type; + private RelatedUrlTypeEnum type; @SerializedName("Subtype") @Expose - private RelatedUrlType.RelatedUrlSubTypeEnum subtype; + private RelatedUrlSubTypeEnum subtype; /** * Description of the web page at this URL. - * + * */ @SerializedName("Description") @Expose private String description; /** * The format that granule data confirms to. While the value is listed as open to any text, CMR requires that it confirm to one of the values on the GranuleDataFormat values in the Keyword Management System: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/GranuleDataFormat - * + * */ @SerializedName("Format") @Expose private String format; @SerializedName("MimeType") @Expose - private RelatedUrlType.MimeTypeEnum mimeType; + private MimeTypeEnum mimeType; /** * The size of the resource. - * + * */ @SerializedName("Size") @Expose private Double size; /** * The unit of the file size. - * + * */ @SerializedName("SizeUnit") @Expose - private RelatedUrlType.FileSizeUnitEnum sizeUnit; + private FileSizeUnitEnum sizeUnit; /** * The URL for the relevant resource. * (Required) - * + * */ public String getUrl() { return url; @@ -76,41 +78,41 @@ public String getUrl() { /** * The URL for the relevant resource. * (Required) - * + * */ public void setUrl(String url) { this.url = url; } /** - * + * * (Required) - * + * */ - public RelatedUrlType.RelatedUrlTypeEnum getType() { + public RelatedUrlTypeEnum getType() { return type; } /** - * + * * (Required) - * + * */ - public void setType(RelatedUrlType.RelatedUrlTypeEnum type) { + public void setType(RelatedUrlTypeEnum type) { this.type = type; } - public RelatedUrlType.RelatedUrlSubTypeEnum getSubtype() { + public RelatedUrlSubTypeEnum getSubtype() { return subtype; } - public void setSubtype(RelatedUrlType.RelatedUrlSubTypeEnum subtype) { + public void setSubtype(RelatedUrlSubTypeEnum subtype) { this.subtype = subtype; } /** * Description of the web page at this URL. - * + * */ public String getDescription() { return description; @@ -118,7 +120,7 @@ public String getDescription() { /** * Description of the web page at this URL. - * + * */ public void setDescription(String description) { this.description = description; @@ -126,7 +128,7 @@ public void setDescription(String description) { /** * The format that granule data confirms to. While the value is listed as open to any text, CMR requires that it confirm to one of the values on the GranuleDataFormat values in the Keyword Management System: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/GranuleDataFormat - * + * */ public String getFormat() { return format; @@ -134,23 +136,23 @@ public String getFormat() { /** * The format that granule data confirms to. While the value is listed as open to any text, CMR requires that it confirm to one of the values on the GranuleDataFormat values in the Keyword Management System: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/GranuleDataFormat - * + * */ public void setFormat(String format) { this.format = format; } - public RelatedUrlType.MimeTypeEnum getMimeType() { + public MimeTypeEnum getMimeType() { return mimeType; } - public void setMimeType(RelatedUrlType.MimeTypeEnum mimeType) { + public void setMimeType(MimeTypeEnum mimeType) { this.mimeType = mimeType; } /** * The size of the resource. - * + * */ public Double getSize() { return size; @@ -158,7 +160,7 @@ public Double getSize() { /** * The size of the resource. - * + * */ public void setSize(Double size) { this.size = size; @@ -166,17 +168,17 @@ public void setSize(Double size) { /** * The unit of the file size. - * + * */ - public RelatedUrlType.FileSizeUnitEnum getSizeUnit() { + public FileSizeUnitEnum getSizeUnit() { return sizeUnit; } /** * The unit of the file size. - * + * */ - public void setSizeUnit(RelatedUrlType.FileSizeUnitEnum sizeUnit) { + public void setSizeUnit(FileSizeUnitEnum sizeUnit) { this.sizeUnit = sizeUnit; } @@ -253,8 +255,9 @@ public boolean equals(Object other) { /** * The unit of the file size. - * + * */ + @Generated("jsonschema2pojo") public enum FileSizeUnitEnum { @SerializedName("KB") @@ -270,10 +273,10 @@ public enum FileSizeUnitEnum { @SerializedName("NA") NA("NA"); private final String value; - private final static Map CONSTANTS = new HashMap(); + private final static Map CONSTANTS = new HashMap(); static { - for (RelatedUrlType.FileSizeUnitEnum c: values()) { + for (FileSizeUnitEnum c: values()) { CONSTANTS.put(c.value, c); } } @@ -291,8 +294,8 @@ public String value() { return this.value; } - public static RelatedUrlType.FileSizeUnitEnum fromValue(String value) { - RelatedUrlType.FileSizeUnitEnum constant = CONSTANTS.get(value); + public static FileSizeUnitEnum fromValue(String value) { + FileSizeUnitEnum constant = CONSTANTS.get(value); if (constant == null) { throw new IllegalArgumentException(value); } else { @@ -302,6 +305,7 @@ public static RelatedUrlType.FileSizeUnitEnum fromValue(String value) { } + @Generated("jsonschema2pojo") public enum MimeTypeEnum { @SerializedName("application/json") @@ -361,10 +365,10 @@ public enum MimeTypeEnum { @SerializedName("Not provided") NOT_PROVIDED("Not provided"); private final String value; - private final static Map CONSTANTS = new HashMap(); + private final static Map CONSTANTS = new HashMap(); static { - for (RelatedUrlType.MimeTypeEnum c: values()) { + for (MimeTypeEnum c: values()) { CONSTANTS.put(c.value, c); } } @@ -382,8 +386,8 @@ public String value() { return this.value; } - public static RelatedUrlType.MimeTypeEnum fromValue(String value) { - RelatedUrlType.MimeTypeEnum constant = CONSTANTS.get(value); + public static MimeTypeEnum fromValue(String value) { + MimeTypeEnum constant = CONSTANTS.get(value); if (constant == null) { throw new IllegalArgumentException(value); } else { @@ -393,8 +397,11 @@ public static RelatedUrlType.MimeTypeEnum fromValue(String value) { } + @Generated("jsonschema2pojo") public enum RelatedUrlSubTypeEnum { + @SerializedName("BROWSE IMAGE SOURCE") + BROWSE_IMAGE_SOURCE("BROWSE IMAGE SOURCE"), @SerializedName("MOBILE APP") MOBILE_APP("MOBILE APP"), @SerializedName("APPEARS") @@ -532,10 +539,10 @@ public enum RelatedUrlSubTypeEnum { @SerializedName("DMR++ MISSING DATA") DMR_MISSING_DATA("DMR++ MISSING DATA"); private final String value; - private final static Map CONSTANTS = new HashMap(); + private final static Map CONSTANTS = new HashMap(); static { - for (RelatedUrlType.RelatedUrlSubTypeEnum c: values()) { + for (RelatedUrlSubTypeEnum c: values()) { CONSTANTS.put(c.value, c); } } @@ -553,8 +560,8 @@ public String value() { return this.value; } - public static RelatedUrlType.RelatedUrlSubTypeEnum fromValue(String value) { - RelatedUrlType.RelatedUrlSubTypeEnum constant = CONSTANTS.get(value); + public static RelatedUrlSubTypeEnum fromValue(String value) { + RelatedUrlSubTypeEnum constant = CONSTANTS.get(value); if (constant == null) { throw new IllegalArgumentException(value); } else { @@ -564,6 +571,7 @@ public static RelatedUrlType.RelatedUrlSubTypeEnum fromValue(String value) { } + @Generated("jsonschema2pojo") public enum RelatedUrlTypeEnum { @SerializedName("DOWNLOAD SOFTWARE") @@ -585,10 +593,10 @@ public enum RelatedUrlTypeEnum { @SerializedName("VIEW RELATED INFORMATION") VIEW_RELATED_INFORMATION("VIEW RELATED INFORMATION"); private final String value; - private final static Map CONSTANTS = new HashMap(); + private final static Map CONSTANTS = new HashMap(); static { - for (RelatedUrlType.RelatedUrlTypeEnum c: values()) { + for (RelatedUrlTypeEnum c: values()) { CONSTANTS.put(c.value, c); } } @@ -606,8 +614,8 @@ public String value() { return this.value; } - public static RelatedUrlType.RelatedUrlTypeEnum fromValue(String value) { - RelatedUrlType.RelatedUrlTypeEnum constant = CONSTANTS.get(value); + public static RelatedUrlTypeEnum fromValue(String value) { + RelatedUrlTypeEnum constant = CONSTANTS.get(value); if (constant == null) { throw new IllegalArgumentException(value); } else { diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/SpatialExtentType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/SpatialExtentType.java index 9c8cf66..dcb6012 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/SpatialExtentType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/SpatialExtentType.java @@ -3,6 +3,7 @@ import java.util.LinkedHashSet; import java.util.Set; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -11,6 +12,7 @@ * This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain. * */ +@Generated("jsonschema2pojo") public class SpatialExtentType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/TrackPassTileType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/TrackPassTileType.java index ecf7c81..3879737 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/TrackPassTileType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/TrackPassTileType.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -11,6 +12,7 @@ * This element stores a track pass and its tile information. It will allow a user to search by pass number and their tiles that are contained with in a cycle number. While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit. This element will then hold a list of 1/2 orbits and their tiles that together represent the granules spatial extent. * */ +@Generated("jsonschema2pojo") public class TrackPassTileType { /** diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/TrackType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/TrackType.java index 3aec256..54c17da 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/TrackType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/TrackType.java @@ -3,27 +3,29 @@ import java.util.ArrayList; import java.util.List; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; /** * This element stores track information of the granule. Track information is used to allow a user to search for granules whose spatial extent is based on an orbital cycle, pass, and tile mapping. Though it is derived from the SWOT mission requirements, it is intended that this element type be generic enough so that other missions can make use of it. While track information is a type of spatial domain, it is expected that the metadata provider will provide geometry information that matches the spatial extent of the track information. - * + * */ +@Generated("jsonschema2pojo") public class TrackType { /** * An integer that represents a specific set of orbital spatial extents defined by passes and tiles. Though intended to be generic, this comes from a SWOT mission requirement where each cycle represents a set of 1/2 orbits. Each 1/2 orbit is called a 'pass'. During science mode, a cycle represents 21 days of 14 full orbits or 588 passes. * (Required) - * + * */ @SerializedName("Cycle") @Expose private Integer cycle; /** * A pass number identifies a subset of a granule's spatial extent. This element holds a list of pass numbers and their tiles that exist in the granule. It will allow a user to search by pass number and its tiles that are contained with in a cycle number. While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit. This element will then hold a list of 1/2 orbits and their tiles that together represent the granule's spatial extent. - * + * */ @SerializedName("Passes") @Expose @@ -32,7 +34,7 @@ public class TrackType { /** * An integer that represents a specific set of orbital spatial extents defined by passes and tiles. Though intended to be generic, this comes from a SWOT mission requirement where each cycle represents a set of 1/2 orbits. Each 1/2 orbit is called a 'pass'. During science mode, a cycle represents 21 days of 14 full orbits or 588 passes. * (Required) - * + * */ public Integer getCycle() { return cycle; @@ -41,7 +43,7 @@ public Integer getCycle() { /** * An integer that represents a specific set of orbital spatial extents defined by passes and tiles. Though intended to be generic, this comes from a SWOT mission requirement where each cycle represents a set of 1/2 orbits. Each 1/2 orbit is called a 'pass'. During science mode, a cycle represents 21 days of 14 full orbits or 588 passes. * (Required) - * + * */ public void setCycle(Integer cycle) { this.cycle = cycle; @@ -49,7 +51,7 @@ public void setCycle(Integer cycle) { /** * A pass number identifies a subset of a granule's spatial extent. This element holds a list of pass numbers and their tiles that exist in the granule. It will allow a user to search by pass number and its tiles that are contained with in a cycle number. While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit. This element will then hold a list of 1/2 orbits and their tiles that together represent the granule's spatial extent. - * + * */ public List getPasses() { return passes; @@ -57,7 +59,7 @@ public List getPasses() { /** * A pass number identifies a subset of a granule's spatial extent. This element holds a list of pass numbers and their tiles that exist in the granule. It will allow a user to search by pass number and its tiles that are contained with in a cycle number. While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit. This element will then hold a list of 1/2 orbits and their tiles that together represent the granule's spatial extent. - * + * */ public void setPasses(List passes) { this.passes = passes; diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/Ummg166.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/Ummg166.java new file mode 100644 index 0000000..3379975 --- /dev/null +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/Ummg166.java @@ -0,0 +1,625 @@ + +package gov.nasa.cumulus.metadata.umm.generated; + +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import javax.annotation.processing.Generated; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + + +/** + * UMM-G + *

+ * + * + */ +@Generated("jsonschema2pojo") +public class Ummg166 { + + /** + * The Universal Reference ID of the granule referred by the data provider. This ID is unique per data provider. + * (Required) + * + */ + @SerializedName("GranuleUR") + @Expose + private String granuleUR; + /** + * Dates related to activities involving the the granule and the data provider database with the exception for Delete. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository. + * (Required) + * + */ + @SerializedName("ProviderDates") + @Expose + private Set providerDates = new LinkedHashSet(); + /** + * A reference to a collection metadata record's short name and version, or entry title to which this granule metadata record belongs. + * (Required) + * + */ + @SerializedName("CollectionReference") + @Expose + private CollectionReferenceType collectionReference; + /** + * Information about any physical constraints for accessing the data set. + * + */ + @SerializedName("AccessConstraints") + @Expose + private AccessConstraintsType accessConstraints; + /** + * This entity stores the basic descriptive characteristics associated with a granule. + * + */ + @SerializedName("DataGranule") + @Expose + private DataGranuleType dataGranule; + /** + * This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule. + * + */ + @SerializedName("PGEVersionClass") + @Expose + private PGEVersionClassType pGEVersionClass; + /** + * Information which describes the temporal extent of a specific granule. + * + */ + @SerializedName("TemporalExtent") + @Expose + private TemporalExtentType temporalExtent; + /** + * This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain. + * + */ + @SerializedName("SpatialExtent") + @Expose + private SpatialExtentType spatialExtent; + /** + * This entity is used to store the characteristics of the orbit calculated spatial domain to include the model name, orbit number, start and stop orbit number, equator crossing date and time, and equator crossing longitude. + * + */ + @SerializedName("OrbitCalculatedSpatialDomains") + @Expose + private Set orbitCalculatedSpatialDomains = new LinkedHashSet(); + /** + * This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule. + * + */ + @SerializedName("MeasuredParameters") + @Expose + private Set measuredParameters = new LinkedHashSet(); + /** + * A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc. + * + */ + @SerializedName("Platforms") + @Expose + private Set platforms = new LinkedHashSet(); + /** + * The name of the scientific program, field campaign, or project from which the data were collected. This element is intended for the non-space assets such as aircraft, ground systems, balloons, sondes, ships, etc. associated with campaigns. This element may also cover a long term project that continuously creates new data sets — like MEaSUREs from ISCCP and NVAP or CMARES from MISR. Project also includes the Campaign sub-element to support multiple campaigns under the same project. + * + */ + @SerializedName("Projects") + @Expose + private Set projects = new LinkedHashSet(); + /** + * Reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection. + * + */ + @SerializedName("AdditionalAttributes") + @Expose + private Set additionalAttributes = new LinkedHashSet(); + /** + * This entity contains the identification of the input granule(s) for a specific granule. + * + */ + @SerializedName("InputGranules") + @Expose + private Set inputGranules = new LinkedHashSet(); + /** + * This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection. + * + */ + @SerializedName("TilingIdentificationSystem") + @Expose + private TilingIdentificationSystemType tilingIdentificationSystem; + /** + * A percentage value indicating how much of the area of a granule (the EOSDIS data unit) has been obscured by clouds. It is worth noting that there are many different measures of cloud cover within the EOSDIS data holdings and that the cloud cover parameter that is represented in the archive is dataset-specific. + * + */ + @SerializedName("CloudCover") + @Expose + private Double cloudCover; + /** + * This element describes any data/service related URLs that include project home pages, services, related data archives/servers, metadata extensions, direct links to online software packages, web mapping services, links to images, or other data. + * + */ + @SerializedName("RelatedUrls") + @Expose + private List relatedUrls = new ArrayList(); + /** + * Represents the native projection of the granule if the granule has a native projection. + * + */ + @SerializedName("NativeProjectionNames") + @Expose + private List nativeProjectionNames = new ArrayList(); + /** + * Represents the native grid mapping of the granule, if the granule is gridded. + * + */ + @SerializedName("GridMappingNames") + @Expose + private List gridMappingNames = new ArrayList(); + /** + * This object requires any metadata record that is validated by this schema to provide information about the schema. + * (Required) + * + */ + @SerializedName("MetadataSpecification") + @Expose + private MetadataSpecificationType metadataSpecification; + + /** + * The Universal Reference ID of the granule referred by the data provider. This ID is unique per data provider. + * (Required) + * + */ + public String getGranuleUR() { + return granuleUR; + } + + /** + * The Universal Reference ID of the granule referred by the data provider. This ID is unique per data provider. + * (Required) + * + */ + public void setGranuleUR(String granuleUR) { + this.granuleUR = granuleUR; + } + + /** + * Dates related to activities involving the the granule and the data provider database with the exception for Delete. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository. + * (Required) + * + */ + public Set getProviderDates() { + return providerDates; + } + + /** + * Dates related to activities involving the the granule and the data provider database with the exception for Delete. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository. + * (Required) + * + */ + public void setProviderDates(Set providerDates) { + this.providerDates = providerDates; + } + + /** + * A reference to a collection metadata record's short name and version, or entry title to which this granule metadata record belongs. + * (Required) + * + */ + public CollectionReferenceType getCollectionReference() { + return collectionReference; + } + + /** + * A reference to a collection metadata record's short name and version, or entry title to which this granule metadata record belongs. + * (Required) + * + */ + public void setCollectionReference(CollectionReferenceType collectionReference) { + this.collectionReference = collectionReference; + } + + /** + * Information about any physical constraints for accessing the data set. + * + */ + public AccessConstraintsType getAccessConstraints() { + return accessConstraints; + } + + /** + * Information about any physical constraints for accessing the data set. + * + */ + public void setAccessConstraints(AccessConstraintsType accessConstraints) { + this.accessConstraints = accessConstraints; + } + + /** + * This entity stores the basic descriptive characteristics associated with a granule. + * + */ + public DataGranuleType getDataGranule() { + return dataGranule; + } + + /** + * This entity stores the basic descriptive characteristics associated with a granule. + * + */ + public void setDataGranule(DataGranuleType dataGranule) { + this.dataGranule = dataGranule; + } + + /** + * This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule. + * + */ + public PGEVersionClassType getPGEVersionClass() { + return pGEVersionClass; + } + + /** + * This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule. + * + */ + public void setPGEVersionClass(PGEVersionClassType pGEVersionClass) { + this.pGEVersionClass = pGEVersionClass; + } + + /** + * Information which describes the temporal extent of a specific granule. + * + */ + public TemporalExtentType getTemporalExtent() { + return temporalExtent; + } + + /** + * Information which describes the temporal extent of a specific granule. + * + */ + public void setTemporalExtent(TemporalExtentType temporalExtent) { + this.temporalExtent = temporalExtent; + } + + /** + * This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain. + * + */ + public SpatialExtentType getSpatialExtent() { + return spatialExtent; + } + + /** + * This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain. + * + */ + public void setSpatialExtent(SpatialExtentType spatialExtent) { + this.spatialExtent = spatialExtent; + } + + /** + * This entity is used to store the characteristics of the orbit calculated spatial domain to include the model name, orbit number, start and stop orbit number, equator crossing date and time, and equator crossing longitude. + * + */ + public Set getOrbitCalculatedSpatialDomains() { + return orbitCalculatedSpatialDomains; + } + + /** + * This entity is used to store the characteristics of the orbit calculated spatial domain to include the model name, orbit number, start and stop orbit number, equator crossing date and time, and equator crossing longitude. + * + */ + public void setOrbitCalculatedSpatialDomains(Set orbitCalculatedSpatialDomains) { + this.orbitCalculatedSpatialDomains = orbitCalculatedSpatialDomains; + } + + /** + * This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule. + * + */ + public Set getMeasuredParameters() { + return measuredParameters; + } + + /** + * This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule. + * + */ + public void setMeasuredParameters(Set measuredParameters) { + this.measuredParameters = measuredParameters; + } + + /** + * A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc. + * + */ + public Set getPlatforms() { + return platforms; + } + + /** + * A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc. + * + */ + public void setPlatforms(Set platforms) { + this.platforms = platforms; + } + + /** + * The name of the scientific program, field campaign, or project from which the data were collected. This element is intended for the non-space assets such as aircraft, ground systems, balloons, sondes, ships, etc. associated with campaigns. This element may also cover a long term project that continuously creates new data sets — like MEaSUREs from ISCCP and NVAP or CMARES from MISR. Project also includes the Campaign sub-element to support multiple campaigns under the same project. + * + */ + public Set getProjects() { + return projects; + } + + /** + * The name of the scientific program, field campaign, or project from which the data were collected. This element is intended for the non-space assets such as aircraft, ground systems, balloons, sondes, ships, etc. associated with campaigns. This element may also cover a long term project that continuously creates new data sets — like MEaSUREs from ISCCP and NVAP or CMARES from MISR. Project also includes the Campaign sub-element to support multiple campaigns under the same project. + * + */ + public void setProjects(Set projects) { + this.projects = projects; + } + + /** + * Reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection. + * + */ + public Set getAdditionalAttributes() { + return additionalAttributes; + } + + /** + * Reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection. + * + */ + public void setAdditionalAttributes(Set additionalAttributes) { + this.additionalAttributes = additionalAttributes; + } + + /** + * This entity contains the identification of the input granule(s) for a specific granule. + * + */ + public Set getInputGranules() { + return inputGranules; + } + + /** + * This entity contains the identification of the input granule(s) for a specific granule. + * + */ + public void setInputGranules(Set inputGranules) { + this.inputGranules = inputGranules; + } + + /** + * This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection. + * + */ + public TilingIdentificationSystemType getTilingIdentificationSystem() { + return tilingIdentificationSystem; + } + + /** + * This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection. + * + */ + public void setTilingIdentificationSystem(TilingIdentificationSystemType tilingIdentificationSystem) { + this.tilingIdentificationSystem = tilingIdentificationSystem; + } + + /** + * A percentage value indicating how much of the area of a granule (the EOSDIS data unit) has been obscured by clouds. It is worth noting that there are many different measures of cloud cover within the EOSDIS data holdings and that the cloud cover parameter that is represented in the archive is dataset-specific. + * + */ + public Double getCloudCover() { + return cloudCover; + } + + /** + * A percentage value indicating how much of the area of a granule (the EOSDIS data unit) has been obscured by clouds. It is worth noting that there are many different measures of cloud cover within the EOSDIS data holdings and that the cloud cover parameter that is represented in the archive is dataset-specific. + * + */ + public void setCloudCover(Double cloudCover) { + this.cloudCover = cloudCover; + } + + /** + * This element describes any data/service related URLs that include project home pages, services, related data archives/servers, metadata extensions, direct links to online software packages, web mapping services, links to images, or other data. + * + */ + public List getRelatedUrls() { + return relatedUrls; + } + + /** + * This element describes any data/service related URLs that include project home pages, services, related data archives/servers, metadata extensions, direct links to online software packages, web mapping services, links to images, or other data. + * + */ + public void setRelatedUrls(List relatedUrls) { + this.relatedUrls = relatedUrls; + } + + /** + * Represents the native projection of the granule if the granule has a native projection. + * + */ + public List getNativeProjectionNames() { + return nativeProjectionNames; + } + + /** + * Represents the native projection of the granule if the granule has a native projection. + * + */ + public void setNativeProjectionNames(List nativeProjectionNames) { + this.nativeProjectionNames = nativeProjectionNames; + } + + /** + * Represents the native grid mapping of the granule, if the granule is gridded. + * + */ + public List getGridMappingNames() { + return gridMappingNames; + } + + /** + * Represents the native grid mapping of the granule, if the granule is gridded. + * + */ + public void setGridMappingNames(List gridMappingNames) { + this.gridMappingNames = gridMappingNames; + } + + /** + * This object requires any metadata record that is validated by this schema to provide information about the schema. + * (Required) + * + */ + public MetadataSpecificationType getMetadataSpecification() { + return metadataSpecification; + } + + /** + * This object requires any metadata record that is validated by this schema to provide information about the schema. + * (Required) + * + */ + public void setMetadataSpecification(MetadataSpecificationType metadataSpecification) { + this.metadataSpecification = metadataSpecification; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(Ummg166 .class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("granuleUR"); + sb.append('='); + sb.append(((this.granuleUR == null)?"":this.granuleUR)); + sb.append(','); + sb.append("providerDates"); + sb.append('='); + sb.append(((this.providerDates == null)?"":this.providerDates)); + sb.append(','); + sb.append("collectionReference"); + sb.append('='); + sb.append(((this.collectionReference == null)?"":this.collectionReference)); + sb.append(','); + sb.append("accessConstraints"); + sb.append('='); + sb.append(((this.accessConstraints == null)?"":this.accessConstraints)); + sb.append(','); + sb.append("dataGranule"); + sb.append('='); + sb.append(((this.dataGranule == null)?"":this.dataGranule)); + sb.append(','); + sb.append("pGEVersionClass"); + sb.append('='); + sb.append(((this.pGEVersionClass == null)?"":this.pGEVersionClass)); + sb.append(','); + sb.append("temporalExtent"); + sb.append('='); + sb.append(((this.temporalExtent == null)?"":this.temporalExtent)); + sb.append(','); + sb.append("spatialExtent"); + sb.append('='); + sb.append(((this.spatialExtent == null)?"":this.spatialExtent)); + sb.append(','); + sb.append("orbitCalculatedSpatialDomains"); + sb.append('='); + sb.append(((this.orbitCalculatedSpatialDomains == null)?"":this.orbitCalculatedSpatialDomains)); + sb.append(','); + sb.append("measuredParameters"); + sb.append('='); + sb.append(((this.measuredParameters == null)?"":this.measuredParameters)); + sb.append(','); + sb.append("platforms"); + sb.append('='); + sb.append(((this.platforms == null)?"":this.platforms)); + sb.append(','); + sb.append("projects"); + sb.append('='); + sb.append(((this.projects == null)?"":this.projects)); + sb.append(','); + sb.append("additionalAttributes"); + sb.append('='); + sb.append(((this.additionalAttributes == null)?"":this.additionalAttributes)); + sb.append(','); + sb.append("inputGranules"); + sb.append('='); + sb.append(((this.inputGranules == null)?"":this.inputGranules)); + sb.append(','); + sb.append("tilingIdentificationSystem"); + sb.append('='); + sb.append(((this.tilingIdentificationSystem == null)?"":this.tilingIdentificationSystem)); + sb.append(','); + sb.append("cloudCover"); + sb.append('='); + sb.append(((this.cloudCover == null)?"":this.cloudCover)); + sb.append(','); + sb.append("relatedUrls"); + sb.append('='); + sb.append(((this.relatedUrls == null)?"":this.relatedUrls)); + sb.append(','); + sb.append("nativeProjectionNames"); + sb.append('='); + sb.append(((this.nativeProjectionNames == null)?"":this.nativeProjectionNames)); + sb.append(','); + sb.append("gridMappingNames"); + sb.append('='); + sb.append(((this.gridMappingNames == null)?"":this.gridMappingNames)); + sb.append(','); + sb.append("metadataSpecification"); + sb.append('='); + sb.append(((this.metadataSpecification == null)?"":this.metadataSpecification)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.nativeProjectionNames == null)? 0 :this.nativeProjectionNames.hashCode())); + result = ((result* 31)+((this.collectionReference == null)? 0 :this.collectionReference.hashCode())); + result = ((result* 31)+((this.projects == null)? 0 :this.projects.hashCode())); + result = ((result* 31)+((this.dataGranule == null)? 0 :this.dataGranule.hashCode())); + result = ((result* 31)+((this.metadataSpecification == null)? 0 :this.metadataSpecification.hashCode())); + result = ((result* 31)+((this.cloudCover == null)? 0 :this.cloudCover.hashCode())); + result = ((result* 31)+((this.tilingIdentificationSystem == null)? 0 :this.tilingIdentificationSystem.hashCode())); + result = ((result* 31)+((this.orbitCalculatedSpatialDomains == null)? 0 :this.orbitCalculatedSpatialDomains.hashCode())); + result = ((result* 31)+((this.platforms == null)? 0 :this.platforms.hashCode())); + result = ((result* 31)+((this.granuleUR == null)? 0 :this.granuleUR.hashCode())); + result = ((result* 31)+((this.measuredParameters == null)? 0 :this.measuredParameters.hashCode())); + result = ((result* 31)+((this.providerDates == null)? 0 :this.providerDates.hashCode())); + result = ((result* 31)+((this.relatedUrls == null)? 0 :this.relatedUrls.hashCode())); + result = ((result* 31)+((this.spatialExtent == null)? 0 :this.spatialExtent.hashCode())); + result = ((result* 31)+((this.gridMappingNames == null)? 0 :this.gridMappingNames.hashCode())); + result = ((result* 31)+((this.temporalExtent == null)? 0 :this.temporalExtent.hashCode())); + result = ((result* 31)+((this.accessConstraints == null)? 0 :this.accessConstraints.hashCode())); + result = ((result* 31)+((this.pGEVersionClass == null)? 0 :this.pGEVersionClass.hashCode())); + result = ((result* 31)+((this.additionalAttributes == null)? 0 :this.additionalAttributes.hashCode())); + result = ((result* 31)+((this.inputGranules == null)? 0 :this.inputGranules.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Ummg166) == false) { + return false; + } + Ummg166 rhs = ((Ummg166) other); + return (((((((((((((((((((((this.nativeProjectionNames == rhs.nativeProjectionNames)||((this.nativeProjectionNames!= null)&&this.nativeProjectionNames.equals(rhs.nativeProjectionNames)))&&((this.collectionReference == rhs.collectionReference)||((this.collectionReference!= null)&&this.collectionReference.equals(rhs.collectionReference))))&&((this.projects == rhs.projects)||((this.projects!= null)&&this.projects.equals(rhs.projects))))&&((this.dataGranule == rhs.dataGranule)||((this.dataGranule!= null)&&this.dataGranule.equals(rhs.dataGranule))))&&((this.metadataSpecification == rhs.metadataSpecification)||((this.metadataSpecification!= null)&&this.metadataSpecification.equals(rhs.metadataSpecification))))&&((this.cloudCover == rhs.cloudCover)||((this.cloudCover!= null)&&this.cloudCover.equals(rhs.cloudCover))))&&((this.tilingIdentificationSystem == rhs.tilingIdentificationSystem)||((this.tilingIdentificationSystem!= null)&&this.tilingIdentificationSystem.equals(rhs.tilingIdentificationSystem))))&&((this.orbitCalculatedSpatialDomains == rhs.orbitCalculatedSpatialDomains)||((this.orbitCalculatedSpatialDomains!= null)&&this.orbitCalculatedSpatialDomains.equals(rhs.orbitCalculatedSpatialDomains))))&&((this.platforms == rhs.platforms)||((this.platforms!= null)&&this.platforms.equals(rhs.platforms))))&&((this.granuleUR == rhs.granuleUR)||((this.granuleUR!= null)&&this.granuleUR.equals(rhs.granuleUR))))&&((this.measuredParameters == rhs.measuredParameters)||((this.measuredParameters!= null)&&this.measuredParameters.equals(rhs.measuredParameters))))&&((this.providerDates == rhs.providerDates)||((this.providerDates!= null)&&this.providerDates.equals(rhs.providerDates))))&&((this.relatedUrls == rhs.relatedUrls)||((this.relatedUrls!= null)&&this.relatedUrls.equals(rhs.relatedUrls))))&&((this.spatialExtent == rhs.spatialExtent)||((this.spatialExtent!= null)&&this.spatialExtent.equals(rhs.spatialExtent))))&&((this.gridMappingNames == rhs.gridMappingNames)||((this.gridMappingNames!= null)&&this.gridMappingNames.equals(rhs.gridMappingNames))))&&((this.temporalExtent == rhs.temporalExtent)||((this.temporalExtent!= null)&&this.temporalExtent.equals(rhs.temporalExtent))))&&((this.accessConstraints == rhs.accessConstraints)||((this.accessConstraints!= null)&&this.accessConstraints.equals(rhs.accessConstraints))))&&((this.pGEVersionClass == rhs.pGEVersionClass)||((this.pGEVersionClass!= null)&&this.pGEVersionClass.equals(rhs.pGEVersionClass))))&&((this.additionalAttributes == rhs.additionalAttributes)||((this.additionalAttributes!= null)&&this.additionalAttributes.equals(rhs.additionalAttributes))))&&((this.inputGranules == rhs.inputGranules)||((this.inputGranules!= null)&&this.inputGranules.equals(rhs.inputGranules)))); + } + +} diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/VerticalSpatialDomainType.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/VerticalSpatialDomainType.java index 907ef0e..0c4026f 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/VerticalSpatialDomainType.java +++ b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/VerticalSpatialDomainType.java @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.Map; +import javax.annotation.processing.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; @@ -11,11 +12,12 @@ * This entity contains the type and value for the granule's vertical spatial domain. * */ +@Generated("jsonschema2pojo") public class VerticalSpatialDomainType { @SerializedName("Type") @Expose - private VerticalSpatialDomainType.VerticalSpatialDomainTypeEnum type; + private VerticalSpatialDomainTypeEnum type; /** * Describes the extent of the area of vertical space covered by the granule. Use this for Atmosphere profiles or for a specific value. * @@ -43,13 +45,13 @@ public class VerticalSpatialDomainType { */ @SerializedName("Unit") @Expose - private VerticalSpatialDomainType.Unit unit; + private Unit unit; - public VerticalSpatialDomainType.VerticalSpatialDomainTypeEnum getType() { + public VerticalSpatialDomainTypeEnum getType() { return type; } - public void setType(VerticalSpatialDomainType.VerticalSpatialDomainTypeEnum type) { + public void setType(VerticalSpatialDomainTypeEnum type) { this.type = type; } @@ -105,7 +107,7 @@ public void setMaximumValue(String maximumValue) { * Describes the unit of the vertical extent value. * */ - public VerticalSpatialDomainType.Unit getUnit() { + public Unit getUnit() { return unit; } @@ -113,7 +115,7 @@ public VerticalSpatialDomainType.Unit getUnit() { * Describes the unit of the vertical extent value. * */ - public void setUnit(VerticalSpatialDomainType.Unit unit) { + public void setUnit(Unit unit) { this.unit = unit; } @@ -177,6 +179,7 @@ public boolean equals(Object other) { * Describes the unit of the vertical extent value. * */ + @Generated("jsonschema2pojo") public enum Unit { @SerializedName("Fathoms") @@ -200,10 +203,10 @@ public enum Unit { @SerializedName("InchesOfWater") INCHES_OF_WATER("InchesOfWater"); private final String value; - private final static Map CONSTANTS = new HashMap(); + private final static Map CONSTANTS = new HashMap(); static { - for (VerticalSpatialDomainType.Unit c: values()) { + for (Unit c: values()) { CONSTANTS.put(c.value, c); } } @@ -221,8 +224,8 @@ public String value() { return this.value; } - public static VerticalSpatialDomainType.Unit fromValue(String value) { - VerticalSpatialDomainType.Unit constant = CONSTANTS.get(value); + public static Unit fromValue(String value) { + Unit constant = CONSTANTS.get(value); if (constant == null) { throw new IllegalArgumentException(value); } else { @@ -232,6 +235,7 @@ public static VerticalSpatialDomainType.Unit fromValue(String value) { } + @Generated("jsonschema2pojo") public enum VerticalSpatialDomainTypeEnum { @SerializedName("Atmosphere Layer") @@ -243,10 +247,10 @@ public enum VerticalSpatialDomainTypeEnum { @SerializedName("Depth") DEPTH("Depth"); private final String value; - private final static Map CONSTANTS = new HashMap(); + private final static Map CONSTANTS = new HashMap(); static { - for (VerticalSpatialDomainType.VerticalSpatialDomainTypeEnum c: values()) { + for (VerticalSpatialDomainTypeEnum c: values()) { CONSTANTS.put(c.value, c); } } @@ -264,8 +268,8 @@ public String value() { return this.value; } - public static VerticalSpatialDomainType.VerticalSpatialDomainTypeEnum fromValue(String value) { - VerticalSpatialDomainType.VerticalSpatialDomainTypeEnum constant = CONSTANTS.get(value); + public static VerticalSpatialDomainTypeEnum fromValue(String value) { + VerticalSpatialDomainTypeEnum constant = CONSTANTS.get(value); if (constant == null) { throw new IllegalArgumentException(value); } else { diff --git a/src/main/resources/jsonschema/UMM-G1.6.6.json b/src/main/resources/jsonschema/UMM-G1.6.6.json new file mode 100644 index 0000000..525551c --- /dev/null +++ b/src/main/resources/jsonschema/UMM-G1.6.6.json @@ -0,0 +1,1310 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "title": "UMM-G", + "type": "object", + "additionalProperties": false, + "properties": { + "GranuleUR": { + "description": "The Universal Reference ID of the granule referred by the data provider. This ID is unique per data provider.", + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "ProviderDates": { + "description": "Dates related to activities involving the the granule and the data provider database with the exception for Delete. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository.", + "type": "array", + "items": { + "$ref": "#/definitions/ProviderDateType" + }, + "minItems": 1, + "maxItems": 4, + "uniqueItems":true + }, + "CollectionReference": { + "description": "The collection metadata record's short name and version, or entry title to which this granule metadata record belongs.", + "$ref": "#/definitions/CollectionReferenceType" + }, + "AccessConstraints": { + "description": "Allows the author to constrain access to the granule. Some words that may be used in this element's value include: Public, In-house, Limited, None. The value field is used for special ACL rules (Access Control Lists (http://en.wikipedia.org/wiki/Access_control_list)). For example it can be used to hide metadata when it isn't ready for public consumption.", + "$ref": "#/definitions/AccessConstraintsType" + }, + "DataGranule": { + "description": "This entity stores basic descriptive characteristics associated with a granule.", + "$ref": "#/definitions/DataGranuleType" + }, + "PGEVersionClass": { + "description": "This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule.", + "$ref": "#/definitions/PGEVersionClassType" + }, + "TemporalExtent": { + "description": "This class contains attributes which describe the temporal extent of a granule. Temporal Extent includes either a Range Date Time, or a Single Date Time", + "$ref": "#/definitions/TemporalExtentType" + }, + "SpatialExtent": { + "description": "This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain.", + "$ref": "#/definitions/SpatialExtentType" + }, + "OrbitCalculatedSpatialDomains": { + "description": "This entity is used to store the characteristics of the orbit calculated spatial domain to include the model name, orbit number, start and stop orbit number, equator crossing date and time, and equator crossing longitude.", + "type": "array", + "items": { + "$ref": "#/definitions/OrbitCalculatedSpatialDomainType" + }, + "minItems": 1, + "uniqueItems":true + }, + "MeasuredParameters": { + "description": "This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule.", + "type": "array", + "items": { + "$ref": "#/definitions/MeasuredParameterType" + }, + "minItems": 1, + "uniqueItems":true + }, + "Platforms": { + "description": "A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc.", + "type": "array", + "items": { + "$ref": "#/definitions/PlatformType" + }, + "minItems": 1, + "uniqueItems":true + }, + "Projects": { + "description": "The name of the scientific program, field campaign, or project from which the data were collected. This element is intended for the non-space assets such as aircraft, ground systems, balloons, sondes, ships, etc. associated with campaigns. This element may also cover a long term project that continuously creates new data sets — like MEaSUREs from ISCCP and NVAP or CMARES from MISR. Project also includes the Campaign sub-element to support multiple campaigns under the same project.", + "type": "array", + "items": { + "$ref": "#/definitions/ProjectType" + }, + "minItems": 1, + "uniqueItems": true + }, + "AdditionalAttributes": { + "description": "Reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection.", + "type": "array", + "items": { + "$ref": "#/definitions/AdditionalAttributeType" + }, + "minItems": 1, + "uniqueItems": true + }, + "InputGranules": { + "description": "This entity contains the identification of the input granule(s) for a specific granule.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 500 + }, + "minItems": 1, + "uniqueItems": true + }, + "TilingIdentificationSystem": { + "description": "This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection.", + "$ref": "#/definitions/TilingIdentificationSystemType" + }, + "CloudCover": { + "description": "A percentage value indicating how much of the area of a granule (the EOSDIS data unit) has been obscured by clouds. It is worth noting that there are many different measures of cloud cover within the EOSDIS data holdings and that the cloud cover parameter that is represented in the archive is dataset-specific.", + "type": "number" + }, + "RelatedUrls": { + "description": "This element describes any data/service related URLs that include project home pages, services, related data archives/servers, metadata extensions, direct links to online software packages, web mapping services, links to images, or other data.", + "type": "array", + "items": { + "$ref": "#/definitions/RelatedUrlType" + }, + "minItems": 1 + }, + "NativeProjectionNames": { + "description": "Represents the native projection of the granule if the granule has a native projection.", + "type": "array", + "items": { + "$ref": "#/definitions/ProjectionNameType" + } + }, + "GridMappingNames": { + "description": "Represents the native grid mapping of the granule, if the granule is gridded.", + "type": "array", + "items": { + "$ref": "#/definitions/GridMappingNameType" + } + }, + "MetadataSpecification": { + "description": "Requires the user to add in schema information into every granule record. It includes the schema's name, version, and URL location. The information is controlled through enumerations at the end of this schema.", + "$ref": "#/definitions/MetadataSpecificationType" + } + }, + "required": ["GranuleUR", "ProviderDates", "CollectionReference", "MetadataSpecification"], + + + + "definitions": { + "ProviderDateType": { + "type": "object", + "additionalProperties": false, + "description": "Specifies the date and its type that the provider uses for the granule. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository.", + "properties": { + "Date": { + "description": "This is the date that an event associated with the granule occurred.", + "format": "date-time", + "type": "string" + }, + "Type": { + "description": "This is the type of event associated with the date. For example, Creation or Upate.", + "$ref": "#/definitions/ProviderDateTypeEnum" + } + }, + "required": ["Date", "Type"] + }, + "CollectionReferenceType": { + "type": "object", + "description": "A reference to a collection metadata record's short name and version, or entry title to which this granule metadata record belongs.", + "oneOf": [{ + "additionalProperties": false, + "properties": { + "ShortName": { + "description": "The collection's short name as per the UMM-C.", + "type": "string", + "minLength": 1, + "maxLength": 85 + }, + "Version": { + "description": "The collection's version as per the UMM-C.", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + }, + "required": ["ShortName", "Version"] + }, + { + "additionalProperties": false, + "properties": { + "EntryTitle": { + "description": "The collections entry title as per the UMM-C.", + "type": "string", + "minLength": 1, + "maxLength": 1030 + } + }, + "required": ["EntryTitle"] + }] + }, + "AccessConstraintsType": { + "type": "object", + "additionalProperties": false, + "description": "Information about any physical constraints for accessing the data set.", + "properties": { + "Description": { + "description": "Free-text description of the constraint. In ECHO 10, this field is called RestrictionComment. Additional detailed instructions on how to access the granule data may be entered in this field.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "Value": { + "description": "Numeric value that is used with Access Control Language (ACLs) to restrict access to this granule. For example, a provider might specify a granule level ACL that hides all granules with a value element set to 15. In ECHO, this field is called RestrictionFlag.", + "type": "number" + } + }, + "required": ["Value"] + }, + "DataGranuleType": { + "type": "object", + "additionalProperties": false, + "description": "This entity stores the basic descriptive characteristics associated with a granule.", + "properties": { + "ArchiveAndDistributionInformation": { + "description": "A list of the file(s) or file package(s) that make up the granule. A file package is something like a tar or zip file.", + "type": "array", + "items": { + "$ref": "#/definitions/ArchiveAndDistributionInformationType" + }, + "minItems": 1, + "uniqueItems":true + }, + "ReprocessingPlanned": { + "description": "Granule level, stating what reprocessing may be performed on this granule.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ReprocessingActual": { + "description": "Granule level, stating what reprocessing has been performed on this granule.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DayNightFlag": { + "description": "This attribute is used to identify if a granule was collected during the day, night (between sunset and sunrise) or both.", + "type": "string", + "enum": ["Day", "Night", "Both", "Unspecified"] + }, + "ProductionDateTime": { + "description": "The date and time a specific granule was produced by a PGE.", + "format": "date-time", + "type": "string" + }, + "Identifiers": { + "description": "This holds any granule identifiers the provider wishes to provide.", + "type": "array", + "items": {"$ref": "#/definitions/IdentifierType"}, + "minItems": 1, + "uniqueItems":true + } + }, + "required": ["DayNightFlag", "ProductionDateTime"] + }, + "ArchiveAndDistributionInformationType": { + "description": "This set of elements describes a file package or a file that contains other files. Normally this is either a tar or a zip file.", + "anyOf": [{"$ref": "#/definitions/FilePackageType"}, {"$ref": "#/definitions/FileType"}] + }, + "FilePackageType": { + "type": "object", + "additionalProperties": false, + "description": "This set of elements describes a file package or a file that contains other files. Normally this is either a tar or a zip file.", + "properties": { + "Name": { + "description": "This field describes the name of the actual file.", + "$ref": "#/definitions/FileNameType" + }, + "SizeInBytes": { + "description": "The size in Bytes of the volume of data contained in the granule. Bytes are defined as eight bits. Please use this element instead of or inclusive with the Size element. The issue with the size element is that if CMR data providers use a unit other than Bytes, end users don't know how the granule size was calculated. For example, if the unit was MegaBytes, the size could be calculated by using 1000xE2 Bytes (MegaBytes) or 1024xE2 Bytes (mebibytes) and therefore there is no systematic way to know the actual size of a granule by using the granule metadata record.", + "type": "integer" + }, + "Size": { + "description": "The size of the volume of data contained in the granule. Please use the SizeInBytes element either instead of this one or inclusive of this one. The issue with the size element is that if CMR data providers use a unit other than Bytes, end users don't know how the granule size was calculated. For example, if the unit was MegaBytes, the size could be calculated by using 1000xE2 Bytes (MegaBytes) or 1024xE2 Bytes (mebibytes) and therefore there is no systematic way to know the actual size of a granule by using the granule metadata record.", + "type": "number" + }, + "SizeUnit": { + "description": "The unit of the file size.", + "$ref": "#/definitions/FileSizeUnitEnum" + }, + "Format": { + "description": "This element defines a single format for a distributable artifact.", + "$ref": "#/definitions/DataFormatType" + }, + "MimeType": { + "description": "The mime type of the resource.", + "$ref": "#/definitions/MimeTypeEnum" + }, + "Checksum": { + "description": "Allows the provider to provide the checksum value for the file.", + "$ref": "#/definitions/ChecksumType" + }, + "Files": { + "description": "Allows the provider to add the list of the files that are included in this one.", + "type": "array", + "items": {"$ref": "#/definitions/FileType"}, + "uniqueItems": true, + "minItems": 1 + } + }, + "required": ["Name"], + "dependencies": { + "Size": ["SizeUnit"] + } + }, + "FileType": { + "type": "object", + "additionalProperties": false, + "description": "This set of elements describes a file. The file can be a part of the entire granule or is the granule.", + "properties": { + "Name": { + "description": "This field describes the name of the actual file.", + "$ref": "#/definitions/FileNameType" + }, + "SizeInBytes": { + "description": "The size in Bytes of the volume of data contained in the granule. Bytes are defined as eight bits. Please use this element instead of or inclusive with the Size element. The issue with the size element is that if CMR data providers use a unit other than Bytes, end users don't know how the granule size was calculated. For example, if the unit was MegaBytes, the size could be calculated by using 1000xE2 Bytes (MegaBytes) or 1024xE2 Bytes (mebibytes) and therefore there is no systematic way to know the actual size of a granule by using the granule metadata record.", + "type": "integer" + }, + "Size": { + "description": "The size of the volume of data contained in the granule. Please use the SizeInBytes element either instead of this one or inclusive of this one. The issue with the size element is that if CMR data providers use a unit other than Bytes, end users don't know how the granule size was calculated. For example, if the unit was MegaBytes, the size could be calculated by using 1000xE2 Bytes (MegaBytes) or 1024xE2 Bytes (mebibytes) and therefore there is no systematic way to know the actual size of a granule by using the granule metadata record.", + "type": "number" + }, + "SizeUnit": { + "description": "The unit of the file size.", + "$ref": "#/definitions/FileSizeUnitEnum" + }, + "Format": { + "description": "This element defines a single format for a distributable artifact.", + "$ref": "#/definitions/DataFormatType" + }, + "FormatType": { + "description": "Allows the provider to state whether the distributable item's format is its native format or another supported format.", + "type": "string", + "enum": ["Native", "Supported", "NA"] + }, + "MimeType": { + "description": "The mime type of the resource.", + "$ref": "#/definitions/MimeTypeEnum" + }, + "Checksum": { + "description": "Allows the provider to provide the checksum value for the file.", + "$ref": "#/definitions/ChecksumType" + } + }, + "required": ["Name"], + "dependencies": { + "Size": ["SizeUnit"] + } + }, + "IdentifierType" :{ + "type": "object", + "description": "This entity stores an identifier. If the identifier is part of the enumeration then use it. If the enumeration is 'Other', the provider must specify the identifier's name.", + "oneOf": [{ + "additionalProperties": false, + "properties": { + "Identifier": { + "description": "The identifier value.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "IdentifierType": { + "description": "The enumeration of known identifier types.", + "type": "string", + "enum": ["ProducerGranuleId", "LocalVersionId", "FeatureId", "CRID"] + }, + "IdentifierName": { + "description": "The name of the identifier.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Identifier","IdentifierType"] + }, + { + "additionalProperties": false, + "properties": { + "Identifier": { + "description": "The identifier value.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "IdentifierType": { + "description": "The enumeration of known identifier types.", + "type": "string", + "enum": ["Other"] + }, + "IdentifierName": { + "description": "The Name of identifier.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Identifier","IdentifierType","IdentifierName"] + }] + }, + "PGEVersionClassType": { + "type": "object", + "additionalProperties": false, + "description": "This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule.", + "properties": { + "PGEName": { + "description": "Name of product generation executable.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "PGEVersion": { + "description": "Version of the product generation executable that produced the granule.", + "type": "string", + "minLength": 1, + "maxLength": 50 + } + }, + "required": ["PGEVersion"] + }, + "TemporalExtentType": { + "type": "object", + "description": "Information which describes the temporal extent of a specific granule.", + "oneOf": [{ + "additionalProperties": false, + "properties": { + "RangeDateTime": { + "description": "Stores the data acquisition start and end date/time for a granule.", + "$ref": "#/definitions/RangeDateTimeType" + } + }, + "required": ["RangeDateTime"] + }, { + "additionalProperties": false, + "properties": { + "SingleDateTime": { + "description": "Stores the data acquisition date/time for a granule.", + "format": "date-time", + "type": "string" + } + }, + "required": ["SingleDateTime"] + }] + }, + "RangeDateTimeType": { + "type": "object", + "additionalProperties": false, + "description": "Stores the data acquisition start and end date/time for a granule.", + "properties": { + "BeginningDateTime": { + "description": "The time when the temporal coverage period being described began.", + "format": "date-time", + "type": "string" + }, + "EndingDateTime": { + "description": "The time when the temporal coverage period being described ended.", + "format": "date-time", + "type": "string" + } + }, + "required": ["BeginningDateTime"] + }, + "SpatialExtentType": { + "type": "object", + "additionalProperties": false, + "description": "This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain.", + "properties": { + "GranuleLocalities": { + "description": "This entity stores information used at the granule level to describe the labeling of granules with compounded time/space text values and which are subsequently used to define more phenomenological-based granules, thus the locality type and description are contained.", + "type": "array", + "items": {"$ref": "#/definitions/GranuleLocalityType"}, + "minItems": 1, + "uniqueItems": true + }, + "HorizontalSpatialDomain": { + "description": "This represents the granule horizontal spatial domain information.", + "$ref": "#/definitions/HorizontalSpatialDomainType" + }, + "VerticalSpatialDomains": { + "description": "This represents the domain value and type for the granule's vertical spatial domain.", + "type": "array", + "items": {"$ref": "#/definitions/VerticalSpatialDomainType"}, + "minItems":1, + "uniqueItems":true + } + }, + "anyOf": [{ + "required": ["GranuleLocalities"] + }, { + "required": ["HorizontalSpatialDomain"] + }, { + "required": ["VerticalSpatialDomains"] + }] + }, + "HorizontalSpatialDomainType": { + "type": "object", + "description": "Information about a granule with horizontal spatial coverage.", + "additionalProperties": false, + "properties": { + "ZoneIdentifier": { + "description": "The appropriate numeric or alpha code used to identify the various zones in the granule's grid coordinate system.", + "$ref": "#/definitions/ZoneIdentifierType" + }, + "Geometry": { + "description": "This entity holds the geometry representing the spatial coverage information of a granule.", + "$ref": "#/definitions/GeometryType" + }, + "Orbit": { + "description": "This entity stores orbital coverage information of the granule. This coverage is an alternative way of expressing granule spatial coverage. This information supports orbital backtrack searching on a granule.", + "$ref": "#/definitions/OrbitType" + }, + "Track": { + "description": "This element stores track information of the granule. Track information is used to allow a user to search for granules whose spatial extent is based on an orbital cycle, pass, and tile mapping. Though it is derived from the SWOT mission requirements, it is intended that this element type be generic enough so that other missions can make use of it. While track information is a type of spatial domain, it is expected that the metadata provider will provide geometry information that matches the spatial extent of the track information.", + "$ref": "#/definitions/TrackType" + } + }, + "anyOf": [{ + "required": ["Geometry"] + }, { + "required": ["Orbit"] + }] + }, + "GeometryType": { + "type": "object", + "additionalProperties": false, + "description": "This entity holds the geometry representing the spatial coverage information of a granule.", + "properties": { + "Points": { + "description": "The horizontal spatial coverage of a point.", + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 1, + "uniqueItems": true + }, + "BoundingRectangles": { + "description": "This entity holds the horizontal spatial coverage of a bounding box.", + "type": "array", + "items": { + "$ref": "#/definitions/BoundingRectangleType" + }, + "minItems": 1, + "uniqueItems": true + }, + "GPolygons": { + "description": "A GPolygon specifies an area on the earth represented by a main boundary with optional boundaries for regions excluded from the main boundary.", + "type": "array", + "items": { + "$ref": "#/definitions/GPolygonType" + }, + "minItems": 1, + "uniqueItems": true + }, + "Lines": { + "description": "This entity holds the horizontal spatial coverage of a line. A line area contains at least two points.", + "type": "array", + "items": { + "$ref": "#/definitions/LineType" + }, + "minItems": 1, + "uniqueItems": true + } + }, + "anyOf": [{ + "required": ["Points"] + }, { + "required": ["BoundingRectangles"] + }, { + "required": ["GPolygons"] + }, { + "required": ["Lines"] + }] + }, + "PointType": { + "type": "object", + "additionalProperties": false, + "description": "The longitude and latitude values of a spatially referenced point in degrees.", + "properties": { + "Longitude": { + "$ref": "#/definitions/LongitudeType" + }, + "Latitude": { + "$ref": "#/definitions/LatitudeType" + } + }, + "required": ["Longitude", "Latitude"] + }, + "BoundingRectangleType": { + "type": "object", + "additionalProperties": false, + "description": "This entity holds the horizontal spatial coverage of a bounding box.", + "properties": { + "WestBoundingCoordinate": { + "$ref": "#/definitions/LongitudeType" + }, + "NorthBoundingCoordinate": { + "$ref": "#/definitions/LatitudeType" + }, + "EastBoundingCoordinate": { + "$ref": "#/definitions/LongitudeType" + }, + "SouthBoundingCoordinate": { + "$ref": "#/definitions/LatitudeType" + } + }, + "required": ["WestBoundingCoordinate", "NorthBoundingCoordinate", "EastBoundingCoordinate", "SouthBoundingCoordinate"] + }, + "GPolygonType": { + "type": "object", + "additionalProperties": false, + "description": "A GPolygon specifies an area on the earth represented by a main boundary with optional boundaries for regions excluded from the main boundary.", + "properties": { + "Boundary": { + "$ref": "#/definitions/BoundaryType" + }, + "ExclusiveZone": { + "$ref": "#/definitions/ExclusiveZoneType" + } + }, + "required": ["Boundary"] + }, + "BoundaryType": { + "type": "object", + "additionalProperties": false, + "description": "A boundary is set of points connected by straight lines representing a polygon on the earth. It takes a minimum of three points to make a boundary. Points must be specified in counter-clockwise order and closed (the first and last vertices are the same).", + "properties": { + "Points": { + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 3 + } + }, + "required": ["Points"] + }, + "ExclusiveZoneType": { + "type": "object", + "additionalProperties": false, + "description": "Contains the excluded boundaries from the GPolygon.", + "properties": { + "Boundaries": { + "type": "array", + "items": { + "$ref": "#/definitions/BoundaryType" + }, + "minItems": 1 + } + }, + "required": ["Boundaries"] + }, + "LineType": { + "type": "object", + "additionalProperties": false, + "description": "This entity holds the horizontal spatial coverage of a line. A line area contains at lease two points.", + "properties": { + "Points": { + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 2 + } + }, + "required": ["Points"] + }, + "OrbitType":{ + "type": "object", + "additionalProperties": false, + "description": "This entity stores orbital coverage information of the granule. This coverage is an alternative way of expressing granule spatial coverage. This information supports orbital backtrack searching on a granule.", + "properties": { + "AscendingCrossing": { + "description": "Equatorial crossing on the ascending pass in decimal degrees longitude. The convention we've been using is it's the first included ascending crossing if one is included, and the prior ascending crossing if none is included (e.g. descending half orbits).", + "$ref": "#/definitions/LongitudeType" + }, + "StartLatitude": { + "description": "Granule's starting latitude.", + "$ref": "#/definitions/LatitudeType" + }, + "StartDirection": { + "description": "Ascending or descending. Valid input: 'A' or 'D'", + "$ref": "#/definitions/OrbitDirectionTypeEnum" + }, + "EndLatitude": { + "description": "Granule's ending latitude.", + "$ref": "#/definitions/LatitudeType" + }, + "EndDirection": { + "description": "Ascending or descending. Valid input: 'A' or 'D'", + "$ref": "#/definitions/OrbitDirectionTypeEnum" + } + }, + "required": ["AscendingCrossing", "StartLatitude", "StartDirection", "EndLatitude", "EndDirection"] + }, + "TrackType": { + "type": "object", + "additionalProperties": false, + "description": "This element stores track information of the granule. Track information is used to allow a user to search for granules whose spatial extent is based on an orbital cycle, pass, and tile mapping. Though it is derived from the SWOT mission requirements, it is intended that this element type be generic enough so that other missions can make use of it. While track information is a type of spatial domain, it is expected that the metadata provider will provide geometry information that matches the spatial extent of the track information.", + "properties": { + "Cycle": { + "description": "An integer that represents a specific set of orbital spatial extents defined by passes and tiles. Though intended to be generic, this comes from a SWOT mission requirement where each cycle represents a set of 1/2 orbits. Each 1/2 orbit is called a 'pass'. During science mode, a cycle represents 21 days of 14 full orbits or 588 passes.", + "type": "integer" + }, + "Passes": { + "description": "A pass number identifies a subset of a granule's spatial extent. This element holds a list of pass numbers and their tiles that exist in the granule. It will allow a user to search by pass number and its tiles that are contained with in a cycle number. While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit. This element will then hold a list of 1/2 orbits and their tiles that together represent the granule's spatial extent.", + "type": "array", + "items": { + "$ref": "#/definitions/TrackPassTileType" + }, + "minItems": 1 + } + }, + "required": ["Cycle"] + }, + "TrackPassTileType": { + "type": "object", + "additionalProperties": false, + "description": "This element stores a track pass and its tile information. It will allow a user to search by pass number and their tiles that are contained with in a cycle number. While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit. This element will then hold a list of 1/2 orbits and their tiles that together represent the granules spatial extent.", + "properties": { + "Pass": { + "description": "A pass number identifies a subset of a granule's spatial extent. This element holds a pass number that exists in the granule and will allow a user to search by pass number that is contained within a cycle number. While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit.", + "type": "integer" + }, + "Tiles": { + "description": "A tile is a subset of a pass' spatial extent. This element holds a list of tile identifiers that exist in the granule and will allow a user to search by tile identifier that is contained within a pass number within a cycle number. Though intended to be generic, this comes from a SWOT mission requirement where a tile is a spatial extent that encompasses either a square scanning swath to the left or right of the ground track or a rectangle that includes a full scanning swath both to the left and right of the ground track.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + } + }, + "required": ["Pass"] + }, + "VerticalSpatialDomainType": { + "type": "object", + "additionalProperties": false, + "description": "This entity contains the type and value for the granule's vertical spatial domain.", + "properties": { + "Type": { + "description": "Describes the type of the area of vertical space covered by the granule locality.", + "$ref": "#/definitions/VerticalSpatialDomainTypeEnum" + }, + "Value": { + "description": "Describes the extent of the area of vertical space covered by the granule. Use this for Atmosphere profiles or for a specific value.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "MinimumValue": { + "description": "Describes the extent of the area of vertical space covered by the granule. Use this and MaximumValue to represent a range of values (Min and Max).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "MaximumValue": { + "description": "Describes the extent of the area of vertical space covered by the granule. Use this and MinimumValue to represent a range of values (Min and Max).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Unit": { + "description": "Describes the unit of the vertical extent value.", + "type": "string", + "enum": ["Fathoms", "Feet", "HectoPascals", "Kilometers", "Meters", "Millibars","PoundsPerSquareInch", "Atmosphere", "InchesOfMercury", "InchesOfWater"] + } + }, + "oneOf": [{ + "required": ["Type", "Value"] + }, { + "required":["Type","MinimumValue", "MaximumValue"] + }], + "allOf": [{ + "not": { + "required": ["Value", "MinimumValue"] + } + }, { + "not": { + "required": ["Value", "MaximumValue"] + } + }] + }, + "OrbitCalculatedSpatialDomainType": { + "type": "object", + "additionalProperties": false, + "description": "This entity is used to store the characteristics of the orbit calculated spatial domain to include the model name, orbit number, start and stop orbit number, equator crossing date and time, and equator crossing longitude.", + "properties": { + "OrbitalModelName": { + "description": "The reference to the orbital model to be used to calculate the geo-location of this data in order to determine global spatial extent.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "OrbitNumber": { + "description": "The orbit number to be used in calculating the spatial extent of this data.", + "type": "integer" + }, + "BeginOrbitNumber": { + "description": "Orbit number at the start of the data granule.", + "type": "integer" + }, + "EndOrbitNumber": { + "description": "Orbit number at the end of the data granule.", + "type": "integer" + }, + "EquatorCrossingLongitude": { + "description": "This attribute represents the terrestrial longitude of the descending equator crossing.", + "$ref": "#/definitions/LongitudeType" + }, + "EquatorCrossingDateTime": { + "description": "This attribute represents the date and time of the descending equator crossing.", + "format": "date-time", + "type": "string" + } + }, + "anyOf": [{ + "required": ["OrbitalModelName"] + }, { + "required": ["EquatorCrossingLongitude"] + }, { + "required": ["EquatorCrossingDateTime"] + }, { + "required": ["OrbitNumber"] + }, { + "required": ["BeginOrbitNumber", "EndOrbitNumber"] + }], + "allOf": [{ + "not": { + "required": ["OrbitNumber", "BeginOrbitNumber"] + } + }, { + "not": { + "required": ["OrbitNumber", "EndOrbitNumber"] + } + }] + }, + "MeasuredParameterType": { + "type": "object", + "additionalProperties": false, + "description": "This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule.", + "properties": { + "ParameterName": { + "description": "The measured science parameter expressed in the data granule.", + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "QAStats": { + "description": "The associated quality statistics.", + "$ref": "#/definitions/QAStatsType" + }, + "QAFlags": { + "description": "The associated quality flags.", + "$ref": "#/definitions/QAFlagsType" + } + }, + "required": ["ParameterName"] + }, + "QAStatsType": { + "type": "object", + "additionalProperties": false, + "description": "The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters.", + "properties": { + "QAPercentMissingData": { + "description": "Granule level % missing data. This attribute can be repeated for individual parameters within a granule.", + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "QAPercentOutOfBoundsData": { + "description": "Granule level % out of bounds data. This attribute can be repeated for individual parameters within a granule.", + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "QAPercentInterpolatedData": { + "description": "Granule level % interpolated data. This attribute can be repeated for individual parameters within a granule.", + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "QAPercentCloudCover": { + "description": "This attribute is used to characterize the cloud cover amount of a granule. This attribute may be repeated for individual parameters within a granule. (Note - there may be more than one way to define a cloud or it's effects within a product containing several parameters; i.e. this attribute may be parameter specific).", + "type": "number", + "minimum": 0, + "maximum": 100 + } + }, + "anyOf": [{ + "required": ["QAPercentMissingData"] + }, { + "required": ["QAPercentOutOfBoundsData"] + }, { + "required": ["QAPercentInterpolatedData"] + }, { + "required": ["QAPercentCloudCover"] + }] + }, + "QAFlagsType": { + "type": "object", + "additionalProperties": false, + "description": "The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule.", + "properties": { + "AutomaticQualityFlag": { + "description": "The granule level flag applying generally to the granule and specifically to parameters the granule level. When applied to parameter, the flag refers to the quality of that parameter for the granule (as applicable). The parameters determining whether the flag is set are defined by the developer and documented in the Quality Flag Explanation.", + "type": "string", + "enum": ["Passed", "Failed", "Suspect", "Undetermined"] + }, + "AutomaticQualityFlagExplanation": { + "description": "A text explanation of the criteria used to set automatic quality flag; including thresholds or other criteria.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "OperationalQualityFlag": { + "description": "The granule level flag applying both generally to a granule and specifically to parameters at the granule level. When applied to parameter, the flag refers to the quality of that parameter for the granule (as applicable). The parameters determining whether the flag is set are defined by the developers and documented in the QualityFlagExplanation.", + "type": "string", + "enum": ["Passed", "Failed", "Being Investigated", "Not Investigated", "Inferred Passed", "Inferred Failed", "Suspect", "Undetermined"] + }, + "OperationalQualityFlagExplanation": { + "description": "A text explanation of the criteria used to set operational quality flag; including thresholds or other criteria.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "ScienceQualityFlag": { + "description": "Granule level flag applying to a granule, and specifically to parameters. When applied to parameter, the flag refers to the quality of that parameter for the granule (as applicable). The parameters determining whether the flag is set are defined by the developers and documented in the Quality Flag Explanation.", + "type": "string", + "enum": ["Passed", "Failed", "Being Investigated", "Not Investigated", "Inferred Passed", "Inferred Failed", "Suspect", "Hold", "Undetermined"] + }, + "ScienceQualityFlagExplanation": { + "description": "A text explanation of the criteria used to set science quality flag; including thresholds or other criteria.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "anyOf": [{ + "required": ["AutomaticQualityFlag"] + }, { + "required": ["OperationalQualityFlag"] + }, { + "required": ["ScienceQualityFlag"] + }] + }, + "PlatformType": { + "type": "object", + "additionalProperties": false, + "description": "A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc.", + "properties": { + "ShortName": { + "$ref": "#/definitions/ShortNameType" + }, + "Instruments": { + "description": "References to the devices in the parent collection that were used to measure or record data, including direct human observation.", + "type": "array", + "items": { + "$ref": "#/definitions/InstrumentType" + }, + "minItems": 1 + } + }, + "required": ["ShortName"] + }, + "InstrumentType": { + "type": "object", + "additionalProperties": false, + "description": "A reference to the device in the parent collection that was used to measure or record data, including direct human observation. In cases where instruments have a single composed of child instrument (sensor) or the instrument and composed of child instrument (sensor) are used synonymously (e.g. AVHRR) the both Instrument and composed of child instrument should be recorded. The child instrument information is represented by child entities. The instrument reference may contain granule specific characteristics and operation modes. These characteristics and modes are not checked against the referenced instrument.", + "properties": { + "ShortName": { + "$ref": "#/definitions/ShortNameType" + }, + "Characteristics": { + "description": "This entity is used to define item additional attributes (unprocessed, custom data).", + "type": "array", + "items": { + "$ref": "#/definitions/CharacteristicType" + }, + "minItems": 1, + "uniqueItems": true + }, + "ComposedOf": { + "description": "References to instrument subcomponents in the parent collection's instrument used by various sources in the granule. An instrument subcomponent reference may contain characteristics specific to the granule.", + "type": "array", + "items": { + "$ref": "#/definitions/InstrumentType" + }, + "minItems": 1, + "uniqueItems": true + }, + "OperationalModes": { + "description": "This entity identifies the instrument's operational modes for a specific collection associated with the channel, wavelength, and FOV (e.g., launch, survival, initialization, safe, diagnostic, standby, crosstrack, biaxial, solar calibration).", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 20 + }, + "minItems": 1, + "uniqueItems": true + } + }, + "required": ["ShortName"] + }, + "CharacteristicType": { + "type": "object", + "additionalProperties": false, + "description": "This entity is used to reference characteristics defined in the parent collection.", + "properties": { + "Name": { + "description": "The name of the characteristic attribute.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Value": { + "description": "The value of the Characteristic attribute.", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + }, + "required": ["Name", "Value"] + }, + "ProjectType": { + "type": "object", + "additionalProperties": false, + "description": "Information describing the scientific endeavor with which the granule is associated.", + "properties": { + "ShortName": { + "description": "The unique identifier by which a project is known. The project is the scientific endeavor associated with the acquisition of the collection.", + "type": "string", + "minLength": 1, + "maxLength": 40 + }, + "Campaigns": { + "description": "The name of the campaign/experiment (e.g. Global climate observing system).", + "type": "array", + "items": { + "$ref": "#/definitions/CampaignType" + }, + "minItems": 1, + "uniqueItems": true + } + }, + "required": ["ShortName"] + }, + "CampaignType": { + "description": "Information describing campaign names with which the granule is associated.", + "type": "string", + "minLength": 1, + "maxLength": 40 + }, + "AdditionalAttributeType": { + "type": "object", + "additionalProperties": false, + "description": "A reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection.", + "properties": { + "Name": { + "description": "The additional attribute's name.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Values": { + "description": "Values of the additional attribute.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 500 + }, + "minItems": 1 + } + }, + "required": ["Name", "Values"] + }, + "TilingIdentificationSystemType": { + "type": "object", + "additionalProperties": false, + "description": "This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection.", + "properties": { + "TilingIdentificationSystemName": { + "$ref": "#/definitions/TilingIdentificationSystemNameEnum" + }, + "Coordinate1": { + "$ref": "#/definitions/TilingCoordinateType" + }, + "Coordinate2": { + "$ref": "#/definitions/TilingCoordinateType" + } + }, + "required": ["TilingIdentificationSystemName", "Coordinate1", "Coordinate2"] + }, + "TilingCoordinateType": { + "type": "object", + "additionalProperties": false, + "description": "Defines the minimum and maximum value for one dimension of a two dimensional coordinate system.", + "properties": { + "MinimumValue": { + "type": "number" + }, + "MaximumValue": { + "type": "number" + } + }, + "required": ["MinimumValue"] + }, + "RelatedUrlType": { + "type": "object", + "additionalProperties": false, + "description": "This entity holds all types of online URL associated with the granule such as guide document or ordering site etc.", + "properties": { + "URL": { + "description": "The URL for the relevant resource.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Type": { + "description": "A keyword describing the type of the online resource to this resource.", + "$ref": "#/definitions/RelatedUrlTypeEnum" + }, + "Subtype": { + "description": "A keyword that provides more detailed information than Type of the online resource to this resource. For example if the Type=VIEW RELATED INFORMATION then the Subtype can be USER'S GUIDE or GENERAL DOCUMENTATION", + "$ref": "#/definitions/RelatedUrlSubTypeEnum" + }, + "Description": { + "description": "Description of the web page at this URL.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "Format": { + "description": "The format of the resource.", + "$ref": "#/definitions/DataFormatType" + }, + "MimeType": { + "description": "The mime type of the resource.", + "$ref": "#/definitions/MimeTypeEnum" + }, + "Size": { + "description": "The size of the resource.", + "type": "number" + }, + "SizeUnit": { + "description": "Unit of information, together with Size determines total size in bytes of the resource.", + "$ref": "#/definitions/FileSizeUnitEnum" + } + }, + "required": ["URL", "Type"], + "dependencies": { + "Size": ["SizeUnit"] + } + }, + "ChecksumType": { + "type": "object", + "additionalProperties": false, + "description": "Allows the provider to provide a checksum value and checksum algorithm name to allow the user to calculate the checksum.", + "properties": { + "Value": { + "description": "Describes the checksum value for a file.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "Algorithm": { + "description": "The algorithm name by which the checksum was calulated. This allows the user to re-calculate the checksum to verify the integrity of the downloaded data.", + "type": "string", + "enum": ["Adler-32", "BSD checksum", "Fletcher-32", "Fletcher-64", "MD5", "POSIX", "SHA-1", "SHA-2", "SHA-256", "SHA-384", "SHA-512", "SM3", "SYSV"] + } + }, + "required": ["Value", "Algorithm"] + }, + "ProjectionNameType": { + "description": "Represents the native projection of the granule if the granule has a native projection. The projection name must match the projection that has been defined in the parent collection.", + "type": "string", + "enum": ["Geographic", "Mercator", "Spherical Mercator", "Space Oblique Mercator", "Universal Transverse Mercator", "Military Grid Reference", "MODIS Sinusoidal System", "Sinusoidal", "Lambert Equal Area", "NSIDC EASE Grid North and South (Lambert EA)", "NSIDC EASE Grid Global", "EASE Grid 2.0 N. Polar", "Plate Carree", "Polar Stereographic", "WELD Albers Equal Area", "Canadian Albers Equal Area Conic", "Lambert Conformal Conic", "State Plane Coordinates", "Albers Equal Area Conic", "Transverse Mercator", "Lambert Azimuthal Equal Area", "UTM Northern Hemisphere", "NAD83 / UTM zone 17N", "UTM Southern Hemisphere", "Cylindrical"] + }, + "GridMappingNameType": { + "description": "Represents the native grid mapping of the granule, if the granule is gridded. The grid name must match a grid that has been defined in the parent collection.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ProviderDateTypeEnum": { + "description": "The types of dates that a metadata record can have.", + "type": "string", + "enum": ["Create", "Insert", "Update", "Delete"] + }, + "FileNameType": { + "description": "This field describes the name of the actual file.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "FileSizeUnitEnum": { + "description": "The unit of the file size.", + "type": "string", + "enum": ["KB", "MB", "GB", "TB", "PB", "NA"] + }, + "DistributionMediaType": { + "description": "This element defines the media by which the end user can obtain the distributable item. Each media type is listed separately. Examples of media include: CD-ROM, 9 track tape, diskettes, hard drives, online, transparencies, hardcopy, etc.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "GranuleLocalityType" :{ + "description": "Provides name which spatial/temporal entity is known. This could change on a granule by granule basis. This attribute is paralleled by the AggregationType which applies at the collection level although locality has a more restricted usage. Several locality measures could be included in each granule.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "LatitudeType": { + "description": "The latitude value of a spatially referenced point, in degrees. Latitude values range from -90 to 90.", + "type": "number", + "minimum": -90, + "maximum": 90 + }, + "LongitudeType": { + "description": "The longitude value of a spatially referenced point, in degrees. Longitude values range from -180 to 180.", + "type": "number", + "minimum": -180, + "maximum": 180 + }, + "OrbitDirectionTypeEnum": { + "description": "Orbit start and end direction. A for ascending orbit and D for descending.", + "type": "string", + "enum": ["A", "D"] + }, + "ZoneIdentifierType": { + "description": "The appropriate numeric or alpha code used to identify the various zones in the granule's grid coordinate system.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "VerticalSpatialDomainTypeEnum": { + "type": "string", + "enum": ["Atmosphere Layer","Pressure", "Altitude", "Depth"] + }, + "ShortNameType": { + "description": "The unique name of the platform or instrument.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "TilingIdentificationSystemNameEnum": { + "type": "string", + "enum": ["CALIPSO", "MISR", "MODIS Tile EASE", "MODIS Tile SIN", "SMAP Tile EASE", "WELD Alaska Tile", "WELD CONUS Tile", "WRS-1", "WRS-2"] + }, + "RelatedUrlTypeEnum": { + "type": "string", + "enum": ["DOWNLOAD SOFTWARE", "EXTENDED METADATA", "GET DATA", "GET DATA VIA DIRECT ACCESS", "GET RELATED VISUALIZATION", "GOTO WEB TOOL", "PROJECT HOME PAGE", "USE SERVICE API", "VIEW RELATED INFORMATION"] + }, + "RelatedUrlSubTypeEnum": { + "type": "string", + "enum": ["BROWSE IMAGE SOURCE", "MOBILE APP", "APPEARS", "DATA COLLECTION BUNDLE", "DATA TREE", "DATACAST URL", "DIRECT DOWNLOAD", "EOSDIS DATA POOL", "Earthdata Search", "GIOVANNI", "GoLIVE Portal", + "IceBridge Portal", "LAADS", "LANCE", "MIRADOR", "MODAPS", "NOAA CLASS", "NOMADS", "Order", "PORTAL", "Subscribe", "USGS EARTH EXPLORER", "VERTEX", "VIRTUAL COLLECTION", + "MAP", "WORLDVIEW", "LIVE ACCESS SERVER (LAS)", "MAP VIEWER", "SIMPLE SUBSET WIZARD (SSW)", "SUBSETTER", "GRADS DATA SERVER (GDS)", "MAP SERVICE", "OPENDAP DATA", + "OpenSearch", "SERVICE CHAINING", "TABULAR DATA STREAM (TDS)", "THREDDS DATA", "WEB COVERAGE SERVICE (WCS)", "WEB FEATURE SERVICE (WFS)", "WEB MAP SERVICE (WMS)", + "WEB MAP TILE SERVICE (WMTS)", "ALGORITHM DOCUMENTATION", "ALGORITHM THEORETICAL BASIS DOCUMENT (ATBD)", "ANOMALIES", "CASE STUDY", "DATA CITATION POLICY", "DATA QUALITY", + "DATA RECIPE", "DELIVERABLES CHECKLIST", "GENERAL DOCUMENTATION", "HOW-TO", "IMPORTANT NOTICE","INSTRUMENT/SENSOR CALIBRATION DOCUMENTATION", "MICRO ARTICLE", + "PI DOCUMENTATION", "PROCESSING HISTORY", "PRODUCT HISTORY", "PRODUCT QUALITY ASSESSMENT", "PRODUCT USAGE", "PRODUCTION HISTORY", "PUBLICATIONS", "READ-ME", + "REQUIREMENTS AND DESIGN", "SCIENCE DATA PRODUCT SOFTWARE DOCUMENTATION", "SCIENCE DATA PRODUCT VALIDATION", "USER FEEDBACK PAGE", "USER'S GUIDE", + "DMR++", "DMR++ MISSING DATA"] + }, + "MimeTypeEnum": { + "type": "string", + "enum": ["application/json", "application/xml", "application/x-netcdf", "application/x-hdfeos", "application/gml+xml", + "application/vnd.google-earth.kml+xml", "image/gif", "image/tiff", "image/bmp", "text/csv", + "text/xml", "application/pdf", "application/x-hdf", "application/x-hdf5", + "application/octet-stream", "application/vnd.google-earth.kmz", "image/jpeg", "image/png", + "image/vnd.collada+xml", "text/html", "text/plain", "application/zip", "application/gzip", "application/tar", + "application/tar+gzip", "application/tar+zip", "application/vnd.opendap.dap4.dmrpp+xml", "Not provided"] + }, + "DataFormatType": { + "description": "The format that granule data confirms to. While the value is listed as open to any text, CMR requires that it confirm to one of the values on the GranuleDataFormat values in the Keyword Management System: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/GranuleDataFormat", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "MetadataSpecificationType": + { + "type": "object", + "additionalProperties": false, + "description": "This object requires any metadata record that is validated by this schema to provide information about the schema.", + "properties": { + "URL": { + "description": "This element represents the URL where the schema lives. The schema can be downloaded.", + "type": "string", + "enum": ["https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6"] + }, + "Name": { + "description": "This element represents the name of the schema.", + "type": "string", + "enum": ["UMM-G"] + }, + "Version": { + "description": "This element represents the version of the schema.", + "type": "string", + "enum": ["1.6.6"] + } + }, + "required": ["URL", "Name", "Version"] + } + } +} \ No newline at end of file diff --git a/src/test/java/gov/nasa/cumulus/metadata/test/MetadataAggregatorLambdaTest.java b/src/test/java/gov/nasa/cumulus/metadata/test/MetadataAggregatorLambdaTest.java index 6648be2..0b2d78a 100644 --- a/src/test/java/gov/nasa/cumulus/metadata/test/MetadataAggregatorLambdaTest.java +++ b/src/test/java/gov/nasa/cumulus/metadata/test/MetadataAggregatorLambdaTest.java @@ -1,8 +1,11 @@ package gov.nasa.cumulus.metadata.test; import gov.nasa.cumulus.metadata.aggregator.MetadataAggregatorLambda; +import gov.nasa.cumulus.metadata.aggregator.bo.TaskConfigBO; +import gov.nasa.cumulus.metadata.aggregator.factory.TaskConfigFactory; import gov.nasa.cumulus.metadata.state.MENDsIsoXMLSpatialTypeEnum; import org.json.simple.JSONArray; +import org.json.simple.JSONObject; import org.json.simple.parser.ParseException; import org.junit.Before; import org.junit.Test; @@ -41,23 +44,17 @@ public void testGetConceptId() throws ParseException { assertEquals(conceptId, "G1238611022-POCUMULUS"); } - @Test - public void testGetIsoXMLSpatialTypeStr() { - MetadataAggregatorLambda lambda = new MetadataAggregatorLambda(); - assertEquals(lambda.getIsoXMLSpatialTypeStr("footprint"), "footprint"); - assertEquals(lambda.getIsoXMLSpatialTypeStr("orbit"), "orbit"); - assertEquals(lambda.getIsoXMLSpatialTypeStr("bbox"), "bbox"); - assertEquals(lambda.getIsoXMLSpatialTypeStr("xxxx"), ""); - } - @Test public void testCreateIsoXMLSpatialTypeSet() { MetadataAggregatorLambda lambda = new MetadataAggregatorLambda(); org.json.simple.JSONArray array = new JSONArray(); array.add("footprint"); array.add("orbit"); + JSONObject config = new JSONObject(); + config.put("isoXMLSpatialType", array); + TaskConfigBO taskConfigBO = TaskConfigFactory.createTaskConfigBO(config); //HashSet h = lambda.createIsoXMLSpatialTypeSet("[footprint,orbit]"); - HashSet h = lambda.createIsoXMLSpatialTypeSet(array); + HashSet h = taskConfigBO.getIsoXMLSpatialTypeHashSet(); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.FOOTPRINT)); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.ORBIT)); assertFalse(h.contains(MENDsIsoXMLSpatialTypeEnum.BBOX)); @@ -69,8 +66,10 @@ public void testCreateIsoXMLSpatialTypeSet() { array.add("bbox"); array.add("eebb"); array.add("ccmm"); - //h = lambda.createIsoXMLSpatialTypeSet("[footprint,orbit,bbox,eebb,ccmm]"); - h = lambda.createIsoXMLSpatialTypeSet(array); + config = new JSONObject(); + config.put("isoXMLSpatialType", array); + taskConfigBO = TaskConfigFactory.createTaskConfigBO(config); + h = taskConfigBO.getIsoXMLSpatialTypeHashSet(); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.FOOTPRINT)); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.ORBIT)); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.BBOX)); diff --git a/src/test/java/gov/nasa/cumulus/metadata/test/MetadataFilesToEchoTest.java b/src/test/java/gov/nasa/cumulus/metadata/test/MetadataFilesToEchoTest.java index 77673c4..4ffd528 100644 --- a/src/test/java/gov/nasa/cumulus/metadata/test/MetadataFilesToEchoTest.java +++ b/src/test/java/gov/nasa/cumulus/metadata/test/MetadataFilesToEchoTest.java @@ -14,6 +14,8 @@ import com.google.gson.GsonBuilder; import gov.nasa.cumulus.metadata.aggregator.*; +import gov.nasa.cumulus.metadata.aggregator.bo.TaskConfigBO; +import gov.nasa.cumulus.metadata.aggregator.factory.TaskConfigFactory; import gov.nasa.cumulus.metadata.state.MENDsIsoXMLSpatialTypeEnum; import gov.nasa.cumulus.metadata.umm.adapter.UMMGCollectionAdapter; import gov.nasa.cumulus.metadata.umm.adapter.UMMGListAdapter; @@ -994,6 +996,7 @@ public void testCreateJsonSwotCalVal() throws IOException, ParseException, XPath // load pre-saved file and perform json comparison assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/swotCalVal/SWOTCalVal_WM_ADCP_L0_RiverRay1_20220727T191701_20220727T192858_20220920T142800_swotCalVal_ummg.json", granule)); } + @Test public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseException, XPathExpressionException, ParserConfigurationException, SAXException, URISyntaxException { // Create isoXmlSpatial Hashtable which contains footprint, orbit then passed the hashtable to MetadataFilesToEcho contructor @@ -1002,8 +1005,10 @@ public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseE array.add("footprint"); array.add("orbit"); array.add("bbox"); - - HashSet h = lambda.createIsoXMLSpatialTypeSet(array); + JSONObject config = new JSONObject(); + config.put("isoXMLSpatialType", array); + TaskConfigBO taskConfigBO = TaskConfigFactory.createTaskConfigBO(config); + HashSet h = taskConfigBO.getIsoXMLSpatialTypeHashSet(); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.FOOTPRINT)); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.ORBIT)); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.BBOX)); @@ -1068,7 +1073,10 @@ public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseE */ clearVariables4IsoXMLSpatialTest(array, h, granule); // clear variables first array.add("footprint"); - h = lambda.createIsoXMLSpatialTypeSet(array); + config = new JSONObject(); + config.put("isoXMLSpatialType", array); + taskConfigBO = TaskConfigFactory.createTaskConfigBO(config); + h = taskConfigBO.getIsoXMLSpatialTypeHashSet(); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.FOOTPRINT)); assertFalse(h.contains(MENDsIsoXMLSpatialTypeEnum.ORBIT)); assertFalse(h.contains(MENDsIsoXMLSpatialTypeEnum.BBOX)); @@ -1118,7 +1126,10 @@ public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseE */ clearVariables4IsoXMLSpatialTest(array, h, granule); // clear variables first array.add("bbox"); - h = lambda.createIsoXMLSpatialTypeSet(array); + config = new JSONObject(); + config.put("isoXMLSpatialType", array); + taskConfigBO = TaskConfigFactory.createTaskConfigBO(config); + h=taskConfigBO.getIsoXMLSpatialTypeHashSet(); assertFalse(h.contains(MENDsIsoXMLSpatialTypeEnum.FOOTPRINT)); assertFalse(h.contains(MENDsIsoXMLSpatialTypeEnum.ORBIT)); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.BBOX)); @@ -1158,7 +1169,10 @@ public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseE */ clearVariables4IsoXMLSpatialTest(array, h, granule); // clear variables first array.add("orbit"); - h = lambda.createIsoXMLSpatialTypeSet(array); + config = new JSONObject(); + config.put("isoXMLSpatialType", array); + taskConfigBO = TaskConfigFactory.createTaskConfigBO(config); + h=taskConfigBO.getIsoXMLSpatialTypeHashSet(); assertFalse(h.contains(MENDsIsoXMLSpatialTypeEnum.FOOTPRINT)); assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.ORBIT)); assertFalse(h.contains(MENDsIsoXMLSpatialTypeEnum.BBOX)); @@ -1193,10 +1207,10 @@ public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseE // load pre-saved file and perform json comparison assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_orbit.json", granule)); } - private void clearVariables4IsoXMLSpatialTest(JSONArray isoXMLSpatialArray, HashSet isoXMLSpatialHashSet, JSONObject granule) { isoXMLSpatialArray.clear(); isoXMLSpatialHashSet.clear(); granule.clear(); } + } \ No newline at end of file diff --git a/src/test/java/gov/nasa/cumulus/metadata/test/TaskConfigFactoryTest.java b/src/test/java/gov/nasa/cumulus/metadata/test/TaskConfigFactoryTest.java new file mode 100644 index 0000000..fa2936a --- /dev/null +++ b/src/test/java/gov/nasa/cumulus/metadata/test/TaskConfigFactoryTest.java @@ -0,0 +1,84 @@ +package gov.nasa.cumulus.metadata.test; + +import gov.nasa.cumulus.metadata.aggregator.MetadataAggregatorLambda; +import gov.nasa.cumulus.metadata.aggregator.factory.TaskConfigFactory; +import gov.nasa.cumulus.metadata.state.MENDsIsoXMLSpatialTypeEnum; +import org.apache.commons.lang3.StringUtils; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.junit.Test; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class TaskConfigFactoryTest { + + @Test + public void testGetIsoXMLSpatialTypeStr() { + assertEquals(TaskConfigFactory.getIsoXMLSpatialTypeStr("footprint"), "footprint"); + assertEquals(TaskConfigFactory.getIsoXMLSpatialTypeStr("orbit"), "orbit"); + assertEquals(TaskConfigFactory.getIsoXMLSpatialTypeStr("bbox"), "bbox"); + assertEquals(TaskConfigFactory.getIsoXMLSpatialTypeStr("xxxx"), ""); + } + + @Test + public void testCreateIsoXMLSpatialTypeSet() { + org.json.simple.JSONArray array = new JSONArray(); + array.add("footprint"); + array.add("orbit"); + HashSet h = TaskConfigFactory.createIsoXMLSpatialTypeSet(array); + assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.FOOTPRINT)); + assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.ORBIT)); + assertFalse(h.contains(MENDsIsoXMLSpatialTypeEnum.BBOX)); + assertFalse(h.contains(MENDsIsoXMLSpatialTypeEnum.NONE)); + + array.clear(); + array.add("footprint"); + array.add("orbit"); + array.add("bbox"); + array.add("eebb"); + array.add("ccmm"); + //h = lambda.createIsoXMLSpatialTypeSet("[footprint,orbit,bbox,eebb,ccmm]"); + h = TaskConfigFactory.createIsoXMLSpatialTypeSet(array); + assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.FOOTPRINT)); + assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.ORBIT)); + assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.BBOX)); + assertTrue(h.contains(MENDsIsoXMLSpatialTypeEnum.NONE)); + // last 2 items in the input array will result in NONE added into the HashSet and overwite each other + assertTrue(h.size()==4); + } + + @Test + public void testCreateSubTypeHashArray() throws FileNotFoundException, ParseException, IOException { + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("collection_config/OPERA_L3_DSWX-S1_PROVISIONAL_V0.json").getFile()); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(new FileReader(file.getAbsolutePath())); + JSONObject collectionJSONObject = (JSONObject) obj; + // extract the relatedUrlSubTypeMap from collection configuration meta structure + JSONArray subTypeHasyArrayJson = (JSONArray)(((JSONObject)(collectionJSONObject.get("meta"))).get("relatedUrlSubTypeMap")); + ArrayList> subTypeHashArray = TaskConfigFactory.createSubTypeHashArray(subTypeHasyArrayJson); + HashMap subTypeHash = subTypeHashArray.get(0); + String regexStr = subTypeHash.get("regex"); + String subTypeStr = subTypeHash.get("subType"); + assertTrue(StringUtils.equals(regexStr, "^.*_B01_WTR\\.tif$")); + assertTrue(StringUtils.equals(subTypeStr, "BROWSE IMAGE SOURCE")); + subTypeHash = subTypeHashArray.get(1); + regexStr = subTypeHash.get("regex"); + subTypeStr = subTypeHash.get("subType"); + assertTrue(StringUtils.equals(regexStr, "^.*_B02_BWTR\\.tif$")); + assertTrue(StringUtils.equals(subTypeStr, "IceBridge Portal")); + } +} diff --git a/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java b/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java index cbca1d3..3b16525 100644 --- a/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java +++ b/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java @@ -6,6 +6,7 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.math.BigDecimal; import java.net.URISyntaxException; import java.text.DecimalFormat; import java.util.ArrayList; @@ -117,7 +118,7 @@ public void testIsoRequiredFields() throws IOException, ParseException, XPathExp fail("Did not find exactly one Insert and one Update field in ProviderDates"); } assertNotNull(umm.get("MetadataSpecification")); - testMetadataSpec(umm, "1.6.5"); + testMetadataSpec(umm, "1.6.6"); // These tests are based on testCollection.config, and will need // to be changed if the test resource changes. JSONObject cr = (JSONObject)umm.get("CollectionReference"); @@ -530,10 +531,10 @@ public void testSentinelManifestL0TooFewCoordinates() //Geometry/BoundingRectangles JSONObject gbbx = (JSONObject)boundingCoordinates.get(0); - assertEquals(gbbx.get("WestBoundingCoordinate"), Double.valueOf(-180)); - assertEquals(gbbx.get("SouthBoundingCoordinate"), Double.valueOf(-90.00)); - assertEquals(gbbx.get("EastBoundingCoordinate"), Double.valueOf(180.00)); - assertEquals(gbbx.get("NorthBoundingCoordinate"), Double.valueOf(90.00)); + assertEquals(gbbx.get("WestBoundingCoordinate"), BigDecimal.valueOf(-180.0)); + assertEquals(gbbx.get("SouthBoundingCoordinate"), BigDecimal.valueOf(-90.00)); + assertEquals(gbbx.get("EastBoundingCoordinate"), BigDecimal.valueOf(180.00)); + assertEquals(gbbx.get("NorthBoundingCoordinate"), BigDecimal.valueOf(90.00)); } @Test @@ -595,11 +596,11 @@ public void testSentinelManifestIDLErrorCase() Object firstBoundBoxObj = ((JSONArray)geom.get("BoundingRectangles")).get(0); JSONObject bouningdbox = (JSONObject)firstBoundBoxObj; - assertEquals(Double.valueOf(-180.0), ((Double) bouningdbox.get("WestBoundingCoordinate"))); - assertEquals(Double.valueOf(-90.0), ((Double) bouningdbox.get("SouthBoundingCoordinate"))); + assertEquals(BigDecimal.valueOf(-180.0), ((BigDecimal) bouningdbox.get("WestBoundingCoordinate"))); + assertEquals(BigDecimal.valueOf(-90.0), ((BigDecimal) bouningdbox.get("SouthBoundingCoordinate"))); - assertEquals(Double.valueOf(180.0), ((Double) bouningdbox.get("EastBoundingCoordinate"))); - assertEquals(Double.valueOf(90.0), ((Double) bouningdbox.get("NorthBoundingCoordinate"))); + assertEquals(BigDecimal.valueOf(180.0), ((BigDecimal) bouningdbox.get("EastBoundingCoordinate"))); + assertEquals(BigDecimal.valueOf(90.0), ((BigDecimal) bouningdbox.get("NorthBoundingCoordinate"))); } @Test @@ -842,13 +843,23 @@ private JSONObject parseXfduManifest(String testFile, String testConfigFile, Str mtfe.readSentinelManifest(testFilePath); mtfe.getGranule().setName(granuleId); - //write UMM-G to file - mtfe.writeJson(testDir + "/" + granuleId + ".cmr.json"); + JSONObject granuleJson = mtfe.createJson(); + return granuleJson; +// //write UMM-G to file +// mtfe.writeJson(testDir + "/" + granuleId + ".cmr.json"); +// +// //the CMR file should have the following values... +// JSONParser parser = new JSONParser(); +// Object obj = parser.parse(new FileReader(testDir + "/" + granuleId + ".cmr.json")); +// return (JSONObject) obj; + } - //the CMR file should have the following values... - JSONParser parser = new JSONParser(); - Object obj = parser.parse(new FileReader(testDir + "/" + granuleId + ".cmr.json")); - return (JSONObject) obj; + @Test + public void testStringMatch() { + String regex = "^.*_B02_BWTR\\.tif$"; + String s3File = "s3://src/test/resources/tester/asdaffaf_B02_BWTR.tif"; + boolean matched = s3File.matches(regex); + System.out.println("matched? " + matched); } diff --git a/src/test/resources/collection_config/OPERA_L3_DSWX-S1_PROVISIONAL_V0.json b/src/test/resources/collection_config/OPERA_L3_DSWX-S1_PROVISIONAL_V0.json new file mode 100644 index 0000000..4add009 --- /dev/null +++ b/src/test/resources/collection_config/OPERA_L3_DSWX-S1_PROVISIONAL_V0.json @@ -0,0 +1,115 @@ +{ + "name": "OPERA_L3_DSWX-S1_PROVISIONAL_V0", + "version": "0.0", + "url_path": "{cmrMetadata.CollectionReference.ShortName}", + "duplicateHandling": "replace", + "granuleId": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*$", + "granuleIdExtraction": "^(OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*)((\\.tif)|(.*\\.md5)|(\\.cmr\\.json)|(\\.iso\\.xml)|(\\.png))?$", + "reportToEms": true, + "sampleFileName": "OPERA_L3_DSWx-S1_T18MXA_20210905T143156Z_20220131T215426Z_S1A_30_v0.1.tif", + "files": [ + { + "type": "data", + "regex": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.tif$", + "bucket": "protected", + "reportToEms": true, + "sampleFileName": "OPERA_L3_DSWx-S1_T18MXA_20210905T143156Z_20220131T215426Z_S1A_30_v0.1.tif" + }, + { + "type": "metadata", + "regex": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.cmr\\.json$", + "bucket": "private", + "reportToEms": true, + "sampleFileName": "OPERA_L3_DSWx-S1_T18MXA_20210905T143156Z_20220131T215426Z_S1A_30_v0.1.cmr.json" + }, + { + "type": "metadata", + "regex": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.iso\\.xml$", + "bucket": "public", + "reportToEms": true, + "sampleFileName": "OPERA_L3_DSWx-S1_T18MXA_20210905T143156Z_20220131T215426Z_S1A_30_v0.1.iso.xml" + }, + { + "type": "browse", + "regex": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.png$", + "bucket": "public", + "reportToEms": true, + "sampleFileName": "OPERA_L3_DSWx-S1_T18MXA_20210905T143156Z_20220131T215426Z_S1A_30_v0.1.png" + }, + { + "type": "metadata", + "regex": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.tif\\.md5$", + "bucket": "public", + "checksumFor": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.tif$", + "reportToEms": true, + "sampleFileName": "OPERA_L3_DSWx-S1_T18MXA_20210905T143156Z_20220131T215426Z_S1A_30_v0.1.tif.md5" + }, + { + "type": "metadata", + "regex": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.iso\\.xml\\.md5$", + "bucket": "public", + "checksumFor": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.iso\\.xml$", + "reportToEms": true, + "sampleFileName": "OPERA_L3_DSWx-S1_T18MXA_20210905T143156Z_20220131T215426Z_S1A_30_v0.1.iso.xml.md5" + }, + { + "type": "metadata", + "regex": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.png\\.md5$", + "bucket": "public", + "checksumFor": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.png$", + "reportToEms": true, + "sampleFileName": "OPERA_L3_DSWx-S1_T18MXA_20210905T143156Z_20220131T215426Z_S1A_30_v0.1.png.md5" + } + ], + "updatedAt": 1714698389216, + "meta": { + "iso-regex": "^OPERA_L3_DSWx-S1_.*v([0-9]*)\\.([0-9]*).*\\.iso\\.xml$", + "isoXmlSpatial": [ + "bbox" + ], + "glacier-bucket": "podaac-uat-cumulus-glacier", + "workflowChoice": { + "dmrpp": false, + "glacier": true, + "compressed": false, + "convertNetCDF": false, + "readDataFileForMetadata": false + }, + "response-endpoint": [ + "arn:aws:sns:us-west-2:065089468788:dyen-cumulus-provider-response-sns" + ], + "additionalAttributes": { + "publish": [ + "ProductLevel", + "ProductType", + "Project", + "SoftwareVersion", + "SpacecraftName", + "SpatialCoverage", + "Sensor", + "ProcessingDatetime", + "SensingStart", + "SensingEnd", + "LayoverShadowCoverage", + "RTCProductVersion", + "Polarization", + "BurstID", + "AbsoluteOrbitNumber", + "TrackNumber" + ], + "publishAll": false + }, + "relatedUrlSubTypeMap": [ + { + "regex": "^.*_B01_WTR\\.tif$", + "subType": "BROWSE IMAGE SOURCE" + }, + { + "regex": "^.*_B02_BWTR\\.tif$", + "subType": "IceBridge Portal" + } + ], + "granuleRecoveryWorkflow": "OrcaRecoveryWorkflow", + "granuleMetadataFileExtension": "cmr.json" + } +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.json b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.json index ba49337..4431917 100644 --- a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.json +++ b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.json @@ -1 +1,164 @@ -{"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"Platforms":[{"Instruments":[{"ShortName":""}],"ShortName":""}],"GranuleUR":"OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0","PGEVersionClass":{"PGEName":"DSWX_HLS_PGE","PGEVersion":"1.0.0-rc.5"},"CollectionReference":{"Version":"0.0","ShortName":"OPERA_L3_DSWX-HLS_PROVISIONAL_V0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/a\/path\/to\/s3"}],"InputGranules":["\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif","\/home\/conda\/input_dir\/dem.vrt","\/home\/conda\/input_dir\/dem_0.tif","\/home\/conda\/input_dir\/landcover.tif","\/home\/conda\/input_dir\/worldcover.vrt","\/home\/conda\/input_dir\/worldcover_0.tif"],"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2012-03-03T12:16:38.727Z","BeginningDateTime":"2012-03-03T11:20:35.236Z"}},"ProviderDates":[{"Type":"Insert","Date":"2024-04-17T03:21:54.140Z"},{"Type":"Update","Date":"2024-04-17T03:21:54.150Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":0.238,"SouthBoundingCoordinate":-66.147,"EastBoundingCoordinate":359.846,"NorthBoundingCoordinate":66.142}]},"Track":{"Cycle":374,"Passes":[{"Pass":172}]}}},"AdditionalAttributes":[{"Values":["HLS.L30.T14RNV.2021249T170251.v2.0"],"Name":"HlsDataset"},{"Values":["LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1"],"Name":"SensorProductID"},{"Values":["Lasrc; Lasrc"],"Name":"Accode"},{"Values":["135.857670779298"],"Name":"MeanSunAzimuthAngle"},{"Values":["32.3676212035439"],"Name":"MeanSunZenithAngle"},{"Values":["30.8893421483768"],"Name":"NBAR_SolarZenith"},{"Values":["106.186652634788"],"Name":"MeanViewAzimuthAngle"},{"Values":["5.12004424472291"],"Name":"MeanViewZenithAngle"},{"Values":["67"],"Name":"SpatialCoverage"},{"Values":["76"],"Name":"PercentCloudCover"},{"Values":["T14RNV"],"Name":"MGRS_TILE_ID"}],"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","Identifiers":[{"Identifier":"OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0","IdentifierType":"ProducerGranuleId"},{"Identifier":"0.5","IdentifierType":"Other","IdentifierName":"SASVersionId"},{"Identifier":"1.0.0-rc.5","IdentifierType":"Other","IdentifierName":"PGEVersionId"}],"ReprocessingPlanned":"","ProductionDateTime":"2016-03-16T03:02:03.000Z"},"CloudCover":76} \ No newline at end of file +{ + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "GranuleUR": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "PGEVersionClass": { + "PGEName": "DSWX_HLS_PGE", + "PGEVersion": "1.0.0-rc.5" + }, + "CollectionReference": { + "Version": "0.0", + "ShortName": "OPERA_L3_DSWX-HLS_PROVISIONAL_V0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + } + ], + "InputGranules": [ + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif", + "/home/conda/input_dir/dem.vrt", + "/home/conda/input_dir/dem_0.tif", + "/home/conda/input_dir/landcover.tif", + "/home/conda/input_dir/worldcover.vrt", + "/home/conda/input_dir/worldcover_0.tif" + ], + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2012-03-03T12:16:38.727Z", + "BeginningDateTime": "2012-03-03T11:20:35.236Z" + } + }, + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T03:21:54.140Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T03:21:54.150Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": 0.238, + "SouthBoundingCoordinate": -66.147, + "EastBoundingCoordinate": 359.846, + "NorthBoundingCoordinate": 66.142 + } + ] + }, + "Track": { + "Cycle": 374, + "Passes": [ + { + "Pass": 172 + } + ] + } + } + }, + "AdditionalAttributes": [ + { + "Values": [ + "HLS.L30.T14RNV.2021249T170251.v2.0" + ], + "Name": "HlsDataset" + }, + { + "Values": [ + "LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1" + ], + "Name": "SensorProductID" + }, + { + "Values": [ + "Lasrc; Lasrc" + ], + "Name": "Accode" + }, + { + "Values": [ + "135.857670779298" + ], + "Name": "MeanSunAzimuthAngle" + }, + { + "Values": [ + "32.3676212035439" + ], + "Name": "MeanSunZenithAngle" + }, + { + "Values": [ + "30.8893421483768" + ], + "Name": "NBAR_SolarZenith" + }, + { + "Values": [ + "106.186652634788" + ], + "Name": "MeanViewAzimuthAngle" + }, + { + "Values": [ + "5.12004424472291" + ], + "Name": "MeanViewZenithAngle" + }, + { + "Values": [ + "67" + ], + "Name": "SpatialCoverage" + }, + { + "Values": [ + "76" + ], + "Name": "PercentCloudCover" + }, + { + "Values": [ + "T14RNV" + ], + "Name": "MGRS_TILE_ID" + } + ], + "DataGranule": { + "DayNightFlag": "Unspecified", + "Identifiers": [ + { + "Identifier": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "IdentifierType": "ProducerGranuleId" + }, + { + "Identifier": "0.5", + "IdentifierType": "Other", + "IdentifierName": "SASVersionId" + }, + { + "Identifier": "1.0.0-rc.5", + "IdentifierType": "Other", + "IdentifierName": "PGEVersionId" + } + ], + "ProductionDateTime": "2016-03-16T03:02:03.000Z" + }, + "CloudCover": 76 +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_appendFieldToJSON_String.json b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_appendFieldToJSON_String.json index a1f5f68..0b4be9c 100644 --- a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_appendFieldToJSON_String.json +++ b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_appendFieldToJSON_String.json @@ -1 +1,109 @@ -{"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"Platforms":[{"Instruments":[{"ShortName":""}],"ShortName":""}],"GranuleUR":null,"PGEVersionClass":{"PGEName":"DSWX_HLS_PGE","PGEVersion":"1.0.0-rc.5"},"CollectionReference":{"Version":"0.0","ShortName":"OPERA_L3_DSWX-HLS_PROVISIONAL_V0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/a\/path\/to\/s3"}],"InputGranules":["\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif","\/home\/conda\/input_dir\/dem.vrt","\/home\/conda\/input_dir\/dem_0.tif","\/home\/conda\/input_dir\/landcover.tif","\/home\/conda\/input_dir\/worldcover.vrt","\/home\/conda\/input_dir\/worldcover_0.tif"],"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2012-03-03T12:16:38.727Z","BeginningDateTime":"2012-03-03T11:20:35.236Z"}},"SensorProductID_CMR":"LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1","ProviderDates":[{"Type":"Insert","Date":"2024-04-17T17:16:54.163Z"},{"Type":"Update","Date":"2024-04-17T17:16:54.172Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":0.238,"SouthBoundingCoordinate":-66.147,"EastBoundingCoordinate":359.846,"NorthBoundingCoordinate":66.142}]},"Track":{"Cycle":374,"Passes":[{"Pass":172}]}}},"AdditionalAttributes":[{"Values":["LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1"],"Name":"SensorProductID"},{"Values":["T14RNV"],"Name":"MGRS_TILE_ID"}],"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","Identifiers":[{"Identifier":"OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0","IdentifierType":"ProducerGranuleId"},{"Identifier":"0.5","IdentifierType":"Other","IdentifierName":"SASVersionId"},{"Identifier":"1.0.0-rc.5","IdentifierType":"Other","IdentifierName":"PGEVersionId"}],"ReprocessingPlanned":"","ProductionDateTime":"2016-03-16T03:02:03.000Z"}} \ No newline at end of file +{ + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "PGEVersionClass": { + "PGEName": "DSWX_HLS_PGE", + "PGEVersion": "1.0.0-rc.5" + }, + "CollectionReference": { + "Version": "0.0", + "ShortName": "OPERA_L3_DSWX-HLS_PROVISIONAL_V0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + } + ], + "InputGranules": [ + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif", + "/home/conda/input_dir/dem.vrt", + "/home/conda/input_dir/dem_0.tif", + "/home/conda/input_dir/landcover.tif", + "/home/conda/input_dir/worldcover.vrt", + "/home/conda/input_dir/worldcover_0.tif" + ], + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2012-03-03T12:16:38.727Z", + "BeginningDateTime": "2012-03-03T11:20:35.236Z" + } + }, + "SensorProductID_CMR": "LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T17:16:54.163Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T17:16:54.172Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": 0.238, + "SouthBoundingCoordinate": -66.147, + "EastBoundingCoordinate": 359.846, + "NorthBoundingCoordinate": 66.142 + } + ] + }, + "Track": { + "Cycle": 374, + "Passes": [ + { + "Pass": 172 + } + ] + } + } + }, + "AdditionalAttributes": [ + { + "Values": [ + "LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1" + ], + "Name": "SensorProductID" + }, + { + "Values": [ + "T14RNV" + ], + "Name": "MGRS_TILE_ID" + } + ], + "DataGranule": { + "DayNightFlag": "Unspecified", + "Identifiers": [ + { + "Identifier": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "IdentifierType": "ProducerGranuleId" + }, + { + "Identifier": "0.5", + "IdentifierType": "Other", + "IdentifierName": "SASVersionId" + }, + { + "Identifier": "1.0.0-rc.5", + "IdentifierType": "Other", + "IdentifierName": "PGEVersionId" + } + ], + "ProductionDateTime": "2016-03-16T03:02:03.000Z" + } +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAll.json b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAll.json index b572bca..d1d97da 100644 --- a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAll.json +++ b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAll.json @@ -1 +1,163 @@ -{"InputGranules":["\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif","\/home\/conda\/input_dir\/dem.vrt","\/home\/conda\/input_dir\/dem_0.tif","\/home\/conda\/input_dir\/landcover.tif","\/home\/conda\/input_dir\/worldcover.vrt","\/home\/conda\/input_dir\/worldcover_0.tif"],"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2012-03-03T12:16:38.727Z","BeginningDateTime":"2012-03-03T11:20:35.236Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"Platforms":[{"Instruments":[{"ShortName":""}],"ShortName":""}],"GranuleUR":"OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0","ProviderDates":[{"Type":"Insert","Date":"2024-04-17T16:41:18.842Z"},{"Type":"Update","Date":"2024-04-17T16:41:18.854Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":0.238,"SouthBoundingCoordinate":-66.147,"EastBoundingCoordinate":359.846,"NorthBoundingCoordinate":66.142}]},"Track":{"Cycle":374,"Passes":[{"Pass":172}]}}},"AdditionalAttributes":[{"Values":["HLS.L30.T14RNV.2021249T170251.v2.0"],"Name":"HlsDataset"},{"Values":["LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1"],"Name":"SensorProductID"},{"Values":["Lasrc; Lasrc"],"Name":"Accode"},{"Values":["135.857670779298"],"Name":"MeanSunAzimuthAngle"},{"Values":["32.3676212035439"],"Name":"MeanSunZenithAngle"},{"Values":["30.8893421483768"],"Name":"NBAR_SolarZenith"},{"Values":["106.186652634788"],"Name":"MeanViewAzimuthAngle"},{"Values":["5.12004424472291"],"Name":"MeanViewZenithAngle"},{"Values":["67"],"Name":"SpatialCoverage"},{"Values":["76"],"Name":"PercentCloudCover"},{"Values":["T14RNV"],"Name":"MGRS_TILE_ID"}],"PGEVersionClass":{"PGEName":"DSWX_HLS_PGE","PGEVersion":"1.0.0-rc.5"},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","Identifiers":[{"Identifier":"OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0","IdentifierType":"ProducerGranuleId"},{"Identifier":"0.5","IdentifierType":"Other","IdentifierName":"SASVersionId"},{"Identifier":"1.0.0-rc.5","IdentifierType":"Other","IdentifierName":"PGEVersionId"}],"ReprocessingPlanned":"","ProductionDateTime":"2016-03-16T03:02:03.000Z"},"CollectionReference":{"Version":"0.0","ShortName":"OPERA_L3_DSWX-HLS_PROVISIONAL_V0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/a\/path\/to\/s3"}]} \ No newline at end of file +{ + "InputGranules": [ + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif", + "/home/conda/input_dir/dem.vrt", + "/home/conda/input_dir/dem_0.tif", + "/home/conda/input_dir/landcover.tif", + "/home/conda/input_dir/worldcover.vrt", + "/home/conda/input_dir/worldcover_0.tif" + ], + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2012-03-03T12:16:38.727Z", + "BeginningDateTime": "2012-03-03T11:20:35.236Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "GranuleUR": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T16:41:18.842Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T16:41:18.854Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": 0.238, + "SouthBoundingCoordinate": -66.147, + "EastBoundingCoordinate": 359.846, + "NorthBoundingCoordinate": 66.142 + } + ] + }, + "Track": { + "Cycle": 374, + "Passes": [ + { + "Pass": 172 + } + ] + } + } + }, + "AdditionalAttributes": [ + { + "Values": [ + "HLS.L30.T14RNV.2021249T170251.v2.0" + ], + "Name": "HlsDataset" + }, + { + "Values": [ + "LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1" + ], + "Name": "SensorProductID" + }, + { + "Values": [ + "Lasrc; Lasrc" + ], + "Name": "Accode" + }, + { + "Values": [ + "135.857670779298" + ], + "Name": "MeanSunAzimuthAngle" + }, + { + "Values": [ + "32.3676212035439" + ], + "Name": "MeanSunZenithAngle" + }, + { + "Values": [ + "30.8893421483768" + ], + "Name": "NBAR_SolarZenith" + }, + { + "Values": [ + "106.186652634788" + ], + "Name": "MeanViewAzimuthAngle" + }, + { + "Values": [ + "5.12004424472291" + ], + "Name": "MeanViewZenithAngle" + }, + { + "Values": [ + "67" + ], + "Name": "SpatialCoverage" + }, + { + "Values": [ + "76" + ], + "Name": "PercentCloudCover" + }, + { + "Values": [ + "T14RNV" + ], + "Name": "MGRS_TILE_ID" + } + ], + "PGEVersionClass": { + "PGEName": "DSWX_HLS_PGE", + "PGEVersion": "1.0.0-rc.5" + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "Identifiers": [ + { + "Identifier": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "IdentifierType": "ProducerGranuleId" + }, + { + "Identifier": "0.5", + "IdentifierType": "Other", + "IdentifierName": "SASVersionId" + }, + { + "Identifier": "1.0.0-rc.5", + "IdentifierType": "Other", + "IdentifierName": "PGEVersionId" + } + ], + "ProductionDateTime": "2016-03-16T03:02:03.000Z" + }, + "CollectionReference": { + "Version": "0.0", + "ShortName": "OPERA_L3_DSWX-HLS_PROVISIONAL_V0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllEmptyCatchError_3.json b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllEmptyCatchError_3.json index 04d899f..f494161 100644 --- a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllEmptyCatchError_3.json +++ b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllEmptyCatchError_3.json @@ -1 +1,103 @@ -{"InputGranules":["\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif","\/home\/conda\/input_dir\/dem.vrt","\/home\/conda\/input_dir\/dem_0.tif","\/home\/conda\/input_dir\/landcover.tif","\/home\/conda\/input_dir\/worldcover.vrt","\/home\/conda\/input_dir\/worldcover_0.tif"],"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2012-03-03T12:16:38.727Z","BeginningDateTime":"2012-03-03T11:20:35.236Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"Platforms":[{"Instruments":[{"ShortName":""}],"ShortName":""}],"GranuleUR":"some_random_granule_name","ProviderDates":[{"Type":"Insert","Date":"2024-04-17T17:13:08.992Z"},{"Type":"Update","Date":"2024-04-17T17:13:09.003Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":0.238,"SouthBoundingCoordinate":-66.147,"EastBoundingCoordinate":359.846,"NorthBoundingCoordinate":66.142}]},"Track":{"Cycle":374,"Passes":[{"Pass":172}]}}},"AdditionalAttributes":[{"Values":["T14RNV"],"Name":"MGRS_TILE_ID"}],"PGEVersionClass":{"PGEName":"DSWX_HLS_PGE","PGEVersion":"1.0.0-rc.5"},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","Identifiers":[{"Identifier":"OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0","IdentifierType":"ProducerGranuleId"},{"Identifier":"0.5","IdentifierType":"Other","IdentifierName":"SASVersionId"},{"Identifier":"1.0.0-rc.5","IdentifierType":"Other","IdentifierName":"PGEVersionId"}],"ReprocessingPlanned":"","ProductionDateTime":"2016-03-16T03:02:03.000Z"},"CollectionReference":{"Version":"0.0","ShortName":"OPERA_L3_DSWX-HLS_PROVISIONAL_V0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/a\/path\/to\/s3"}]} \ No newline at end of file +{ + "InputGranules": [ + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif", + "/home/conda/input_dir/dem.vrt", + "/home/conda/input_dir/dem_0.tif", + "/home/conda/input_dir/landcover.tif", + "/home/conda/input_dir/worldcover.vrt", + "/home/conda/input_dir/worldcover_0.tif" + ], + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2012-03-03T12:16:38.727Z", + "BeginningDateTime": "2012-03-03T11:20:35.236Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "GranuleUR": "some_random_granule_name", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T17:13:08.992Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T17:13:09.003Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": 0.238, + "SouthBoundingCoordinate": -66.147, + "EastBoundingCoordinate": 359.846, + "NorthBoundingCoordinate": 66.142 + } + ] + }, + "Track": { + "Cycle": 374, + "Passes": [ + { + "Pass": 172 + } + ] + } + } + }, + "AdditionalAttributes": [ + { + "Values": [ + "T14RNV" + ], + "Name": "MGRS_TILE_ID" + } + ], + "PGEVersionClass": { + "PGEName": "DSWX_HLS_PGE", + "PGEVersion": "1.0.0-rc.5" + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "Identifiers": [ + { + "Identifier": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "IdentifierType": "ProducerGranuleId" + }, + { + "Identifier": "0.5", + "IdentifierType": "Other", + "IdentifierName": "SASVersionId" + }, + { + "Identifier": "1.0.0-rc.5", + "IdentifierType": "Other", + "IdentifierName": "PGEVersionId" + } + ], + "ProductionDateTime": "2016-03-16T03:02:03.000Z" + }, + "CollectionReference": { + "Version": "0.0", + "ShortName": "OPERA_L3_DSWX-HLS_PROVISIONAL_V0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllWithSpecific.json b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllWithSpecific.json index 559e2e1..a362930 100644 --- a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllWithSpecific.json +++ b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllWithSpecific.json @@ -1 +1,162 @@ -{"InputGranules":["\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif","\/home\/conda\/input_dir\/dem.vrt","\/home\/conda\/input_dir\/dem_0.tif","\/home\/conda\/input_dir\/landcover.tif","\/home\/conda\/input_dir\/worldcover.vrt","\/home\/conda\/input_dir\/worldcover_0.tif"],"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2012-03-03T12:16:38.727Z","BeginningDateTime":"2012-03-03T11:20:35.236Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"Platforms":[{"Instruments":[{"ShortName":""}],"ShortName":""}],"GranuleUR":null,"ProviderDates":[{"Type":"Insert","Date":"2024-04-17T16:56:47.572Z"},{"Type":"Update","Date":"2024-04-17T16:56:47.580Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":0.238,"SouthBoundingCoordinate":-66.147,"EastBoundingCoordinate":359.846,"NorthBoundingCoordinate":66.142}]},"Track":{"Cycle":374,"Passes":[{"Pass":172}]}}},"AdditionalAttributes":[{"Values":["HLS.L30.T14RNV.2021249T170251.v2.0"],"Name":"HlsDataset"},{"Values":["LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1"],"Name":"SensorProductID"},{"Values":["Lasrc; Lasrc"],"Name":"Accode"},{"Values":["135.857670779298"],"Name":"MeanSunAzimuthAngle"},{"Values":["32.3676212035439"],"Name":"MeanSunZenithAngle"},{"Values":["30.8893421483768"],"Name":"NBAR_SolarZenith"},{"Values":["106.186652634788"],"Name":"MeanViewAzimuthAngle"},{"Values":["5.12004424472291"],"Name":"MeanViewZenithAngle"},{"Values":["67"],"Name":"SpatialCoverage"},{"Values":["76"],"Name":"PercentCloudCover"},{"Values":["T14RNV"],"Name":"MGRS_TILE_ID"}],"PGEVersionClass":{"PGEName":"DSWX_HLS_PGE","PGEVersion":"1.0.0-rc.5"},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","Identifiers":[{"Identifier":"OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0","IdentifierType":"ProducerGranuleId"},{"Identifier":"0.5","IdentifierType":"Other","IdentifierName":"SASVersionId"},{"Identifier":"1.0.0-rc.5","IdentifierType":"Other","IdentifierName":"PGEVersionId"}],"ReprocessingPlanned":"","ProductionDateTime":"2016-03-16T03:02:03.000Z"},"CollectionReference":{"Version":"0.0","ShortName":"OPERA_L3_DSWX-HLS_PROVISIONAL_V0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/a\/path\/to\/s3"}]} \ No newline at end of file +{ + "InputGranules": [ + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif", + "/home/conda/input_dir/dem.vrt", + "/home/conda/input_dir/dem_0.tif", + "/home/conda/input_dir/landcover.tif", + "/home/conda/input_dir/worldcover.vrt", + "/home/conda/input_dir/worldcover_0.tif" + ], + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2012-03-03T12:16:38.727Z", + "BeginningDateTime": "2012-03-03T11:20:35.236Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T16:56:47.572Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T16:56:47.580Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": 0.238, + "SouthBoundingCoordinate": -66.147, + "EastBoundingCoordinate": 359.846, + "NorthBoundingCoordinate": 66.142 + } + ] + }, + "Track": { + "Cycle": 374, + "Passes": [ + { + "Pass": 172 + } + ] + } + } + }, + "AdditionalAttributes": [ + { + "Values": [ + "HLS.L30.T14RNV.2021249T170251.v2.0" + ], + "Name": "HlsDataset" + }, + { + "Values": [ + "LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1" + ], + "Name": "SensorProductID" + }, + { + "Values": [ + "Lasrc; Lasrc" + ], + "Name": "Accode" + }, + { + "Values": [ + "135.857670779298" + ], + "Name": "MeanSunAzimuthAngle" + }, + { + "Values": [ + "32.3676212035439" + ], + "Name": "MeanSunZenithAngle" + }, + { + "Values": [ + "30.8893421483768" + ], + "Name": "NBAR_SolarZenith" + }, + { + "Values": [ + "106.186652634788" + ], + "Name": "MeanViewAzimuthAngle" + }, + { + "Values": [ + "5.12004424472291" + ], + "Name": "MeanViewZenithAngle" + }, + { + "Values": [ + "67" + ], + "Name": "SpatialCoverage" + }, + { + "Values": [ + "76" + ], + "Name": "PercentCloudCover" + }, + { + "Values": [ + "T14RNV" + ], + "Name": "MGRS_TILE_ID" + } + ], + "PGEVersionClass": { + "PGEName": "DSWX_HLS_PGE", + "PGEVersion": "1.0.0-rc.5" + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "Identifiers": [ + { + "Identifier": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "IdentifierType": "ProducerGranuleId" + }, + { + "Identifier": "0.5", + "IdentifierType": "Other", + "IdentifierName": "SASVersionId" + }, + { + "Identifier": "1.0.0-rc.5", + "IdentifierType": "Other", + "IdentifierName": "PGEVersionId" + } + ], + "ProductionDateTime": "2016-03-16T03:02:03.000Z" + }, + "CollectionReference": { + "Version": "0.0", + "ShortName": "OPERA_L3_DSWX-HLS_PROVISIONAL_V0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishSpecific.json b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishSpecific.json index 80e4873..4dd4ff7 100644 --- a/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishSpecific.json +++ b/src/test/resources/ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishSpecific.json @@ -1 +1,109 @@ -{"InputGranules":["\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif","\/home\/conda\/input_dir\/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif","\/home\/conda\/input_dir\/dem.vrt","\/home\/conda\/input_dir\/dem_0.tif","\/home\/conda\/input_dir\/landcover.tif","\/home\/conda\/input_dir\/worldcover.vrt","\/home\/conda\/input_dir\/worldcover_0.tif"],"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2012-03-03T12:16:38.727Z","BeginningDateTime":"2012-03-03T11:20:35.236Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"Platforms":[{"Instruments":[{"ShortName":""}],"ShortName":""}],"GranuleUR":"OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0","ProviderDates":[{"Type":"Insert","Date":"2024-04-17T03:41:19.154Z"},{"Type":"Update","Date":"2024-04-17T03:41:19.163Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":0.238,"SouthBoundingCoordinate":-66.147,"EastBoundingCoordinate":359.846,"NorthBoundingCoordinate":66.142}]},"Track":{"Cycle":374,"Passes":[{"Pass":172}]}}},"AdditionalAttributes":[{"Values":["76"],"Name":"PercentCloudCover"},{"Values":["T14RNV"],"Name":"MGRS_TILE_ID"}],"PGEVersionClass":{"PGEName":"DSWX_HLS_PGE","PGEVersion":"1.0.0-rc.5"},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","Identifiers":[{"Identifier":"OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0","IdentifierType":"ProducerGranuleId"},{"Identifier":"0.5","IdentifierType":"Other","IdentifierName":"SASVersionId"},{"Identifier":"1.0.0-rc.5","IdentifierType":"Other","IdentifierName":"PGEVersionId"}],"ReprocessingPlanned":"","ProductionDateTime":"2016-03-16T03:02:03.000Z"},"CollectionReference":{"Version":"0.0","ShortName":"OPERA_L3_DSWX-HLS_PROVISIONAL_V0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/a\/path\/to\/s3"}]} \ No newline at end of file +{ + "InputGranules": [ + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif", + "/home/conda/input_dir/dem.vrt", + "/home/conda/input_dir/dem_0.tif", + "/home/conda/input_dir/landcover.tif", + "/home/conda/input_dir/worldcover.vrt", + "/home/conda/input_dir/worldcover_0.tif" + ], + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2012-03-03T12:16:38.727Z", + "BeginningDateTime": "2012-03-03T11:20:35.236Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "GranuleUR": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T03:41:19.154Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T03:41:19.163Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": 0.238, + "SouthBoundingCoordinate": -66.147, + "EastBoundingCoordinate": 359.846, + "NorthBoundingCoordinate": 66.142 + } + ] + }, + "Track": { + "Cycle": 374, + "Passes": [ + { + "Pass": 172 + } + ] + } + } + }, + "AdditionalAttributes": [ + { + "Values": [ + "76" + ], + "Name": "PercentCloudCover" + }, + { + "Values": [ + "T14RNV" + ], + "Name": "MGRS_TILE_ID" + } + ], + "PGEVersionClass": { + "PGEName": "DSWX_HLS_PGE", + "PGEVersion": "1.0.0-rc.5" + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "Identifiers": [ + { + "Identifier": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "IdentifierType": "ProducerGranuleId" + }, + { + "Identifier": "0.5", + "IdentifierType": "Other", + "IdentifierName": "SASVersionId" + }, + { + "Identifier": "1.0.0-rc.5", + "IdentifierType": "Other", + "IdentifierName": "PGEVersionId" + } + ], + "ProductionDateTime": "2016-03-16T03:02:03.000Z" + }, + "CollectionReference": { + "Version": "0.0", + "ShortName": "OPERA_L3_DSWX-HLS_PROVISIONAL_V0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/from_mp_file/20170408033000-JPL-L2P_GHRSST-SSTskin-MODIS_T-N-v02.0-fv01.0.json b/src/test/resources/ummgResults/from_mp_file/20170408033000-JPL-L2P_GHRSST-SSTskin-MODIS_T-N-v02.0-fv01.0.json index 295fa4d..d42a1a4 100644 --- a/src/test/resources/ummgResults/from_mp_file/20170408033000-JPL-L2P_GHRSST-SSTskin-MODIS_T-N-v02.0-fv01.0.json +++ b/src/test/resources/ummgResults/from_mp_file/20170408033000-JPL-L2P_GHRSST-SSTskin-MODIS_T-N-v02.0-fv01.0.json @@ -1 +1,52 @@ -{"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2017-04-08T03:35:09.000Z","BeginningDateTime":"2017-04-08T03:30:11.000Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"GranuleUR":null,"ProviderDates":[{"Type":"Insert","Date":"2024-04-17T00:39:27.396Z"},{"Type":"Update","Date":"2024-04-17T00:39:27.414Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":-99.832,"SouthBoundingCoordinate":-84.107,"EastBoundingCoordinate":-2.176,"NorthBoundingCoordinate":-59.453}]}}},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","ProductionDateTime":"2017-06-05T22:23:46.000Z"},"CollectionReference":{"Version":"4.2","ShortName":"MODIS_T-JPL-L2P-v2014.0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/a\/path\/to\/s3"}]} \ No newline at end of file +{ + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2017-04-08T03:35:09.000Z", + "BeginningDateTime": "2017-04-08T03:30:11.000Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T00:39:27.396Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T00:39:27.414Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": -99.832, + "SouthBoundingCoordinate": -84.107, + "EastBoundingCoordinate": -2.176, + "NorthBoundingCoordinate": -59.453 + } + ] + } + } + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "ProductionDateTime": "2017-06-05T22:23:46.000Z" + }, + "CollectionReference": { + "Version": "4.2", + "ShortName": "MODIS_T-JPL-L2P-v2014.0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/from_mp_file/JA1_GPN_2PeP374_172_20120303_112035_20120303_121638_withcyclepass.json b/src/test/resources/ummgResults/from_mp_file/JA1_GPN_2PeP374_172_20120303_112035_20120303_121638_withcyclepass.json index 0d1b379..19374c2 100644 --- a/src/test/resources/ummgResults/from_mp_file/JA1_GPN_2PeP374_172_20120303_112035_20120303_121638_withcyclepass.json +++ b/src/test/resources/ummgResults/from_mp_file/JA1_GPN_2PeP374_172_20120303_112035_20120303_121638_withcyclepass.json @@ -1 +1,60 @@ -{"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2012-03-03T12:16:38.727Z","BeginningDateTime":"2012-03-03T11:20:35.236Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"GranuleUR":null,"ProviderDates":[{"Type":"Insert","Date":"2024-04-17T01:17:07.865Z"},{"Type":"Update","Date":"2024-04-17T01:17:07.882Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":0.238,"SouthBoundingCoordinate":-66.147,"EastBoundingCoordinate":359.846,"NorthBoundingCoordinate":66.142}]},"Track":{"Cycle":374,"Passes":[{"Pass":172}]}}},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","ProductionDateTime":"2016-03-16T03:02:03.000Z"},"CollectionReference":{"Version":"4.2","ShortName":"MODIS_T-JPL-L2P-v2014.0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/a\/path\/to\/s3"}]} \ No newline at end of file +{ + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2012-03-03T12:16:38.727Z", + "BeginningDateTime": "2012-03-03T11:20:35.236Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T01:17:07.865Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T01:17:07.882Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": 0.238, + "SouthBoundingCoordinate": -66.147, + "EastBoundingCoordinate": 359.846, + "NorthBoundingCoordinate": 66.142 + } + ] + }, + "Track": { + "Cycle": 374, + "Passes": [ + { + "Pass": 172 + } + ] + } + } + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "ProductionDateTime": "2016-03-16T03:02:03.000Z" + }, + "CollectionReference": { + "Version": "4.2", + "ShortName": "MODIS_T-JPL-L2P-v2014.0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/from_mp_file/RSS_SMAP_SSS_L2C_r00870_20150401T004312_2015091_FNL_V04.0.json b/src/test/resources/ummgResults/from_mp_file/RSS_SMAP_SSS_L2C_r00870_20150401T004312_2015091_FNL_V04.0.json index 34208c5..c99c267 100644 --- a/src/test/resources/ummgResults/from_mp_file/RSS_SMAP_SSS_L2C_r00870_20150401T004312_2015091_FNL_V04.0.json +++ b/src/test/resources/ummgResults/from_mp_file/RSS_SMAP_SSS_L2C_r00870_20150401T004312_2015091_FNL_V04.0.json @@ -1 +1,57 @@ -{"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2015-04-01T02:24:53.000Z","BeginningDateTime":"2015-04-01T00:43:12.000Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"OrbitCalculatedSpatialDomains":[{"OrbitNumber":870}],"GranuleUR":null,"ProviderDates":[{"Type":"Insert","Date":"2024-04-17T00:46:13.029Z"},{"Type":"Update","Date":"2024-04-17T00:46:13.041Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":0.006,"SouthBoundingCoordinate":-86.607,"EastBoundingCoordinate":359.993,"NorthBoundingCoordinate":86.515}]}}},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","ProductionDateTime":"2019-07-28T13:29:28.000Z"},"CollectionReference":{"Version":"4.2","ShortName":"MODIS_T-JPL-L2P-v2014.0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/a\/path\/to\/s3"}]} \ No newline at end of file +{ + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2015-04-01T02:24:53.000Z", + "BeginningDateTime": "2015-04-01T00:43:12.000Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "OrbitCalculatedSpatialDomains": [ + { + "OrbitNumber": 870 + } + ], + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T00:46:13.029Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T00:46:13.041Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": 0.006, + "SouthBoundingCoordinate": -86.607, + "EastBoundingCoordinate": 359.993, + "NorthBoundingCoordinate": 86.515 + } + ] + } + } + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "ProductionDateTime": "2019-07-28T13:29:28.000Z" + }, + "CollectionReference": { + "Version": "4.2", + "ShortName": "MODIS_T-JPL-L2P-v2014.0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/from_mp_file/RSS_smap_SSS_L3_monthly_2015_04_FNL_v04.0_OrbitStartEnd.json b/src/test/resources/ummgResults/from_mp_file/RSS_smap_SSS_L3_monthly_2015_04_FNL_v04.0_OrbitStartEnd.json index c99fac7..558b0ac 100644 --- a/src/test/resources/ummgResults/from_mp_file/RSS_smap_SSS_L3_monthly_2015_04_FNL_v04.0_OrbitStartEnd.json +++ b/src/test/resources/ummgResults/from_mp_file/RSS_smap_SSS_L3_monthly_2015_04_FNL_v04.0_OrbitStartEnd.json @@ -1 +1,59 @@ -{"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2015-04-30T23:59:59.000Z","BeginningDateTime":"2015-04-01T00:00:00.000Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"OrbitCalculatedSpatialDomains":[{"EndOrbitNumber":1308,"BeginOrbitNumber":870}],"GranuleUR":"SMAP_RSS_L3_SSS_SMI_MONTHLY_V4","ProviderDates":[{"Type":"Insert","Date":"2024-04-17T00:53:28.476Z"},{"Type":"Update","Date":"2024-04-17T00:53:28.486Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":0.125,"SouthBoundingCoordinate":-89.875,"EastBoundingCoordinate":359.875,"NorthBoundingCoordinate":89.875}]}}},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","ProductionDateTime":"2019-08-01T22:38:36.000Z"},"CollectionReference":{"Version":"4.2","ShortName":"MODIS_T-JPL-L2P-v2014.0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/a\/path\/to\/s3"}]} \ No newline at end of file +{ + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2015-04-30T23:59:59.000Z", + "BeginningDateTime": "2015-04-01T00:00:00.000Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "OrbitCalculatedSpatialDomains": [ + { + "EndOrbitNumber": 1308, + "BeginOrbitNumber": 870 + } + ], + "GranuleUR": "SMAP_RSS_L3_SSS_SMI_MONTHLY_V4", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T00:53:28.476Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T00:53:28.486Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": 0.125, + "SouthBoundingCoordinate": -89.875, + "EastBoundingCoordinate": 359.875, + "NorthBoundingCoordinate": 89.875 + } + ] + } + } + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "ProductionDateTime": "2019-08-01T22:38:36.000Z" + }, + "CollectionReference": { + "Version": "4.2", + "ShortName": "MODIS_T-JPL-L2P-v2014.0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02_notOverIDL.json b/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02_notOverIDL.json index 705f2ac..d6c0178 100644 --- a/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02_notOverIDL.json +++ b/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02_notOverIDL.json @@ -1 +1,194 @@ -{"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2021-06-19T00:24:29.471Z","BeginningDateTime":"2021-06-18T23:28:16.542Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"GranuleUR":"S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02","ProviderDates":[{"Type":"Insert","Date":"2024-04-17T22:56:28.512Z"},{"Type":"Update","Date":"2024-04-17T22:56:28.514Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"GPolygons":[{"Boundary":{"Points":[{"Latitude":-65.649768,"Longitude":-25.561001},{"Latitude":-66.644101,"Longitude":-25.454693},{"Latitude":-63.597255,"Longitude":2.884525},{"Latitude":-56.022254,"Longitude":22.501876},{"Latitude":-46.176484,"Longitude":34.738356},{"Latitude":-35.287184,"Longitude":42.821997},{"Latitude":-23.891329,"Longitude":48.714422},{"Latitude":-12.243013,"Longitude":53.479583},{"Latitude":-0.492119,"Longitude":57.755247},{"Latitude":11.245057,"Longitude":62.012329},{"Latitude":22.847334,"Longitude":66.712901},{"Latitude":34.159401,"Longitude":72.465261},{"Latitude":44.931266,"Longitude":80.267339},{"Latitude":54.690314,"Longitude":91.997549},{"Latitude":62.326143,"Longitude":110.882612},{"Latitude":65.638561,"Longitude":138.707184},{"Latitude":65.64749,"Longitude":140.321732},{"Latitude":66.647475,"Longitude":140.316202},{"Latitude":66.638546,"Longitude":138.701654},{"Latitude":63.319145,"Longitude":110.764513},{"Latitude":55.61772,"Longitude":91.623494},{"Latitude":45.700998,"Longitude":79.628972},{"Latitude":34.746947,"Longitude":71.65607},{"Latitude":23.301042,"Longitude":65.821751},{"Latitude":11.620689,"Longitude":61.08556},{"Latitude":-0.151127,"Longitude":56.81518},{"Latitude":-11.901085,"Longitude":52.539857},{"Latitude":-23.512671,"Longitude":47.788885},{"Latitude":-34.827746,"Longitude":41.933788},{"Latitude":-45.580038,"Longitude":33.935703},{"Latitude":-55.2425,"Longitude":21.87579},{"Latitude":-62.663981,"Longitude":2.525361},{"Latitude":-65.649768,"Longitude":-25.561001}]}}]},"Track":{"Cycle":22,"Passes":[{"Pass":131}]}}},"AdditionalAttributes":[{"Values":["S6A_P4_2__LR______20210618T232816_20210619T002429_20210619T220302_3373_022_131_065_EUM__OPE_ST_F02.SEN6"],"Name":"ProviderDataSource"}],"DataGranule":{"DayNightFlag":"Unspecified","ProductionDateTime":"2021-06-19T22:10:40.000Z"},"CollectionReference":{"Version":"E","ShortName":"JASON_CS_S6A_L0_ALT_ACQ"}} \ No newline at end of file +{ + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2021-06-19T00:24:29.471Z", + "BeginningDateTime": "2021-06-18T23:28:16.542Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "GranuleUR": "S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T22:56:28.512Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T22:56:28.514Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "GPolygons": [ + { + "Boundary": { + "Points": [ + { + "Latitude": -65.649768, + "Longitude": -25.561001 + }, + { + "Latitude": -66.644101, + "Longitude": -25.454693 + }, + { + "Latitude": -63.597255, + "Longitude": 2.884525 + }, + { + "Latitude": -56.022254, + "Longitude": 22.501876 + }, + { + "Latitude": -46.176484, + "Longitude": 34.738356 + }, + { + "Latitude": -35.287184, + "Longitude": 42.821997 + }, + { + "Latitude": -23.891329, + "Longitude": 48.714422 + }, + { + "Latitude": -12.243013, + "Longitude": 53.479583 + }, + { + "Latitude": -0.492119, + "Longitude": 57.755247 + }, + { + "Latitude": 11.245057, + "Longitude": 62.012329 + }, + { + "Latitude": 22.847334, + "Longitude": 66.712901 + }, + { + "Latitude": 34.159401, + "Longitude": 72.465261 + }, + { + "Latitude": 44.931266, + "Longitude": 80.267339 + }, + { + "Latitude": 54.690314, + "Longitude": 91.997549 + }, + { + "Latitude": 62.326143, + "Longitude": 110.882612 + }, + { + "Latitude": 65.638561, + "Longitude": 138.707184 + }, + { + "Latitude": 65.64749, + "Longitude": 140.321732 + }, + { + "Latitude": 66.647475, + "Longitude": 140.316202 + }, + { + "Latitude": 66.638546, + "Longitude": 138.701654 + }, + { + "Latitude": 63.319145, + "Longitude": 110.764513 + }, + { + "Latitude": 55.61772, + "Longitude": 91.623494 + }, + { + "Latitude": 45.700998, + "Longitude": 79.628972 + }, + { + "Latitude": 34.746947, + "Longitude": 71.65607 + }, + { + "Latitude": 23.301042, + "Longitude": 65.821751 + }, + { + "Latitude": 11.620689, + "Longitude": 61.08556 + }, + { + "Latitude": -0.151127, + "Longitude": 56.81518 + }, + { + "Latitude": -11.901085, + "Longitude": 52.539857 + }, + { + "Latitude": -23.512671, + "Longitude": 47.788885 + }, + { + "Latitude": -34.827746, + "Longitude": 41.933788 + }, + { + "Latitude": -45.580038, + "Longitude": 33.935703 + }, + { + "Latitude": -55.2425, + "Longitude": 21.87579 + }, + { + "Latitude": -62.663981, + "Longitude": 2.525361 + }, + { + "Latitude": -65.649768, + "Longitude": -25.561001 + } + ] + } + } + ] + }, + "Track": { + "Cycle": 22, + "Passes": [ + { + "Pass": 131 + } + ] + } + } + }, + "AdditionalAttributes": [ + { + "Values": [ + "S6A_P4_2__LR______20210618T232816_20210619T002429_20210619T220302_3373_022_131_065_EUM__OPE_ST_F02.SEN6" + ], + "Name": "ProviderDataSource" + } + ], + "DataGranule": { + "DayNightFlag": "Unspecified", + "ProductionDateTime": "2021-06-19T22:10:40.000Z" + }, + "CollectionReference": { + "Version": "E", + "ShortName": "JASON_CS_S6A_L0_ALT_ACQ" + } +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02_overIde.json b/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02_overIde.json index 5fdc9d2..addd946 100644 --- a/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02_overIde.json +++ b/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02_overIde.json @@ -1 +1,220 @@ -{"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2021-06-19T01:20:42.499Z","BeginningDateTime":"2021-06-19T00:24:29.521Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"GranuleUR":"S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02","ProviderDates":[{"Type":"Insert","Date":"2024-04-17T21:48:16.012Z"},{"Type":"Update","Date":"2024-04-17T21:48:16.014Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"GPolygons":[{"Boundary":{"Points":[{"Latitude":66.644644,"Longitude":140.378601},{"Latitude":65.650321,"Longitude":140.272202},{"Latitude":62.660913,"Longitude":168.368305},{"Latitude":58.947656,"Longitude":180.0},{"Latitude":59.804021000000006,"Longitude":180.0},{"Latitude":63.594104,"Longitude":168.727685},{"Latitude":66.644644,"Longitude":140.378601}]}},{"Boundary":{"Points":[{"Latitude":59.804021000000006,"Longitude":-180.0},{"Latitude":58.947656,"Longitude":-180.0},{"Latitude":55.234399,"Longitude":-172.281509},{"Latitude":45.565597,"Longitude":-160.222191},{"Latitude":34.808176,"Longitude":-152.225714},{"Latitude":23.489431,"Longitude":-146.37198},{"Latitude":11.875462,"Longitude":-141.621838},{"Latitude":0.12445,"Longitude":-137.34684},{"Latitude":-11.647688,"Longitude":-133.076034},{"Latitude":-23.32745,"Longitude":-128.33854},{"Latitude":-34.770171,"Longitude":-122.502557},{"Latitude":-45.72047,"Longitude":-114.526255},{"Latitude":-55.63104,"Longitude":-102.528062},{"Latitude":-63.325503,"Longitude":-83.384567},{"Latitude":-66.639085,"Longitude":-55.450611},{"Latitude":-66.647778,"Longitude":-53.840211},{"Latitude":-65.647793,"Longitude":-53.834813},{"Latitude":-65.6391,"Longitude":-55.445213},{"Latitude":-62.332478,"Longitude":-83.266658},{"Latitude":-54.7035,"Longitude":-102.15434},{"Latitude":-44.950447,"Longitude":-113.888239},{"Latitude":-34.182329,"Longitude":-121.69358},{"Latitude":-22.87354,"Longitude":-127.447493},{"Latitude":-11.271951,"Longitude":-132.149308},{"Latitude":0.465463,"Longitude":-136.406782},{"Latitude":12.21734,"Longitude":-140.682094},{"Latitude":23.867966,"Longitude":-145.446393},{"Latitude":35.267412,"Longitude":-151.3374},{"Latitude":46.161783,"Longitude":-159.419345},{"Latitude":56.013938,"Longitude":-171.655155},{"Latitude":59.804021000000006,"Longitude":-180.0}]}}]},"Track":{"Cycle":22,"Passes":[{"Pass":132}]}}},"AdditionalAttributes":[{"Values":["S6A_P4_2__LR______20210619T002429_20210619T012042_20210619T221048_3373_022_132_066_EUM__OPE_ST_F02.SEN6"],"Name":"ProviderDataSource"}],"DataGranule":{"DayNightFlag":"Unspecified","ProductionDateTime":"2021-06-19T22:17:31.000Z"},"CollectionReference":{"Version":"E","ShortName":"JASON_CS_S6A_L0_ALT_ACQ"}} \ No newline at end of file +{ + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2021-06-19T01:20:42.499Z", + "BeginningDateTime": "2021-06-19T00:24:29.521Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "GranuleUR": "S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T21:48:16.012Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T21:48:16.014Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "GPolygons": [ + { + "Boundary": { + "Points": [ + { + "Latitude": 66.644644, + "Longitude": 140.378601 + }, + { + "Latitude": 65.650321, + "Longitude": 140.272202 + }, + { + "Latitude": 62.660913, + "Longitude": 168.368305 + }, + { + "Latitude": 58.947656, + "Longitude": 180.0 + }, + { + "Latitude": 59.804021000000006, + "Longitude": 180.0 + }, + { + "Latitude": 63.594104, + "Longitude": 168.727685 + }, + { + "Latitude": 66.644644, + "Longitude": 140.378601 + } + ] + } + }, + { + "Boundary": { + "Points": [ + { + "Latitude": 59.804021000000006, + "Longitude": -180.0 + }, + { + "Latitude": 58.947656, + "Longitude": -180.0 + }, + { + "Latitude": 55.234399, + "Longitude": -172.281509 + }, + { + "Latitude": 45.565597, + "Longitude": -160.222191 + }, + { + "Latitude": 34.808176, + "Longitude": -152.225714 + }, + { + "Latitude": 23.489431, + "Longitude": -146.37198 + }, + { + "Latitude": 11.875462, + "Longitude": -141.621838 + }, + { + "Latitude": 0.12445, + "Longitude": -137.34684 + }, + { + "Latitude": -11.647688, + "Longitude": -133.076034 + }, + { + "Latitude": -23.32745, + "Longitude": -128.33854 + }, + { + "Latitude": -34.770171, + "Longitude": -122.502557 + }, + { + "Latitude": -45.72047, + "Longitude": -114.526255 + }, + { + "Latitude": -55.63104, + "Longitude": -102.528062 + }, + { + "Latitude": -63.325503, + "Longitude": -83.384567 + }, + { + "Latitude": -66.639085, + "Longitude": -55.450611 + }, + { + "Latitude": -66.647778, + "Longitude": -53.840211 + }, + { + "Latitude": -65.647793, + "Longitude": -53.834813 + }, + { + "Latitude": -65.6391, + "Longitude": -55.445213 + }, + { + "Latitude": -62.332478, + "Longitude": -83.266658 + }, + { + "Latitude": -54.7035, + "Longitude": -102.15434 + }, + { + "Latitude": -44.950447, + "Longitude": -113.888239 + }, + { + "Latitude": -34.182329, + "Longitude": -121.69358 + }, + { + "Latitude": -22.87354, + "Longitude": -127.447493 + }, + { + "Latitude": -11.271951, + "Longitude": -132.149308 + }, + { + "Latitude": 0.465463, + "Longitude": -136.406782 + }, + { + "Latitude": 12.21734, + "Longitude": -140.682094 + }, + { + "Latitude": 23.867966, + "Longitude": -145.446393 + }, + { + "Latitude": 35.267412, + "Longitude": -151.3374 + }, + { + "Latitude": 46.161783, + "Longitude": -159.419345 + }, + { + "Latitude": 56.013938, + "Longitude": -171.655155 + }, + { + "Latitude": 59.804021000000006, + "Longitude": -180.0 + } + ] + } + } + ] + }, + "Track": { + "Cycle": 22, + "Passes": [ + { + "Pass": 132 + } + ] + } + } + }, + "AdditionalAttributes": [ + { + "Values": [ + "S6A_P4_2__LR______20210619T002429_20210619T012042_20210619T221048_3373_022_132_066_EUM__OPE_ST_F02.SEN6" + ], + "Name": "ProviderDataSource" + } + ], + "DataGranule": { + "DayNightFlag": "Unspecified", + "ProductionDateTime": "2021-06-19T22:17:31.000Z" + }, + "CollectionReference": { + "Version": "E", + "ShortName": "JASON_CS_S6A_L0_ALT_ACQ" + } +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/swotArchiveXml/SWOT_IVK_20210612T081400_20210612T072103_20210612T080137_O_APID1402.PTM_1.archive.json b/src/test/resources/ummgResults/swotArchiveXml/SWOT_IVK_20210612T081400_20210612T072103_20210612T080137_O_APID1402.PTM_1.archive.json index 06f1882..b73ea07 100644 --- a/src/test/resources/ummgResults/swotArchiveXml/SWOT_IVK_20210612T081400_20210612T072103_20210612T080137_O_APID1402.PTM_1.archive.json +++ b/src/test/resources/ummgResults/swotArchiveXml/SWOT_IVK_20210612T081400_20210612T072103_20210612T080137_O_APID1402.PTM_1.archive.json @@ -1 +1,65 @@ -{"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2021-06-12T07:47:28.000Z","BeginningDateTime":"2021-06-12T07:33:57.000Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"GranuleUR":"SWOT_IVK_20210612T081400_20210612T072103_20210612T080137_O_APID1402","ProviderDates":[{"Type":"Insert","Date":"2024-04-17T00:08:56.756Z"},{"Type":"Update","Date":"2024-04-17T00:08:56.762Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":-180.000,"SouthBoundingCoordinate":-90.000,"EastBoundingCoordinate":180.000,"NorthBoundingCoordinate":90.000}]},"Track":{"Cycle":22,"Passes":[{"Pass":33,"Tiles":["jasper 33"]}]}}},"AdditionalAttributes":[{"Values":["jasper 33"],"Name":"TILE"}],"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","ProductionDateTime":"2021-06-12T08:14:00.000Z"},"CollectionReference":{"Version":"4.2","ShortName":"MODIS_T-JPL-L2P-v2014.0"},"RelatedUrls":[]} \ No newline at end of file +{ + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2021-06-12T07:47:28.000Z", + "BeginningDateTime": "2021-06-12T07:33:57.000Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "GranuleUR": "SWOT_IVK_20210612T081400_20210612T072103_20210612T080137_O_APID1402", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-17T00:08:56.756Z" + }, + { + "Type": "Update", + "Date": "2024-04-17T00:08:56.762Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": -180.000, + "SouthBoundingCoordinate": -90.000, + "EastBoundingCoordinate": 180.000, + "NorthBoundingCoordinate": 90.000 + } + ] + }, + "Track": { + "Cycle": 22, + "Passes": [ + { + "Pass": 33, + "Tiles": [ + "jasper 33" + ] + } + ] + } + } + }, + "AdditionalAttributes": [ + { + "Values": [ + "jasper 33" + ], + "Name": "TILE" + } + ], + "DataGranule": { + "DayNightFlag": "Unspecified", + "ProductionDateTime": "2021-06-12T08:14:00.000Z" + }, + "CollectionReference": { + "Version": "4.2", + "ShortName": "MODIS_T-JPL-L2P-v2014.0" + } +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/swotCalVal/SWOTCalVal_WM_ADCP_L0_RiverRay1_20220727T191701_20220727T192858_20220920T142800_swotCalVal_ummg.json b/src/test/resources/ummgResults/swotCalVal/SWOTCalVal_WM_ADCP_L0_RiverRay1_20220727T191701_20220727T192858_20220920T142800_swotCalVal_ummg.json index 0fca684..05cb75b 100644 --- a/src/test/resources/ummgResults/swotCalVal/SWOTCalVal_WM_ADCP_L0_RiverRay1_20220727T191701_20220727T192858_20220920T142800_swotCalVal_ummg.json +++ b/src/test/resources/ummgResults/swotCalVal/SWOTCalVal_WM_ADCP_L0_RiverRay1_20220727T191701_20220727T192858_20220920T142800_swotCalVal_ummg.json @@ -1 +1,46 @@ -{"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2022-07-27T19:28:58.000Z","BeginningDateTime":"2022-07-27T19:17:01.000Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"GranuleUR":"SWOTCalVal_WM_ADCP_L0_RiverRay1_20220727T191701_20220727T192858_20220920T142800","ProviderDates":[{"Type":"Insert","Date":"2024-04-16T01:22:44.289Z"},{"Type":"Update","Date":"2024-04-16T01:22:44.295Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":-123.304,"SouthBoundingCoordinate":44.506,"EastBoundingCoordinate":-123.029,"NorthBoundingCoordinate":44.697}]}}},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","ProductionDateTime":"2022-09-20T14:28:00.000Z"},"CollectionReference":{"Version":"4.2","ShortName":"MODIS_T-JPL-L2P-v2014.0"},"RelatedUrls":[]} \ No newline at end of file +{ + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2022-07-27T19:28:58.000Z", + "BeginningDateTime": "2022-07-27T19:17:01.000Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "GranuleUR": "SWOTCalVal_WM_ADCP_L0_RiverRay1_20220727T191701_20220727T192858_20220920T142800", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-16T01:22:44.289Z" + }, + { + "Type": "Update", + "Date": "2024-04-16T01:22:44.295Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": -123.304, + "SouthBoundingCoordinate": 44.506, + "EastBoundingCoordinate": -123.029, + "NorthBoundingCoordinate": 44.697 + } + ] + } + } + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "ProductionDateTime": "2022-09-20T14:28:00.000Z" + }, + "CollectionReference": { + "Version": "4.2", + "ShortName": "MODIS_T-JPL-L2P-v2014.0" + } +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_bbox.json b/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_bbox.json index 762809f..0d03989 100644 --- a/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_bbox.json +++ b/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_bbox.json @@ -1 +1,128 @@ -{"InputGranules":["SWOT_GranulePolygons_Nom_20230213T142900_v05.json","SWOT_INT_LR_XOverCal_20231106T233827_20231107T233918_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_Expert_006_143_20231107T150730_20231107T155607_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_Unsmoothed_006_143_20231107T150440_20231107T155606_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_WindWave_006_143_20231107T150730_20231107T155607_PIB0_01.nc","SWOT_NC_Compression_L2_LR_SSH_Basic_20210728T100000_v004.yaml","SWOT_NC_Compression_L2_LR_SSH_Expert_20210728T100000_v004.yaml","SWOT_NC_Compression_L2_LR_SSH_Unsmoothed_20210728T100000_v004.yaml","SWOT_NC_Compression_L2_LR_SSH_WindWave_20210728T100000_v004.yaml","SWOT_ORF_AXXCNE20231109_104300_20230720_200750_20231124_075610"],"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2023-11-07T15:56:22.407Z","BeginningDateTime":"2023-11-07T15:04:24.790Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"Platforms":[{"Instruments":[{"ShortName":"KaRIn"}],"ShortName":"SWOT"}],"GranuleUR":"SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01","ProviderDates":[{"Type":"Insert","Date":"2024-04-15T23:29:43.669Z"},{"Type":"Update","Date":"2024-04-15T23:29:43.670Z"}],"MeasuredParameters":[{"QAStats":{"QAPercentMissingData":0.0,"QAPercentOutOfBoundsData":0.0},"ParameterName":"N\/A"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"BoundingRectangles":[{"WestBoundingCoordinate":-121.76947499999999990905052982270717620849609375,"SouthBoundingCoordinate":-78.271941999999995687176124192774295806884765625,"EastBoundingCoordinate":45.675058000000035463017411530017852783203125,"NorthBoundingCoordinate":78.272067999999990206561051309108734130859375}]},"Track":{"Cycle":6,"Passes":[{"Pass":143}]}}},"PGEVersionClass":{"PGEName":"PGE_L2_LR_SSH","PGEVersion":"4.3.0"},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","Identifiers":[{"Identifier":"SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc","IdentifierType":"ProducerGranuleId"},{"Identifier":"PIB0","IdentifierType":"CRID"},{"Identifier":"1.1","IdentifierType":"Other","IdentifierName":"SASVersionId"},{"Identifier":"4.3.0","IdentifierType":"Other","IdentifierName":"PGEVersionId"},{"Identifier":"ICV01 CollectionVersion filler","IdentifierType":"Other","IdentifierName":"ScienceAlgorithmVersionId"},{"Identifier":"01","IdentifierType":"Other","IdentifierName":"ProductCounter"}],"ReprocessingPlanned":"None","ProductionDateTime":"2023-11-10T01:03:13.602Z"},"CollectionReference":{"Version":"4.2","ShortName":"MODIS_T-JPL-L2P-v2014.0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/fake_bucket\/fake_dir\/fake.nc.iso.xml"}]} \ No newline at end of file +{ + "InputGranules": [ + "SWOT_GranulePolygons_Nom_20230213T142900_v05.json", + "SWOT_INT_LR_XOverCal_20231106T233827_20231107T233918_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_Expert_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_Unsmoothed_006_143_20231107T150440_20231107T155606_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_WindWave_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "SWOT_NC_Compression_L2_LR_SSH_Basic_20210728T100000_v004.yaml", + "SWOT_NC_Compression_L2_LR_SSH_Expert_20210728T100000_v004.yaml", + "SWOT_NC_Compression_L2_LR_SSH_Unsmoothed_20210728T100000_v004.yaml", + "SWOT_NC_Compression_L2_LR_SSH_WindWave_20210728T100000_v004.yaml", + "SWOT_ORF_AXXCNE20231109_104300_20230720_200750_20231124_075610" + ], + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2023-11-07T15:56:22.407Z", + "BeginningDateTime": "2023-11-07T15:04:24.790Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "Platforms": [ + { + "Instruments": [ + { + "ShortName": "KaRIn" + } + ], + "ShortName": "SWOT" + } + ], + "GranuleUR": "SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-15T23:29:43.669Z" + }, + { + "Type": "Update", + "Date": "2024-04-15T23:29:43.670Z" + } + ], + "MeasuredParameters": [ + { + "QAStats": { + "QAPercentMissingData": 0.0, + "QAPercentOutOfBoundsData": 0.0 + }, + "ParameterName": "N/A" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": -121.76947499999999990905052982270717620849609375, + "SouthBoundingCoordinate": -78.271941999999995687176124192774295806884765625, + "EastBoundingCoordinate": 45.675058000000035463017411530017852783203125, + "NorthBoundingCoordinate": 78.272067999999990206561051309108734130859375 + } + ] + }, + "Track": { + "Cycle": 6, + "Passes": [ + { + "Pass": 143 + } + ] + } + } + }, + "PGEVersionClass": { + "PGEName": "PGE_L2_LR_SSH", + "PGEVersion": "4.3.0" + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "Identifiers": [ + { + "Identifier": "SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "IdentifierType": "ProducerGranuleId" + }, + { + "Identifier": "PIB0", + "IdentifierType": "CRID" + }, + { + "Identifier": "1.1", + "IdentifierType": "Other", + "IdentifierName": "SASVersionId" + }, + { + "Identifier": "4.3.0", + "IdentifierType": "Other", + "IdentifierName": "PGEVersionId" + }, + { + "Identifier": "ICV01 CollectionVersion filler", + "IdentifierType": "Other", + "IdentifierName": "ScienceAlgorithmVersionId" + }, + { + "Identifier": "01", + "IdentifierType": "Other", + "IdentifierName": "ProductCounter" + } + ], + "ReprocessingPlanned": "None", + "ProductionDateTime": "2023-11-10T01:03:13.602Z" + }, + "CollectionReference": { + "Version": "4.2", + "ShortName": "MODIS_T-JPL-L2P-v2014.0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://fake_bucket/fake_dir/fake.nc.iso.xml" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprint.json b/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprint.json index 10a32dd..3b3bf15 100644 --- a/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprint.json +++ b/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprint.json @@ -1 +1,388 @@ -{"InputGranules":["SWOT_GranulePolygons_Nom_20230213T142900_v05.json","SWOT_INT_LR_XOverCal_20231106T233827_20231107T233918_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_Expert_006_143_20231107T150730_20231107T155607_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_Unsmoothed_006_143_20231107T150440_20231107T155606_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_WindWave_006_143_20231107T150730_20231107T155607_PIB0_01.nc","SWOT_NC_Compression_L2_LR_SSH_Basic_20210728T100000_v004.yaml","SWOT_NC_Compression_L2_LR_SSH_Expert_20210728T100000_v004.yaml","SWOT_NC_Compression_L2_LR_SSH_Unsmoothed_20210728T100000_v004.yaml","SWOT_NC_Compression_L2_LR_SSH_WindWave_20210728T100000_v004.yaml","SWOT_ORF_AXXCNE20231109_104300_20230720_200750_20231124_075610"],"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2023-11-07T15:56:22.407Z","BeginningDateTime":"2023-11-07T15:04:24.790Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"Platforms":[{"Instruments":[{"ShortName":"KaRIn"}],"ShortName":"SWOT"}],"GranuleUR":"SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01","ProviderDates":[{"Type":"Insert","Date":"2024-04-15T23:00:42.217Z"},{"Type":"Update","Date":"2024-04-15T23:00:42.217Z"}],"MeasuredParameters":[{"QAStats":{"QAPercentMissingData":0.0,"QAPercentOutOfBoundsData":0.0},"ParameterName":"N\/A"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"GPolygons":[{"Boundary":{"Points":[{"Latitude":-77.089598228,"Longitude":-121.56652283899999},{"Latitude":-78.236115915,"Longitude":-121.56652283899999},{"Latitude":-76.876353092,"Longitude":-95.245089678},{"Latitude":-73.481988386,"Longitude":-76.96015316400002},{"Latitude":-69.017288841,"Longitude":-65.63322022},{"Latitude":-64.027313382,"Longitude":-58.444391250000024},{"Latitude":-58.761539499,"Longitude":-53.60629767299997},{"Latitude":-53.337452313,"Longitude":-50.161069277000024},{"Latitude":-47.815098058,"Longitude":-47.586810222},{"Latitude":-42.227832282,"Longitude":-45.583396859000004},{"Latitude":-36.5956463,"Longitude":-43.967991487999996},{"Latitude":-30.93139442,"Longitude":-42.62300134700001},{"Latitude":-25.243922948,"Longitude":-41.46885623999998},{"Latitude":-19.539745533,"Longitude":-40.44897850299998},{"Latitude":-13.823991705,"Longitude":-39.52101994700001},{"Latitude":-8.100972727,"Longitude":-38.65145055400001},{"Latitude":-2.374539997,"Longitude":-37.81198303999997},{"Latitude":0.488816703,"Longitude":-37.395484400999976},{"Latitude":6.213560933,"Longitude":-36.55337174800002},{"Latitude":11.932599736,"Longitude":-35.67772328000001},{"Latitude":17.641983548,"Longitude":-34.74051516100002},{"Latitude":23.337243263,"Longitude":-33.70876345900001},{"Latitude":29.013029157,"Longitude":-32.54118567799998},{"Latitude":34.662546094,"Longitude":-31.183259725000028},{"Latitude":40.276622422,"Longitude":-29.559408804999975},{"Latitude":45.842100123,"Longitude":-27.559952510000016},{"Latitude":51.338911739,"Longitude":-25.018224615999998},{"Latitude":56.734470077,"Longitude":-21.668558564000023},{"Latitude":61.972216352,"Longitude":-17.066154213999994},{"Latitude":66.946763054,"Longitude":-10.433090223000022},{"Latitude":71.447935666,"Longitude":-0.39442901799998253},{"Latitude":75.044865485,"Longitude":15.185708156},{"Latitude":76.968276197,"Longitude":37.662916096},{"Latitude":78.102910198,"Longitude":36.899181012},{"Latitude":76.019975969,"Longitude":12.769937871},{"Latitude":72.220320073,"Longitude":-3.1137959949999754},{"Latitude":67.558606653,"Longitude":-12.942241278999973},{"Latitude":62.468077627,"Longitude":-19.285798596999996},{"Latitude":57.14621816,"Longitude":-23.631973963999997},{"Latitude":51.688178369,"Longitude":-26.775112310999987},{"Latitude":46.143853744,"Longitude":-29.154443990999994},{"Latitude":40.541623404,"Longitude":-31.02701495299999},{"Latitude":34.898867444,"Longitude":-32.552058708000004},{"Latitude":29.226993856,"Longitude":-33.833589115999985},{"Latitude":23.534015403,"Longitude":-34.94304256800001},{"Latitude":17.825953694,"Longitude":-35.93198489600002},{"Latitude":12.107646429,"Longitude":-36.83964491199998},{"Latitude":6.383237199,"Longitude":-37.69765486900002},{"Latitude":0.656492138,"Longitude":-38.533258386},{"Latitude":-2.206626058,"Longitude":-38.950569207},{"Latitude":-7.930093263,"Longitude":-39.79983851100002},{"Latitude":-13.646733081,"Longitude":-40.69051906300001},{"Latitude":-19.352469895,"Longitude":-41.65184012899999},{"Latitude":-25.042615437,"Longitude":-42.71887793000002},{"Latitude":-30.711458165,"Longitude":-43.93628115199999},{"Latitude":-36.351610213,"Longitude":-45.36390657999999},{"Latitude":-41.952914779,"Longitude":-47.08588716700001},{"Latitude":-47.500530492,"Longitude":-49.226003091999985},{"Latitude":-52.971396993,"Longitude":-51.975021656000024},{"Latitude":-58.327328868,"Longitude":-55.64154334599999},{"Latitude":-63.500646942,"Longitude":-60.749701372000004},{"Latitude":-68.362496198,"Longitude":-68.224467973},{"Latitude":-72.651811342,"Longitude":-79.67691136100001},{"Latitude":-75.841080029,"Longitude":-97.33596427600003},{"Latitude":-77.089598228,"Longitude":-121.56652283899999}]}}]},"Track":{"Cycle":6,"Passes":[{"Pass":143}]}}},"PGEVersionClass":{"PGEName":"PGE_L2_LR_SSH","PGEVersion":"4.3.0"},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","Identifiers":[{"Identifier":"SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc","IdentifierType":"ProducerGranuleId"},{"Identifier":"PIB0","IdentifierType":"CRID"},{"Identifier":"1.1","IdentifierType":"Other","IdentifierName":"SASVersionId"},{"Identifier":"4.3.0","IdentifierType":"Other","IdentifierName":"PGEVersionId"},{"Identifier":"ICV01 CollectionVersion filler","IdentifierType":"Other","IdentifierName":"ScienceAlgorithmVersionId"},{"Identifier":"01","IdentifierType":"Other","IdentifierName":"ProductCounter"}],"ReprocessingPlanned":"None","ProductionDateTime":"2023-11-10T01:03:13.602Z"},"CollectionReference":{"Version":"4.2","ShortName":"MODIS_T-JPL-L2P-v2014.0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/fake_bucket\/fake_dir\/fake.nc.iso.xml"}]} \ No newline at end of file +{ + "InputGranules": [ + "SWOT_GranulePolygons_Nom_20230213T142900_v05.json", + "SWOT_INT_LR_XOverCal_20231106T233827_20231107T233918_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_Expert_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_Unsmoothed_006_143_20231107T150440_20231107T155606_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_WindWave_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "SWOT_NC_Compression_L2_LR_SSH_Basic_20210728T100000_v004.yaml", + "SWOT_NC_Compression_L2_LR_SSH_Expert_20210728T100000_v004.yaml", + "SWOT_NC_Compression_L2_LR_SSH_Unsmoothed_20210728T100000_v004.yaml", + "SWOT_NC_Compression_L2_LR_SSH_WindWave_20210728T100000_v004.yaml", + "SWOT_ORF_AXXCNE20231109_104300_20230720_200750_20231124_075610" + ], + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2023-11-07T15:56:22.407Z", + "BeginningDateTime": "2023-11-07T15:04:24.790Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "Platforms": [ + { + "Instruments": [ + { + "ShortName": "KaRIn" + } + ], + "ShortName": "SWOT" + } + ], + "GranuleUR": "SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-15T23:00:42.217Z" + }, + { + "Type": "Update", + "Date": "2024-04-15T23:00:42.217Z" + } + ], + "MeasuredParameters": [ + { + "QAStats": { + "QAPercentMissingData": 0.0, + "QAPercentOutOfBoundsData": 0.0 + }, + "ParameterName": "N/A" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "GPolygons": [ + { + "Boundary": { + "Points": [ + { + "Latitude": -77.089598228, + "Longitude": -121.56652283899999 + }, + { + "Latitude": -78.236115915, + "Longitude": -121.56652283899999 + }, + { + "Latitude": -76.876353092, + "Longitude": -95.245089678 + }, + { + "Latitude": -73.481988386, + "Longitude": -76.96015316400002 + }, + { + "Latitude": -69.017288841, + "Longitude": -65.63322022 + }, + { + "Latitude": -64.027313382, + "Longitude": -58.444391250000024 + }, + { + "Latitude": -58.761539499, + "Longitude": -53.60629767299997 + }, + { + "Latitude": -53.337452313, + "Longitude": -50.161069277000024 + }, + { + "Latitude": -47.815098058, + "Longitude": -47.586810222 + }, + { + "Latitude": -42.227832282, + "Longitude": -45.583396859000004 + }, + { + "Latitude": -36.5956463, + "Longitude": -43.967991487999996 + }, + { + "Latitude": -30.93139442, + "Longitude": -42.62300134700001 + }, + { + "Latitude": -25.243922948, + "Longitude": -41.46885623999998 + }, + { + "Latitude": -19.539745533, + "Longitude": -40.44897850299998 + }, + { + "Latitude": -13.823991705, + "Longitude": -39.52101994700001 + }, + { + "Latitude": -8.100972727, + "Longitude": -38.65145055400001 + }, + { + "Latitude": -2.374539997, + "Longitude": -37.81198303999997 + }, + { + "Latitude": 0.488816703, + "Longitude": -37.395484400999976 + }, + { + "Latitude": 6.213560933, + "Longitude": -36.55337174800002 + }, + { + "Latitude": 11.932599736, + "Longitude": -35.67772328000001 + }, + { + "Latitude": 17.641983548, + "Longitude": -34.74051516100002 + }, + { + "Latitude": 23.337243263, + "Longitude": -33.70876345900001 + }, + { + "Latitude": 29.013029157, + "Longitude": -32.54118567799998 + }, + { + "Latitude": 34.662546094, + "Longitude": -31.183259725000028 + }, + { + "Latitude": 40.276622422, + "Longitude": -29.559408804999975 + }, + { + "Latitude": 45.842100123, + "Longitude": -27.559952510000016 + }, + { + "Latitude": 51.338911739, + "Longitude": -25.018224615999998 + }, + { + "Latitude": 56.734470077, + "Longitude": -21.668558564000023 + }, + { + "Latitude": 61.972216352, + "Longitude": -17.066154213999994 + }, + { + "Latitude": 66.946763054, + "Longitude": -10.433090223000022 + }, + { + "Latitude": 71.447935666, + "Longitude": -0.39442901799998253 + }, + { + "Latitude": 75.044865485, + "Longitude": 15.185708156 + }, + { + "Latitude": 76.968276197, + "Longitude": 37.662916096 + }, + { + "Latitude": 78.102910198, + "Longitude": 36.899181012 + }, + { + "Latitude": 76.019975969, + "Longitude": 12.769937871 + }, + { + "Latitude": 72.220320073, + "Longitude": -3.1137959949999754 + }, + { + "Latitude": 67.558606653, + "Longitude": -12.942241278999973 + }, + { + "Latitude": 62.468077627, + "Longitude": -19.285798596999996 + }, + { + "Latitude": 57.14621816, + "Longitude": -23.631973963999997 + }, + { + "Latitude": 51.688178369, + "Longitude": -26.775112310999987 + }, + { + "Latitude": 46.143853744, + "Longitude": -29.154443990999994 + }, + { + "Latitude": 40.541623404, + "Longitude": -31.02701495299999 + }, + { + "Latitude": 34.898867444, + "Longitude": -32.552058708000004 + }, + { + "Latitude": 29.226993856, + "Longitude": -33.833589115999985 + }, + { + "Latitude": 23.534015403, + "Longitude": -34.94304256800001 + }, + { + "Latitude": 17.825953694, + "Longitude": -35.93198489600002 + }, + { + "Latitude": 12.107646429, + "Longitude": -36.83964491199998 + }, + { + "Latitude": 6.383237199, + "Longitude": -37.69765486900002 + }, + { + "Latitude": 0.656492138, + "Longitude": -38.533258386 + }, + { + "Latitude": -2.206626058, + "Longitude": -38.950569207 + }, + { + "Latitude": -7.930093263, + "Longitude": -39.79983851100002 + }, + { + "Latitude": -13.646733081, + "Longitude": -40.69051906300001 + }, + { + "Latitude": -19.352469895, + "Longitude": -41.65184012899999 + }, + { + "Latitude": -25.042615437, + "Longitude": -42.71887793000002 + }, + { + "Latitude": -30.711458165, + "Longitude": -43.93628115199999 + }, + { + "Latitude": -36.351610213, + "Longitude": -45.36390657999999 + }, + { + "Latitude": -41.952914779, + "Longitude": -47.08588716700001 + }, + { + "Latitude": -47.500530492, + "Longitude": -49.226003091999985 + }, + { + "Latitude": -52.971396993, + "Longitude": -51.975021656000024 + }, + { + "Latitude": -58.327328868, + "Longitude": -55.64154334599999 + }, + { + "Latitude": -63.500646942, + "Longitude": -60.749701372000004 + }, + { + "Latitude": -68.362496198, + "Longitude": -68.224467973 + }, + { + "Latitude": -72.651811342, + "Longitude": -79.67691136100001 + }, + { + "Latitude": -75.841080029, + "Longitude": -97.33596427600003 + }, + { + "Latitude": -77.089598228, + "Longitude": -121.56652283899999 + } + ] + } + } + ] + }, + "Track": { + "Cycle": 6, + "Passes": [ + { + "Pass": 143 + } + ] + } + } + }, + "PGEVersionClass": { + "PGEName": "PGE_L2_LR_SSH", + "PGEVersion": "4.3.0" + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "Identifiers": [ + { + "Identifier": "SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "IdentifierType": "ProducerGranuleId" + }, + { + "Identifier": "PIB0", + "IdentifierType": "CRID" + }, + { + "Identifier": "1.1", + "IdentifierType": "Other", + "IdentifierName": "SASVersionId" + }, + { + "Identifier": "4.3.0", + "IdentifierType": "Other", + "IdentifierName": "PGEVersionId" + }, + { + "Identifier": "ICV01 CollectionVersion filler", + "IdentifierType": "Other", + "IdentifierName": "ScienceAlgorithmVersionId" + }, + { + "Identifier": "01", + "IdentifierType": "Other", + "IdentifierName": "ProductCounter" + } + ], + "ReprocessingPlanned": "None", + "ProductionDateTime": "2023-11-10T01:03:13.602Z" + }, + "CollectionReference": { + "Version": "4.2", + "ShortName": "MODIS_T-JPL-L2P-v2014.0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://fake_bucket/fake_dir/fake.nc.iso.xml" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprintOrbitBBox.json b/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprintOrbitBBox.json index e96b3eb..c889edb 100644 --- a/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprintOrbitBBox.json +++ b/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprintOrbitBBox.json @@ -19,8 +19,8 @@ } }, "MetadataSpecification": { - "Version": "1.6.5", - "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.5", + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", "Name": "UMM-G" }, "Platforms": [ @@ -355,7 +355,6 @@ "PGEVersion": "4.3.0" }, "DataGranule": { - "ArchiveAndDistributionInformation": [], "DayNightFlag": "Unspecified", "Identifiers": [ { diff --git a/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_orbit.json b/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_orbit.json index e0705ba..12918e6 100644 --- a/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_orbit.json +++ b/src/test/resources/ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_orbit.json @@ -1 +1,125 @@ -{"InputGranules":["SWOT_GranulePolygons_Nom_20230213T142900_v05.json","SWOT_INT_LR_XOverCal_20231106T233827_20231107T233918_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_Expert_006_143_20231107T150730_20231107T155607_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_Unsmoothed_006_143_20231107T150440_20231107T155606_PIB0_01.nc","SWOT_L2_LR_PreCalSSH_WindWave_006_143_20231107T150730_20231107T155607_PIB0_01.nc","SWOT_NC_Compression_L2_LR_SSH_Basic_20210728T100000_v004.yaml","SWOT_NC_Compression_L2_LR_SSH_Expert_20210728T100000_v004.yaml","SWOT_NC_Compression_L2_LR_SSH_Unsmoothed_20210728T100000_v004.yaml","SWOT_NC_Compression_L2_LR_SSH_WindWave_20210728T100000_v004.yaml","SWOT_ORF_AXXCNE20231109_104300_20230720_200750_20231124_075610"],"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2023-11-07T15:56:22.407Z","BeginningDateTime":"2023-11-07T15:04:24.790Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"Platforms":[{"Instruments":[{"ShortName":"KaRIn"}],"ShortName":"SWOT"}],"GranuleUR":"SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01","ProviderDates":[{"Type":"Insert","Date":"2024-04-15T23:59:46.728Z"},{"Type":"Update","Date":"2024-04-15T23:59:46.738Z"}],"MeasuredParameters":[{"QAStats":{"QAPercentMissingData":0.0,"QAPercentOutOfBoundsData":0.0},"ParameterName":"N\/A"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Orbit":{"StartLatitude":-77.66,"EndLatitude":77.66,"AscendingCrossing":-38.05,"StartDirection":"A","EndDirection":"A"},"Track":{"Cycle":6,"Passes":[{"Pass":143}]}}},"PGEVersionClass":{"PGEName":"PGE_L2_LR_SSH","PGEVersion":"4.3.0"},"DataGranule":{"ArchiveAndDistributionInformation":[],"DayNightFlag":"Unspecified","Identifiers":[{"Identifier":"SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc","IdentifierType":"ProducerGranuleId"},{"Identifier":"PIB0","IdentifierType":"CRID"},{"Identifier":"1.1","IdentifierType":"Other","IdentifierName":"SASVersionId"},{"Identifier":"4.3.0","IdentifierType":"Other","IdentifierName":"PGEVersionId"},{"Identifier":"ICV01 CollectionVersion filler","IdentifierType":"Other","IdentifierName":"ScienceAlgorithmVersionId"},{"Identifier":"01","IdentifierType":"Other","IdentifierName":"ProductCounter"}],"ReprocessingPlanned":"None","ProductionDateTime":"2023-11-10T01:03:13.602Z"},"CollectionReference":{"Version":"4.2","ShortName":"MODIS_T-JPL-L2P-v2014.0"},"RelatedUrls":[{"Type":"GET DATA","Description":"The base directory location for the granule.","URL":"s3:\/\/fake_bucket\/fake_dir\/fake.nc.iso.xml"}]} \ No newline at end of file +{ + "InputGranules": [ + "SWOT_GranulePolygons_Nom_20230213T142900_v05.json", + "SWOT_INT_LR_XOverCal_20231106T233827_20231107T233918_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_Expert_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_Unsmoothed_006_143_20231107T150440_20231107T155606_PIB0_01.nc", + "SWOT_L2_LR_PreCalSSH_WindWave_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "SWOT_NC_Compression_L2_LR_SSH_Basic_20210728T100000_v004.yaml", + "SWOT_NC_Compression_L2_LR_SSH_Expert_20210728T100000_v004.yaml", + "SWOT_NC_Compression_L2_LR_SSH_Unsmoothed_20210728T100000_v004.yaml", + "SWOT_NC_Compression_L2_LR_SSH_WindWave_20210728T100000_v004.yaml", + "SWOT_ORF_AXXCNE20231109_104300_20230720_200750_20231124_075610" + ], + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2023-11-07T15:56:22.407Z", + "BeginningDateTime": "2023-11-07T15:04:24.790Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "Platforms": [ + { + "Instruments": [ + { + "ShortName": "KaRIn" + } + ], + "ShortName": "SWOT" + } + ], + "GranuleUR": "SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-04-15T23:59:46.728Z" + }, + { + "Type": "Update", + "Date": "2024-04-15T23:59:46.738Z" + } + ], + "MeasuredParameters": [ + { + "QAStats": { + "QAPercentMissingData": 0.0, + "QAPercentOutOfBoundsData": 0.0 + }, + "ParameterName": "N/A" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Orbit": { + "StartLatitude": -77.66, + "EndLatitude": 77.66, + "AscendingCrossing": -38.05, + "StartDirection": "A", + "EndDirection": "A" + }, + "Track": { + "Cycle": 6, + "Passes": [ + { + "Pass": 143 + } + ] + } + } + }, + "PGEVersionClass": { + "PGEName": "PGE_L2_LR_SSH", + "PGEVersion": "4.3.0" + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "Identifiers": [ + { + "Identifier": "SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01.nc", + "IdentifierType": "ProducerGranuleId" + }, + { + "Identifier": "PIB0", + "IdentifierType": "CRID" + }, + { + "Identifier": "1.1", + "IdentifierType": "Other", + "IdentifierName": "SASVersionId" + }, + { + "Identifier": "4.3.0", + "IdentifierType": "Other", + "IdentifierName": "PGEVersionId" + }, + { + "Identifier": "ICV01 CollectionVersion filler", + "IdentifierType": "Other", + "IdentifierName": "ScienceAlgorithmVersionId" + }, + { + "Identifier": "01", + "IdentifierType": "Other", + "IdentifierName": "ProductCounter" + } + ], + "ReprocessingPlanned": "None", + "ProductionDateTime": "2023-11-10T01:03:13.602Z" + }, + "CollectionReference": { + "Version": "4.2", + "ShortName": "MODIS_T-JPL-L2P-v2014.0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://fake_bucket/fake_dir/fake.nc.iso.xml" + } + ] +} \ No newline at end of file From a20f21342f082d776c0a29a6e9b242b20cd46b41 Mon Sep 17 00:00:00 2001 From: "Yen, David (398B-Affiliate)" Date: Fri, 10 May 2024 18:09:00 -0700 Subject: [PATCH 2/3] drop umm166.java for it contains un-checked in generated files. --- .../metadata/umm/generated/Ummg166.java | 625 ------------------ .../nasa/cumulus/metadata/test/UMMTest.java | 7 - 2 files changed, 632 deletions(-) delete mode 100644 src/main/java/gov/nasa/cumulus/metadata/umm/generated/Ummg166.java diff --git a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/Ummg166.java b/src/main/java/gov/nasa/cumulus/metadata/umm/generated/Ummg166.java deleted file mode 100644 index 3379975..0000000 --- a/src/main/java/gov/nasa/cumulus/metadata/umm/generated/Ummg166.java +++ /dev/null @@ -1,625 +0,0 @@ - -package gov.nasa.cumulus.metadata.umm.generated; - -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; -import javax.annotation.processing.Generated; -import com.google.gson.annotations.Expose; -import com.google.gson.annotations.SerializedName; - - -/** - * UMM-G - *

- * - * - */ -@Generated("jsonschema2pojo") -public class Ummg166 { - - /** - * The Universal Reference ID of the granule referred by the data provider. This ID is unique per data provider. - * (Required) - * - */ - @SerializedName("GranuleUR") - @Expose - private String granuleUR; - /** - * Dates related to activities involving the the granule and the data provider database with the exception for Delete. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository. - * (Required) - * - */ - @SerializedName("ProviderDates") - @Expose - private Set providerDates = new LinkedHashSet(); - /** - * A reference to a collection metadata record's short name and version, or entry title to which this granule metadata record belongs. - * (Required) - * - */ - @SerializedName("CollectionReference") - @Expose - private CollectionReferenceType collectionReference; - /** - * Information about any physical constraints for accessing the data set. - * - */ - @SerializedName("AccessConstraints") - @Expose - private AccessConstraintsType accessConstraints; - /** - * This entity stores the basic descriptive characteristics associated with a granule. - * - */ - @SerializedName("DataGranule") - @Expose - private DataGranuleType dataGranule; - /** - * This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule. - * - */ - @SerializedName("PGEVersionClass") - @Expose - private PGEVersionClassType pGEVersionClass; - /** - * Information which describes the temporal extent of a specific granule. - * - */ - @SerializedName("TemporalExtent") - @Expose - private TemporalExtentType temporalExtent; - /** - * This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain. - * - */ - @SerializedName("SpatialExtent") - @Expose - private SpatialExtentType spatialExtent; - /** - * This entity is used to store the characteristics of the orbit calculated spatial domain to include the model name, orbit number, start and stop orbit number, equator crossing date and time, and equator crossing longitude. - * - */ - @SerializedName("OrbitCalculatedSpatialDomains") - @Expose - private Set orbitCalculatedSpatialDomains = new LinkedHashSet(); - /** - * This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule. - * - */ - @SerializedName("MeasuredParameters") - @Expose - private Set measuredParameters = new LinkedHashSet(); - /** - * A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc. - * - */ - @SerializedName("Platforms") - @Expose - private Set platforms = new LinkedHashSet(); - /** - * The name of the scientific program, field campaign, or project from which the data were collected. This element is intended for the non-space assets such as aircraft, ground systems, balloons, sondes, ships, etc. associated with campaigns. This element may also cover a long term project that continuously creates new data sets — like MEaSUREs from ISCCP and NVAP or CMARES from MISR. Project also includes the Campaign sub-element to support multiple campaigns under the same project. - * - */ - @SerializedName("Projects") - @Expose - private Set projects = new LinkedHashSet(); - /** - * Reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection. - * - */ - @SerializedName("AdditionalAttributes") - @Expose - private Set additionalAttributes = new LinkedHashSet(); - /** - * This entity contains the identification of the input granule(s) for a specific granule. - * - */ - @SerializedName("InputGranules") - @Expose - private Set inputGranules = new LinkedHashSet(); - /** - * This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection. - * - */ - @SerializedName("TilingIdentificationSystem") - @Expose - private TilingIdentificationSystemType tilingIdentificationSystem; - /** - * A percentage value indicating how much of the area of a granule (the EOSDIS data unit) has been obscured by clouds. It is worth noting that there are many different measures of cloud cover within the EOSDIS data holdings and that the cloud cover parameter that is represented in the archive is dataset-specific. - * - */ - @SerializedName("CloudCover") - @Expose - private Double cloudCover; - /** - * This element describes any data/service related URLs that include project home pages, services, related data archives/servers, metadata extensions, direct links to online software packages, web mapping services, links to images, or other data. - * - */ - @SerializedName("RelatedUrls") - @Expose - private List relatedUrls = new ArrayList(); - /** - * Represents the native projection of the granule if the granule has a native projection. - * - */ - @SerializedName("NativeProjectionNames") - @Expose - private List nativeProjectionNames = new ArrayList(); - /** - * Represents the native grid mapping of the granule, if the granule is gridded. - * - */ - @SerializedName("GridMappingNames") - @Expose - private List gridMappingNames = new ArrayList(); - /** - * This object requires any metadata record that is validated by this schema to provide information about the schema. - * (Required) - * - */ - @SerializedName("MetadataSpecification") - @Expose - private MetadataSpecificationType metadataSpecification; - - /** - * The Universal Reference ID of the granule referred by the data provider. This ID is unique per data provider. - * (Required) - * - */ - public String getGranuleUR() { - return granuleUR; - } - - /** - * The Universal Reference ID of the granule referred by the data provider. This ID is unique per data provider. - * (Required) - * - */ - public void setGranuleUR(String granuleUR) { - this.granuleUR = granuleUR; - } - - /** - * Dates related to activities involving the the granule and the data provider database with the exception for Delete. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository. - * (Required) - * - */ - public Set getProviderDates() { - return providerDates; - } - - /** - * Dates related to activities involving the the granule and the data provider database with the exception for Delete. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository. - * (Required) - * - */ - public void setProviderDates(Set providerDates) { - this.providerDates = providerDates; - } - - /** - * A reference to a collection metadata record's short name and version, or entry title to which this granule metadata record belongs. - * (Required) - * - */ - public CollectionReferenceType getCollectionReference() { - return collectionReference; - } - - /** - * A reference to a collection metadata record's short name and version, or entry title to which this granule metadata record belongs. - * (Required) - * - */ - public void setCollectionReference(CollectionReferenceType collectionReference) { - this.collectionReference = collectionReference; - } - - /** - * Information about any physical constraints for accessing the data set. - * - */ - public AccessConstraintsType getAccessConstraints() { - return accessConstraints; - } - - /** - * Information about any physical constraints for accessing the data set. - * - */ - public void setAccessConstraints(AccessConstraintsType accessConstraints) { - this.accessConstraints = accessConstraints; - } - - /** - * This entity stores the basic descriptive characteristics associated with a granule. - * - */ - public DataGranuleType getDataGranule() { - return dataGranule; - } - - /** - * This entity stores the basic descriptive characteristics associated with a granule. - * - */ - public void setDataGranule(DataGranuleType dataGranule) { - this.dataGranule = dataGranule; - } - - /** - * This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule. - * - */ - public PGEVersionClassType getPGEVersionClass() { - return pGEVersionClass; - } - - /** - * This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule. - * - */ - public void setPGEVersionClass(PGEVersionClassType pGEVersionClass) { - this.pGEVersionClass = pGEVersionClass; - } - - /** - * Information which describes the temporal extent of a specific granule. - * - */ - public TemporalExtentType getTemporalExtent() { - return temporalExtent; - } - - /** - * Information which describes the temporal extent of a specific granule. - * - */ - public void setTemporalExtent(TemporalExtentType temporalExtent) { - this.temporalExtent = temporalExtent; - } - - /** - * This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain. - * - */ - public SpatialExtentType getSpatialExtent() { - return spatialExtent; - } - - /** - * This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain. - * - */ - public void setSpatialExtent(SpatialExtentType spatialExtent) { - this.spatialExtent = spatialExtent; - } - - /** - * This entity is used to store the characteristics of the orbit calculated spatial domain to include the model name, orbit number, start and stop orbit number, equator crossing date and time, and equator crossing longitude. - * - */ - public Set getOrbitCalculatedSpatialDomains() { - return orbitCalculatedSpatialDomains; - } - - /** - * This entity is used to store the characteristics of the orbit calculated spatial domain to include the model name, orbit number, start and stop orbit number, equator crossing date and time, and equator crossing longitude. - * - */ - public void setOrbitCalculatedSpatialDomains(Set orbitCalculatedSpatialDomains) { - this.orbitCalculatedSpatialDomains = orbitCalculatedSpatialDomains; - } - - /** - * This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule. - * - */ - public Set getMeasuredParameters() { - return measuredParameters; - } - - /** - * This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule. - * - */ - public void setMeasuredParameters(Set measuredParameters) { - this.measuredParameters = measuredParameters; - } - - /** - * A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc. - * - */ - public Set getPlatforms() { - return platforms; - } - - /** - * A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc. - * - */ - public void setPlatforms(Set platforms) { - this.platforms = platforms; - } - - /** - * The name of the scientific program, field campaign, or project from which the data were collected. This element is intended for the non-space assets such as aircraft, ground systems, balloons, sondes, ships, etc. associated with campaigns. This element may also cover a long term project that continuously creates new data sets — like MEaSUREs from ISCCP and NVAP or CMARES from MISR. Project also includes the Campaign sub-element to support multiple campaigns under the same project. - * - */ - public Set getProjects() { - return projects; - } - - /** - * The name of the scientific program, field campaign, or project from which the data were collected. This element is intended for the non-space assets such as aircraft, ground systems, balloons, sondes, ships, etc. associated with campaigns. This element may also cover a long term project that continuously creates new data sets — like MEaSUREs from ISCCP and NVAP or CMARES from MISR. Project also includes the Campaign sub-element to support multiple campaigns under the same project. - * - */ - public void setProjects(Set projects) { - this.projects = projects; - } - - /** - * Reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection. - * - */ - public Set getAdditionalAttributes() { - return additionalAttributes; - } - - /** - * Reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection. - * - */ - public void setAdditionalAttributes(Set additionalAttributes) { - this.additionalAttributes = additionalAttributes; - } - - /** - * This entity contains the identification of the input granule(s) for a specific granule. - * - */ - public Set getInputGranules() { - return inputGranules; - } - - /** - * This entity contains the identification of the input granule(s) for a specific granule. - * - */ - public void setInputGranules(Set inputGranules) { - this.inputGranules = inputGranules; - } - - /** - * This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection. - * - */ - public TilingIdentificationSystemType getTilingIdentificationSystem() { - return tilingIdentificationSystem; - } - - /** - * This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection. - * - */ - public void setTilingIdentificationSystem(TilingIdentificationSystemType tilingIdentificationSystem) { - this.tilingIdentificationSystem = tilingIdentificationSystem; - } - - /** - * A percentage value indicating how much of the area of a granule (the EOSDIS data unit) has been obscured by clouds. It is worth noting that there are many different measures of cloud cover within the EOSDIS data holdings and that the cloud cover parameter that is represented in the archive is dataset-specific. - * - */ - public Double getCloudCover() { - return cloudCover; - } - - /** - * A percentage value indicating how much of the area of a granule (the EOSDIS data unit) has been obscured by clouds. It is worth noting that there are many different measures of cloud cover within the EOSDIS data holdings and that the cloud cover parameter that is represented in the archive is dataset-specific. - * - */ - public void setCloudCover(Double cloudCover) { - this.cloudCover = cloudCover; - } - - /** - * This element describes any data/service related URLs that include project home pages, services, related data archives/servers, metadata extensions, direct links to online software packages, web mapping services, links to images, or other data. - * - */ - public List getRelatedUrls() { - return relatedUrls; - } - - /** - * This element describes any data/service related URLs that include project home pages, services, related data archives/servers, metadata extensions, direct links to online software packages, web mapping services, links to images, or other data. - * - */ - public void setRelatedUrls(List relatedUrls) { - this.relatedUrls = relatedUrls; - } - - /** - * Represents the native projection of the granule if the granule has a native projection. - * - */ - public List getNativeProjectionNames() { - return nativeProjectionNames; - } - - /** - * Represents the native projection of the granule if the granule has a native projection. - * - */ - public void setNativeProjectionNames(List nativeProjectionNames) { - this.nativeProjectionNames = nativeProjectionNames; - } - - /** - * Represents the native grid mapping of the granule, if the granule is gridded. - * - */ - public List getGridMappingNames() { - return gridMappingNames; - } - - /** - * Represents the native grid mapping of the granule, if the granule is gridded. - * - */ - public void setGridMappingNames(List gridMappingNames) { - this.gridMappingNames = gridMappingNames; - } - - /** - * This object requires any metadata record that is validated by this schema to provide information about the schema. - * (Required) - * - */ - public MetadataSpecificationType getMetadataSpecification() { - return metadataSpecification; - } - - /** - * This object requires any metadata record that is validated by this schema to provide information about the schema. - * (Required) - * - */ - public void setMetadataSpecification(MetadataSpecificationType metadataSpecification) { - this.metadataSpecification = metadataSpecification; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(Ummg166 .class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); - sb.append("granuleUR"); - sb.append('='); - sb.append(((this.granuleUR == null)?"":this.granuleUR)); - sb.append(','); - sb.append("providerDates"); - sb.append('='); - sb.append(((this.providerDates == null)?"":this.providerDates)); - sb.append(','); - sb.append("collectionReference"); - sb.append('='); - sb.append(((this.collectionReference == null)?"":this.collectionReference)); - sb.append(','); - sb.append("accessConstraints"); - sb.append('='); - sb.append(((this.accessConstraints == null)?"":this.accessConstraints)); - sb.append(','); - sb.append("dataGranule"); - sb.append('='); - sb.append(((this.dataGranule == null)?"":this.dataGranule)); - sb.append(','); - sb.append("pGEVersionClass"); - sb.append('='); - sb.append(((this.pGEVersionClass == null)?"":this.pGEVersionClass)); - sb.append(','); - sb.append("temporalExtent"); - sb.append('='); - sb.append(((this.temporalExtent == null)?"":this.temporalExtent)); - sb.append(','); - sb.append("spatialExtent"); - sb.append('='); - sb.append(((this.spatialExtent == null)?"":this.spatialExtent)); - sb.append(','); - sb.append("orbitCalculatedSpatialDomains"); - sb.append('='); - sb.append(((this.orbitCalculatedSpatialDomains == null)?"":this.orbitCalculatedSpatialDomains)); - sb.append(','); - sb.append("measuredParameters"); - sb.append('='); - sb.append(((this.measuredParameters == null)?"":this.measuredParameters)); - sb.append(','); - sb.append("platforms"); - sb.append('='); - sb.append(((this.platforms == null)?"":this.platforms)); - sb.append(','); - sb.append("projects"); - sb.append('='); - sb.append(((this.projects == null)?"":this.projects)); - sb.append(','); - sb.append("additionalAttributes"); - sb.append('='); - sb.append(((this.additionalAttributes == null)?"":this.additionalAttributes)); - sb.append(','); - sb.append("inputGranules"); - sb.append('='); - sb.append(((this.inputGranules == null)?"":this.inputGranules)); - sb.append(','); - sb.append("tilingIdentificationSystem"); - sb.append('='); - sb.append(((this.tilingIdentificationSystem == null)?"":this.tilingIdentificationSystem)); - sb.append(','); - sb.append("cloudCover"); - sb.append('='); - sb.append(((this.cloudCover == null)?"":this.cloudCover)); - sb.append(','); - sb.append("relatedUrls"); - sb.append('='); - sb.append(((this.relatedUrls == null)?"":this.relatedUrls)); - sb.append(','); - sb.append("nativeProjectionNames"); - sb.append('='); - sb.append(((this.nativeProjectionNames == null)?"":this.nativeProjectionNames)); - sb.append(','); - sb.append("gridMappingNames"); - sb.append('='); - sb.append(((this.gridMappingNames == null)?"":this.gridMappingNames)); - sb.append(','); - sb.append("metadataSpecification"); - sb.append('='); - sb.append(((this.metadataSpecification == null)?"":this.metadataSpecification)); - sb.append(','); - if (sb.charAt((sb.length()- 1)) == ',') { - sb.setCharAt((sb.length()- 1), ']'); - } else { - sb.append(']'); - } - return sb.toString(); - } - - @Override - public int hashCode() { - int result = 1; - result = ((result* 31)+((this.nativeProjectionNames == null)? 0 :this.nativeProjectionNames.hashCode())); - result = ((result* 31)+((this.collectionReference == null)? 0 :this.collectionReference.hashCode())); - result = ((result* 31)+((this.projects == null)? 0 :this.projects.hashCode())); - result = ((result* 31)+((this.dataGranule == null)? 0 :this.dataGranule.hashCode())); - result = ((result* 31)+((this.metadataSpecification == null)? 0 :this.metadataSpecification.hashCode())); - result = ((result* 31)+((this.cloudCover == null)? 0 :this.cloudCover.hashCode())); - result = ((result* 31)+((this.tilingIdentificationSystem == null)? 0 :this.tilingIdentificationSystem.hashCode())); - result = ((result* 31)+((this.orbitCalculatedSpatialDomains == null)? 0 :this.orbitCalculatedSpatialDomains.hashCode())); - result = ((result* 31)+((this.platforms == null)? 0 :this.platforms.hashCode())); - result = ((result* 31)+((this.granuleUR == null)? 0 :this.granuleUR.hashCode())); - result = ((result* 31)+((this.measuredParameters == null)? 0 :this.measuredParameters.hashCode())); - result = ((result* 31)+((this.providerDates == null)? 0 :this.providerDates.hashCode())); - result = ((result* 31)+((this.relatedUrls == null)? 0 :this.relatedUrls.hashCode())); - result = ((result* 31)+((this.spatialExtent == null)? 0 :this.spatialExtent.hashCode())); - result = ((result* 31)+((this.gridMappingNames == null)? 0 :this.gridMappingNames.hashCode())); - result = ((result* 31)+((this.temporalExtent == null)? 0 :this.temporalExtent.hashCode())); - result = ((result* 31)+((this.accessConstraints == null)? 0 :this.accessConstraints.hashCode())); - result = ((result* 31)+((this.pGEVersionClass == null)? 0 :this.pGEVersionClass.hashCode())); - result = ((result* 31)+((this.additionalAttributes == null)? 0 :this.additionalAttributes.hashCode())); - result = ((result* 31)+((this.inputGranules == null)? 0 :this.inputGranules.hashCode())); - return result; - } - - @Override - public boolean equals(Object other) { - if (other == this) { - return true; - } - if ((other instanceof Ummg166) == false) { - return false; - } - Ummg166 rhs = ((Ummg166) other); - return (((((((((((((((((((((this.nativeProjectionNames == rhs.nativeProjectionNames)||((this.nativeProjectionNames!= null)&&this.nativeProjectionNames.equals(rhs.nativeProjectionNames)))&&((this.collectionReference == rhs.collectionReference)||((this.collectionReference!= null)&&this.collectionReference.equals(rhs.collectionReference))))&&((this.projects == rhs.projects)||((this.projects!= null)&&this.projects.equals(rhs.projects))))&&((this.dataGranule == rhs.dataGranule)||((this.dataGranule!= null)&&this.dataGranule.equals(rhs.dataGranule))))&&((this.metadataSpecification == rhs.metadataSpecification)||((this.metadataSpecification!= null)&&this.metadataSpecification.equals(rhs.metadataSpecification))))&&((this.cloudCover == rhs.cloudCover)||((this.cloudCover!= null)&&this.cloudCover.equals(rhs.cloudCover))))&&((this.tilingIdentificationSystem == rhs.tilingIdentificationSystem)||((this.tilingIdentificationSystem!= null)&&this.tilingIdentificationSystem.equals(rhs.tilingIdentificationSystem))))&&((this.orbitCalculatedSpatialDomains == rhs.orbitCalculatedSpatialDomains)||((this.orbitCalculatedSpatialDomains!= null)&&this.orbitCalculatedSpatialDomains.equals(rhs.orbitCalculatedSpatialDomains))))&&((this.platforms == rhs.platforms)||((this.platforms!= null)&&this.platforms.equals(rhs.platforms))))&&((this.granuleUR == rhs.granuleUR)||((this.granuleUR!= null)&&this.granuleUR.equals(rhs.granuleUR))))&&((this.measuredParameters == rhs.measuredParameters)||((this.measuredParameters!= null)&&this.measuredParameters.equals(rhs.measuredParameters))))&&((this.providerDates == rhs.providerDates)||((this.providerDates!= null)&&this.providerDates.equals(rhs.providerDates))))&&((this.relatedUrls == rhs.relatedUrls)||((this.relatedUrls!= null)&&this.relatedUrls.equals(rhs.relatedUrls))))&&((this.spatialExtent == rhs.spatialExtent)||((this.spatialExtent!= null)&&this.spatialExtent.equals(rhs.spatialExtent))))&&((this.gridMappingNames == rhs.gridMappingNames)||((this.gridMappingNames!= null)&&this.gridMappingNames.equals(rhs.gridMappingNames))))&&((this.temporalExtent == rhs.temporalExtent)||((this.temporalExtent!= null)&&this.temporalExtent.equals(rhs.temporalExtent))))&&((this.accessConstraints == rhs.accessConstraints)||((this.accessConstraints!= null)&&this.accessConstraints.equals(rhs.accessConstraints))))&&((this.pGEVersionClass == rhs.pGEVersionClass)||((this.pGEVersionClass!= null)&&this.pGEVersionClass.equals(rhs.pGEVersionClass))))&&((this.additionalAttributes == rhs.additionalAttributes)||((this.additionalAttributes!= null)&&this.additionalAttributes.equals(rhs.additionalAttributes))))&&((this.inputGranules == rhs.inputGranules)||((this.inputGranules!= null)&&this.inputGranules.equals(rhs.inputGranules)))); - } - -} diff --git a/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java b/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java index 3b16525..30d0f52 100644 --- a/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java +++ b/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java @@ -845,13 +845,6 @@ private JSONObject parseXfduManifest(String testFile, String testConfigFile, Str mtfe.getGranule().setName(granuleId); JSONObject granuleJson = mtfe.createJson(); return granuleJson; -// //write UMM-G to file -// mtfe.writeJson(testDir + "/" + granuleId + ".cmr.json"); -// -// //the CMR file should have the following values... -// JSONParser parser = new JSONParser(); -// Object obj = parser.parse(new FileReader(testDir + "/" + granuleId + ".cmr.json")); -// return (JSONObject) obj; } @Test From bfa7cef035d6e2e804d8cadec3192d91de47fc93 Mon Sep 17 00:00:00 2001 From: "Yen, David (398B-Affiliate)" Date: Tue, 14 May 2024 20:25:15 -0700 Subject: [PATCH 3/3] enhance code guard to only append relatedUrls when subTypeHashArray is not null or size zero. more unit test. --- .../aggregator/MetadataAggregatorLambda.java | 8 +- .../aggregator/factory/TaskConfigFactory.java | 8 +- .../processor/RelatedUrlsProcessor.java | 4 +- .../test/RelatedUrlsProcessorTest.java | 122 ++++++++++++ .../nasa/cumulus/metadata/test/UMMTest.java | 4 +- ...0251Z_20221026T184342Z_L8_30_v0.0.cmr.json | 173 ++++++++++++++++++ 6 files changed, 309 insertions(+), 10 deletions(-) create mode 100644 src/test/java/gov/nasa/cumulus/metadata/test/RelatedUrlsProcessorTest.java create mode 100644 src/test/resources/ummgResults/setSubType/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.cmr.json diff --git a/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataAggregatorLambda.java b/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataAggregatorLambda.java index 46c7099..148b09e 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataAggregatorLambda.java +++ b/src/main/java/gov/nasa/cumulus/metadata/aggregator/MetadataAggregatorLambda.java @@ -12,7 +12,6 @@ import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import java.util.ArrayList; -import java.util.HashSet; import java.util.Hashtable; import java.util.List; @@ -22,7 +21,6 @@ import gov.nasa.cumulus.metadata.aggregator.processor.FootprintProcessor; import gov.nasa.cumulus.metadata.aggregator.processor.ImageProcessor; import gov.nasa.cumulus.metadata.aggregator.processor.RelatedUrlsProcessor; -import gov.nasa.cumulus.metadata.state.MENDsIsoXMLSpatialTypeEnum; import gov.nasa.cumulus.metadata.state.WorkflowTypeEnum; import gov.nasa.cumulus.metadata.util.S3Utils; import org.apache.commons.io.FileUtils; @@ -196,8 +194,10 @@ public String PerformFunction(String input, Context context) throws Exception { String cmrFilePath = "/tmp/" + granuleId + ".cmr.json"; try { JSONObject granuleJson = mtfe.createJson(); - RelatedUrlsProcessor relatedUrlsProcessor = new RelatedUrlsProcessor(); - granuleJson = relatedUrlsProcessor.appendSubTypes(granuleJson, taskConfigBO, files); + if(taskConfigBO.getSubTypeHashArray().size() > 0) { + RelatedUrlsProcessor relatedUrlsProcessor = new RelatedUrlsProcessor(); + granuleJson = relatedUrlsProcessor.appendSubTypes(granuleJson, taskConfigBO, files); + } FileUtils.writeStringToFile(new File(cmrFilePath), granuleJson.toJSONString(), StandardCharsets.UTF_8); } catch (IOException e) { AdapterLogger.LogError(this.className + " mtfe.writeJson error:" + e.getMessage()); diff --git a/src/main/java/gov/nasa/cumulus/metadata/aggregator/factory/TaskConfigFactory.java b/src/main/java/gov/nasa/cumulus/metadata/aggregator/factory/TaskConfigFactory.java index 6a1887e..d08bf0d 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/aggregator/factory/TaskConfigFactory.java +++ b/src/main/java/gov/nasa/cumulus/metadata/aggregator/factory/TaskConfigFactory.java @@ -18,10 +18,14 @@ public static TaskConfigBO createTaskConfigBO(JSONObject config) { TaskConfigBO taskConfigBO = new TaskConfigBO(); //Construct isoXMLSpatialTypeHashset JSONArray isoXMLSpatialTypeJsonArray = (JSONArray) config.get("isoXMLSpatialType"); - taskConfigBO.setIsoXMLSpatialTypeHashSet(createIsoXMLSpatialTypeSet(isoXMLSpatialTypeJsonArray)); + if(isoXMLSpatialTypeJsonArray !=null && isoXMLSpatialTypeJsonArray.size()>0) { + taskConfigBO.setIsoXMLSpatialTypeHashSet(createIsoXMLSpatialTypeSet(isoXMLSpatialTypeJsonArray)); + } //Construct subTypeHashArray JSONArray subTypeTypeJsonArray = (JSONArray) config.get("relatedUrlSubTypeMap"); - taskConfigBO.setSubTypeHashArray(createSubTypeHashArray(subTypeTypeJsonArray)); + if(subTypeTypeJsonArray!=null && subTypeTypeJsonArray.size()>0) { + taskConfigBO.setSubTypeHashArray(createSubTypeHashArray(subTypeTypeJsonArray)); + } return taskConfigBO; } diff --git a/src/main/java/gov/nasa/cumulus/metadata/aggregator/processor/RelatedUrlsProcessor.java b/src/main/java/gov/nasa/cumulus/metadata/aggregator/processor/RelatedUrlsProcessor.java index 9a4b63a..4134927 100644 --- a/src/main/java/gov/nasa/cumulus/metadata/aggregator/processor/RelatedUrlsProcessor.java +++ b/src/main/java/gov/nasa/cumulus/metadata/aggregator/processor/RelatedUrlsProcessor.java @@ -3,7 +3,6 @@ import gov.nasa.cumulus.metadata.aggregator.bo.TaskConfigBO; import org.json.simple.JSONArray; import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; import java.util.ArrayList; import java.util.HashMap; @@ -21,6 +20,9 @@ public void RelatedUrlsProcessor() { public JSONObject appendSubTypes(JSONObject granuleJson, TaskConfigBO taskConfigBO, JSONArray files) { ArrayList> subTypeHashArray=taskConfigBO.getSubTypeHashArray(); + if(subTypeHashArray==null || subTypeHashArray.size()==0) { + return granuleJson; + } JSONArray relateUrlsArray = (JSONArray) granuleJson.get("RelatedUrls"); // 1: Loop through the existing RelatedUrls array to find any match for the subType regex. // for the finding match, set Subtype to diff --git a/src/test/java/gov/nasa/cumulus/metadata/test/RelatedUrlsProcessorTest.java b/src/test/java/gov/nasa/cumulus/metadata/test/RelatedUrlsProcessorTest.java new file mode 100644 index 0000000..e71be29 --- /dev/null +++ b/src/test/java/gov/nasa/cumulus/metadata/test/RelatedUrlsProcessorTest.java @@ -0,0 +1,122 @@ +package gov.nasa.cumulus.metadata.test; + +import gov.nasa.cumulus.metadata.aggregator.IsoGranule; +import gov.nasa.cumulus.metadata.aggregator.MetadataAggregatorLambda; +import gov.nasa.cumulus.metadata.aggregator.MetadataFilesToEcho; +import gov.nasa.cumulus.metadata.aggregator.bo.TaskConfigBO; +import gov.nasa.cumulus.metadata.aggregator.factory.TaskConfigFactory; +import gov.nasa.cumulus.metadata.aggregator.processor.RelatedUrlsProcessor; +import gov.nasa.cumulus.metadata.state.MENDsIsoXMLSpatialTypeEnum; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.junit.Before; +import org.junit.Test; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +public class RelatedUrlsProcessorTest { + TaskConfigBO taskConfigBO = new TaskConfigBO(); + + @Before + public void setUp() throws Exception { + // Setup ArrayList> subTypeHashArray which is a data structure presenting relatedUrlSubTypeMap + // Read relatedUrlSubTypeMap from collection_config/OPERA_L3_DSWX-S1_PROVISIONAL_V0.json which is a collection configuration json + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("collection_config/OPERA_L3_DSWX-S1_PROVISIONAL_V0.json").getFile()); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(new FileReader(file.getAbsolutePath())); + JSONObject collectionJSONObject = (JSONObject) obj; + // extract the relatedUrlSubTypeMap from collection configuration meta structure + JSONArray subTypeHasyArrayJson = (JSONArray)(((JSONObject)(collectionJSONObject.get("meta"))).get("relatedUrlSubTypeMap")); + JSONObject config = new JSONObject(); + config.put("relatedUrlSubTypeMap", subTypeHasyArrayJson); + taskConfigBO = TaskConfigFactory.createTaskConfigBO(config); + } + + @Test + public void testAppendSubTypes() throws IOException, ParseException, ParserConfigurationException, + SAXException, XPathExpressionException, URISyntaxException { + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.iso.xml").getFile()); + File cfgFile = new File(classLoader.getResource("OPERA_L3_DSWX-HLS_PROVISIONAL_V0_test_1.cmr.cfg").getFile()); + MetadataFilesToEcho mfte = new MetadataFilesToEcho(true); + mfte.getGranule().setName("OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0"); + Document doc = null; + XPath xpath = null; + mfte.readConfiguration(cfgFile.getAbsolutePath()); + doc = mfte.makeDoc(file.getAbsolutePath()); + xpath = mfte.makeXpath(doc); + IsoGranule isoGranule = mfte.readIsoMendsMetadataFile("s3://mybucket/mygranule.nc", doc, xpath); + // use a unrelated .mp file to patch required field so mfte.createJson() would work. + File file2 = new File(classLoader.getResource("JA1_GPN_2PeP374_172_20120303_112035_20120303_121638.nc.mp").getFile()); + try { + mfte.readCommonMetadataFile(file2.getAbsolutePath(), "s3://a/path/to/s3"); + } catch (Exception e) { + e.printStackTrace(); + fail(); + } + mfte.getGranule().setName("OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0"); + JSONObject granuleJson = mfte.createJson(); + + org.json.simple.JSONArray files = new JSONArray(); + JSONObject f1 = new JSONObject(); + JSONObject f2 = new JSONObject(); + JSONObject f3 = new JSONObject(); + // construct the files:[] array under payload + f1.put("source", "OPERA_L3_DSWX-S1_PROVISIONAL_V0/OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4/OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4_B01_WTR.tif"); + f1.put("fileName", "OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4_B01_WTR.tif"); + f1.put("type", "data"); + f1.put("checksumType", "md5"); + f2.put("source", "OPERA_L3_DSWX-S1_PROVISIONAL_V0/OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4/OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4_B02_BWTR.tif"); + f2.put("fileName", "OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4_B02_BWTR.tif"); + f2.put("type", "data"); + f2.put("checksumType", "md5"); + f3.put("source", "OPERA_L3_DSWX-S1_PROVISIONAL_V0/OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4/OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4_B03_CONF.tif"); + f3.put("fileName", "OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4_B03_CONF.tif"); + f3.put("type", "data"); + f3.put("checksumType", "md5"); + files.add(f1);files.add(f2);files.add(f3); + RelatedUrlsProcessor relatedUrlsProcessor = new RelatedUrlsProcessor(); + // Use appendSubTypes to generate the new Json including certain file items with subType + JSONObject newGranuleJson = relatedUrlsProcessor.appendSubTypes(granuleJson,taskConfigBO, files); + JSONArray relatedUrls =(JSONArray) newGranuleJson.get("RelatedUrls"); + ArrayList> subTypeHashArray = taskConfigBO.getSubTypeHashArray(); + /** + * We loop through the RelatedUrls array. for each relatedUrl item. If the URL field match the regex of + * a subTypeHash (which for example contains "regex": "^.*_B01_WTR\\.tif$", + * "subType": "BROWSE IMAGE SOURCE"), the Subtype field should match the + * subTypeHash's subType value + */ + for(int i = 0; i < relatedUrls.size(); i++) + { + JSONObject relatedUrl = (JSONObject)relatedUrls.get(i); + String URLStr=relatedUrl.get("URL").toString(); + for(HashMap subTypeHash : subTypeHashArray) { + if(URLStr.matches(subTypeHash.get("regex"))) { + assertEquals(relatedUrl.get("Subtype"), subTypeHash.get("subType")); + } + } + } + // Compare the newGranuleJson with the pre-saved cmr.json file + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/setSubType/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.cmr.json", newGranuleJson)); + } +} diff --git a/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java b/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java index 30d0f52..808264c 100644 --- a/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java +++ b/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java @@ -852,8 +852,6 @@ public void testStringMatch() { String regex = "^.*_B02_BWTR\\.tif$"; String s3File = "s3://src/test/resources/tester/asdaffaf_B02_BWTR.tif"; boolean matched = s3File.matches(regex); - System.out.println("matched? " + matched); + assertEquals(matched, true); } - - } diff --git a/src/test/resources/ummgResults/setSubType/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.cmr.json b/src/test/resources/ummgResults/setSubType/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.cmr.json new file mode 100644 index 0000000..0008427 --- /dev/null +++ b/src/test/resources/ummgResults/setSubType/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.cmr.json @@ -0,0 +1,173 @@ +{ + "InputGranules": [ + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B02.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B03.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B04.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B05.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B06.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.B07.tif", + "/home/conda/input_dir/HLS.L30.T14RNV.2021249T170251.v2.0.Fmask.tif", + "/home/conda/input_dir/dem.vrt", + "/home/conda/input_dir/dem_0.tif", + "/home/conda/input_dir/landcover.tif", + "/home/conda/input_dir/worldcover.vrt", + "/home/conda/input_dir/worldcover_0.tif" + ], + "TemporalExtent": { + "RangeDateTime": { + "EndingDateTime": "2012-03-03T12:16:38.727Z", + "BeginningDateTime": "2012-03-03T11:20:35.236Z" + } + }, + "MetadataSpecification": { + "Version": "1.6.6", + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.6", + "Name": "UMM-G" + }, + "GranuleUR": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "ProviderDates": [ + { + "Type": "Insert", + "Date": "2024-05-15T03:19:06.144Z" + }, + { + "Type": "Update", + "Date": "2024-05-15T03:19:06.154Z" + } + ], + "SpatialExtent": { + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "WestBoundingCoordinate": 0.238, + "SouthBoundingCoordinate": -66.147, + "EastBoundingCoordinate": 359.846, + "NorthBoundingCoordinate": 66.142 + } + ] + }, + "Track": { + "Cycle": 374, + "Passes": [ + { + "Pass": 172 + } + ] + } + } + }, + "AdditionalAttributes": [ + { + "Values": [ + "HLS.L30.T14RNV.2021249T170251.v2.0" + ], + "Name": "HlsDataset" + }, + { + "Values": [ + "LC08_L1TP_027038_20210906_20210915_02_T1; LC08_L1TP_027039_20210906_20210915_02_T1" + ], + "Name": "SensorProductID" + }, + { + "Values": [ + "Lasrc; Lasrc" + ], + "Name": "Accode" + }, + { + "Values": [ + "135.857670779298" + ], + "Name": "MeanSunAzimuthAngle" + }, + { + "Values": [ + "32.3676212035439" + ], + "Name": "MeanSunZenithAngle" + }, + { + "Values": [ + "30.8893421483768" + ], + "Name": "NBAR_SolarZenith" + }, + { + "Values": [ + "106.186652634788" + ], + "Name": "MeanViewAzimuthAngle" + }, + { + "Values": [ + "5.12004424472291" + ], + "Name": "MeanViewZenithAngle" + }, + { + "Values": [ + "67" + ], + "Name": "SpatialCoverage" + }, + { + "Values": [ + "76" + ], + "Name": "PercentCloudCover" + }, + { + "Values": [ + "T14RNV" + ], + "Name": "MGRS_TILE_ID" + } + ], + "PGEVersionClass": { + "PGEName": "DSWX_HLS_PGE", + "PGEVersion": "1.0.0-rc.5" + }, + "DataGranule": { + "DayNightFlag": "Unspecified", + "Identifiers": [ + { + "Identifier": "OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0", + "IdentifierType": "ProducerGranuleId" + }, + { + "Identifier": "0.5", + "IdentifierType": "Other", + "IdentifierName": "SASVersionId" + }, + { + "Identifier": "1.0.0-rc.5", + "IdentifierType": "Other", + "IdentifierName": "PGEVersionId" + } + ], + "ProductionDateTime": "2016-03-16T03:02:03.000Z" + }, + "CollectionReference": { + "Version": "0.0", + "ShortName": "OPERA_L3_DSWX-HLS_PROVISIONAL_V0" + }, + "RelatedUrls": [ + { + "Type": "GET DATA", + "Description": "The base directory location for the granule.", + "URL": "s3://a/path/to/s3" + }, + { + "Type": "GET DATA", + "Subtype": "BROWSE IMAGE SOURCE", + "URL": "OPERA_L3_DSWX-S1_PROVISIONAL_V0/OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4/OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4_B01_WTR.tif" + }, + { + "Type": "GET DATA", + "Subtype": "IceBridge Portal", + "URL": "OPERA_L3_DSWX-S1_PROVISIONAL_V0/OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4/OPERA_L3_DSWx-S1_T35TPJ_20240214T155240Z_20240502T001754Z_S1A_30_v0.4_B02_BWTR.tif" + } + ] +} \ No newline at end of file