diff --git a/indexer/pom.xml b/indexer/pom.xml index 7b80f0c4..5405b6a9 100644 --- a/indexer/pom.xml +++ b/indexer/pom.xml @@ -169,6 +169,11 @@ junit test + + org.apache.commons + commons-csv + 1.10.0 + org.springframework.boot spring-boot-starter-test diff --git a/indexer/src/main/java/au/org/aodn/esindexer/service/GeoNetworkServiceImpl.java b/indexer/src/main/java/au/org/aodn/esindexer/service/GeoNetworkServiceImpl.java index bbcd46db..08a8541b 100644 --- a/indexer/src/main/java/au/org/aodn/esindexer/service/GeoNetworkServiceImpl.java +++ b/indexer/src/main/java/au/org/aodn/esindexer/service/GeoNetworkServiceImpl.java @@ -36,7 +36,6 @@ import org.springframework.web.client.RestTemplate; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.atomic.AtomicReference; diff --git a/indexer/src/main/java/au/org/aodn/esindexer/service/IndexerServiceImpl.java b/indexer/src/main/java/au/org/aodn/esindexer/service/IndexerServiceImpl.java index a3f4d31f..3421d9e8 100644 --- a/indexer/src/main/java/au/org/aodn/esindexer/service/IndexerServiceImpl.java +++ b/indexer/src/main/java/au/org/aodn/esindexer/service/IndexerServiceImpl.java @@ -1,5 +1,6 @@ package au.org.aodn.esindexer.service; +import au.org.aodn.ardcvocabs.model.VocabModel; import au.org.aodn.esindexer.configuration.AppConstants; import au.org.aodn.esindexer.exception.*; import au.org.aodn.esindexer.model.DatasetProvider; @@ -47,6 +48,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import static au.org.aodn.esindexer.utils.CommonUtils.safeGet; + @Slf4j @Service @Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) @@ -184,12 +187,18 @@ protected StacCollectionModel getMappedMetadataValues(String metadataValues) thr stacCollectionModel.getSummaries().setScore(score); // parameter vocabs - List mappedParameterVocabsFromGcmdKeywords = gcmdKeywordUtils.getMappedParameterVocabsFromGcmdKeywords(stacCollectionModel.getThemes()); - List processedParameterVocabs = vocabService.extractVocabLabelsFromThemes(stacCollectionModel.getThemes(), AppConstants.AODN_DISCOVERY_PARAMETER_VOCABS); + Set mappedParameterLabels = new HashSet<>(); + List processedParameterVocabs = vocabService.extractVocabLabelsFromThemes( + stacCollectionModel.getThemes(), AppConstants.AODN_DISCOVERY_PARAMETER_VOCABS + ); if (!processedParameterVocabs.isEmpty()) { - stacCollectionModel.getSummaries().setParameterVocabs(Stream.concat(mappedParameterVocabsFromGcmdKeywords.stream(), processedParameterVocabs.stream()).distinct().collect(Collectors.toList())); + mappedParameterLabels.addAll(processedParameterVocabs); + } else { + // manual mapping with custom logic when the record doesn't have existing AODN Parameter Vocabs + mappedParameterLabels.addAll(gcmdKeywordUtils.getMappedParameterVocabsFromGcmdKeywords(stacCollectionModel.getThemes())); } + stacCollectionModel.getSummaries().setParameterVocabs(new ArrayList<>(mappedParameterLabels)); /* NOTE: The following implementation for platform and organization vocabularies is just a placeholder, not the final version. @@ -204,7 +213,18 @@ protected StacCollectionModel getMappedMetadataValues(String metadataValues) thr } // organisation vocabs - // TODO: the logics for mapping record's organisation vocabs are heavily customised for a manual approach, AI now or later? need dedicated service's method + Set mappedOrganisationLabels = new HashSet<>(); + List organisationLabelsFromThemes = vocabService.extractOrganisationVocabLabelsFromThemes(stacCollectionModel.getThemes()); + if (!organisationLabelsFromThemes.isEmpty()) { + mappedOrganisationLabels.addAll(organisationLabelsFromThemes); + } else { + // manual mapping with custom logics when the record doesn't have existing AODN Organisation Vocabs + List mappedOrganisationVocabsFromContacts = vocabService.getMappedOrganisationVocabsFromContacts(stacCollectionModel.getContacts()); + for (VocabModel vocabModel : mappedOrganisationVocabsFromContacts) { + mappedOrganisationLabels.addAll(extractOrderedLabels(vocabModel)); + } + } + stacCollectionModel.getSummaries().setOrganisationVocabs(new ArrayList<>(mappedOrganisationLabels)); // search_as_you_type enabled fields can be extended SearchSuggestionsModel searchSuggestionsModel = SearchSuggestionsModel.builder() @@ -216,6 +236,19 @@ protected StacCollectionModel getMappedMetadataValues(String metadataValues) thr return stacCollectionModel; } + + private List extractOrderedLabels(VocabModel vocabModel) { + // Priority: DisplayLabel > AltLabels > PrefLabel + if (safeGet(vocabModel::getDisplayLabel).isPresent()) { + return List.of(vocabModel.getDisplayLabel()); + } else if (safeGet(vocabModel::getAltLabels).isPresent()) { + return vocabModel.getAltLabels(); + } else if (safeGet(vocabModel::getLabel).isPresent()) { + return List.of(vocabModel.getLabel()); + } + return List.of(); + } + /** * Use to index a particular UUID, the async is used to limit the number of same function call to avoid flooding * the system. diff --git a/indexer/src/main/java/au/org/aodn/esindexer/service/StacCollectionMapperService.java b/indexer/src/main/java/au/org/aodn/esindexer/service/StacCollectionMapperService.java index d17fbb8b..95b7a5b2 100644 --- a/indexer/src/main/java/au/org/aodn/esindexer/service/StacCollectionMapperService.java +++ b/indexer/src/main/java/au/org/aodn/esindexer/service/StacCollectionMapperService.java @@ -22,7 +22,6 @@ import java.time.*; import java.time.format.DateTimeFormatter; import java.util.*; -import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; diff --git a/indexer/src/main/java/au/org/aodn/esindexer/service/VocabService.java b/indexer/src/main/java/au/org/aodn/esindexer/service/VocabService.java index fa737966..bb308d27 100644 --- a/indexer/src/main/java/au/org/aodn/esindexer/service/VocabService.java +++ b/indexer/src/main/java/au/org/aodn/esindexer/service/VocabService.java @@ -1,21 +1,22 @@ package au.org.aodn.esindexer.service; +import au.org.aodn.ardcvocabs.model.VocabModel; +import au.org.aodn.stac.model.ContactsModel; import au.org.aodn.stac.model.ThemesModel; import com.fasterxml.jackson.databind.JsonNode; import java.io.IOException; import java.util.List; -import java.util.concurrent.ExecutionException; public interface VocabService { List extractVocabLabelsFromThemes(List themes, String vocabType) throws IOException; - + List extractOrganisationVocabLabelsFromThemes(List themes) throws IOException; + List getMappedOrganisationVocabsFromContacts(List contacts) throws IOException; void populateVocabsData() throws IOException; void populateVocabsDataAsync(); void clearParameterVocabCache(); void clearPlatformVocabCache(); void clearOrganisationVocabCache(); - List getParameterVocabs() throws IOException; List getPlatformVocabs() throws IOException; List getOrganisationVocabs() throws IOException; diff --git a/indexer/src/main/java/au/org/aodn/esindexer/service/VocabServiceImpl.java b/indexer/src/main/java/au/org/aodn/esindexer/service/VocabServiceImpl.java index 07c8ac65..f2fea138 100644 --- a/indexer/src/main/java/au/org/aodn/esindexer/service/VocabServiceImpl.java +++ b/indexer/src/main/java/au/org/aodn/esindexer/service/VocabServiceImpl.java @@ -7,6 +7,7 @@ import au.org.aodn.esindexer.configuration.AppConstants; import au.org.aodn.esindexer.exception.DocumentNotFoundException; import au.org.aodn.stac.model.ConceptModel; +import au.org.aodn.stac.model.ContactsModel; import au.org.aodn.stac.model.ThemesModel; import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch._types.ElasticsearchException; @@ -33,6 +34,8 @@ import java.io.IOException; import java.util.*; +import static au.org.aodn.esindexer.utils.CommonUtils.safeGet; + @Slf4j @Service // create and inject a stub proxy to self due to the circular reference http://bit.ly/4aFvYtt @@ -139,6 +142,105 @@ public List extractVocabLabelsFromThemes(List themes, Strin return results; } + public List extractOrganisationVocabLabelsFromThemes(List themes) { + List results = new ArrayList<>(); + themes.stream() + .filter(Objects::nonNull) + .forEach(theme -> safeGet(theme::getTitle) + .filter(title -> title.toLowerCase().contains("aodn organisation vocabulary")) + .ifPresent(title -> theme.getConcepts().stream() + .filter(concept -> concept.getId() != null && !concept.getId().isEmpty()) + .forEach(concept -> results.add(concept.getId())) + )); + return results; + } + + public List getMappedOrganisationVocabsFromContacts(List contacts) throws IOException { + List contactOrgs = new ArrayList<>(); + String citationRole = "citation"; + String pointOfContactRole = "pointOfContact"; + + // Top priority to citation: cit:citedResponsibleParty> + contacts.stream() + .filter(contact -> safeGet(contact::getRoles) + .filter(roles -> roles.contains(citationRole)) + .isPresent()) + .map(ContactsModel::getOrganization) + .filter(Objects::nonNull) + .forEach(contactOrgs::add); + + // Second priority if contactOrgs is still empty + if (contactOrgs.isEmpty()) { + contacts.stream() + .filter(contact -> safeGet(contact::getRoles) + .filter(roles -> roles.contains(pointOfContactRole)) + .isPresent()) + .map(ContactsModel::getOrganization) + .filter(Objects::nonNull) + .forEach(contactOrgs::add); + } + + List results = new ArrayList<>(); + for (JsonNode orgVocab : self.getOrganisationVocabs()) { + if (orgVocab != null) { + try { + VocabModel vocabModel = indexerObjectMapper.treeToValue(orgVocab, VocabModel.class); + dfsSearch(vocabModel, contactOrgs, results); + } catch (JsonProcessingException e) { + log.error("Error deserializing JsonNode to VocabModel", e); + } + } + } + + return results; + } + + /** + * Performs a Depth-First Search (DFS) to find vocab matches. + * DFS is well-suited for hierarchical structures due to its memory efficiency + * and ability to capture matches at any depth while allowing early exits within branches. + * + * @param currentVocab the current vocab node being processed + * @param contactOrgs the list of organisation names to match against + * @param results the list to store matching vocab nodes + */ + private void dfsSearch(VocabModel currentVocab, List contactOrgs, List results) { + // Skip vocabs that have replaced_by field non-null + if (currentVocab.getReplacedBy() != null) return; + + // Check labels in priority order and add to results if a match is found + if (findAndAddMatch(Collections.singletonList(currentVocab.getDisplayLabel()), contactOrgs) || + findAndAddMatch(currentVocab.getAltLabels(), contactOrgs) || + findAndAddMatch(Collections.singletonList(currentVocab.getLabel()), contactOrgs) || + findAndAddMatch(currentVocab.getHiddenLabels(), contactOrgs)) { + log.info("Match found: {}", currentVocab); + results.add(currentVocab); + return; + } + + // Recursively search narrower nodes + List narrowerNodes = currentVocab.getNarrower(); + if (narrowerNodes != null) { + for (VocabModel narrowerNode : narrowerNodes) { + dfsSearch(narrowerNode, contactOrgs, results); + } + } + } + + private boolean findAndAddMatch(List labels, List contactOrgs) { + if (labels == null || labels.isEmpty()) return false; + for (String label : labels) { + if (label != null) { + for (String contactOrg : contactOrgs) { + if (label.equalsIgnoreCase(contactOrg)) { + return true; + } + } + } + } + return false; + } + protected List groupVocabsFromEsByKey(String key) throws IOException { List vocabs = new ArrayList<>(); log.info("Fetching {} vocabularies from {}", key, vocabsIndexName); diff --git a/indexer/src/main/java/au/org/aodn/esindexer/utils/GcmdKeywordUtils.java b/indexer/src/main/java/au/org/aodn/esindexer/utils/GcmdKeywordUtils.java index b11f7f60..fed11404 100644 --- a/indexer/src/main/java/au/org/aodn/esindexer/utils/GcmdKeywordUtils.java +++ b/indexer/src/main/java/au/org/aodn/esindexer/utils/GcmdKeywordUtils.java @@ -3,6 +3,9 @@ import au.org.aodn.stac.model.ConceptModel; import au.org.aodn.stac.model.ThemesModel; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVParser; +import org.apache.commons.csv.CSVRecord; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; @@ -52,23 +55,20 @@ private static String readResourceFile(String path) throws IOException { // Load the CSV file into a HashMap private void loadCsvToMap(String path) { try { - log.info("Loading GCMD mapping contents from CSV resource: {}", path); - // Read the file as a single String - String fileContent = readResourceFile(path); - - // Split the content into lines - String[] lines = fileContent.split("\\r?\\n"); - - // Process each line - for (String line : lines) { - // Split the line into key and value based on comma - String[] parts = line.split(","); - if (parts.length >= 2) { - String key = parts[0].trim(); - String value = parts[1].trim(); - gcmdMapping.put(key, value); + // Read the file content using Apache Commons CSV + Resource resource = new ClassPathResource(path); + try (InputStream inputStream = resource.getInputStream(); + Reader reader = new InputStreamReader(inputStream); + CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT)) { + + for (CSVRecord record : csvParser) { + if (record.size() >= 2) { // Ensure at least key-value pairs exist + String key = record.get(0).trim(); + String value = record.get(1).trim(); + gcmdMapping.put(key, value); + } } } diff --git a/indexer/src/main/java/au/org/aodn/esindexer/utils/VocabsIndexUtils.java b/indexer/src/main/java/au/org/aodn/esindexer/utils/VocabsIndexUtils.java index dd1533a0..155d921e 100644 --- a/indexer/src/main/java/au/org/aodn/esindexer/utils/VocabsIndexUtils.java +++ b/indexer/src/main/java/au/org/aodn/esindexer/utils/VocabsIndexUtils.java @@ -5,7 +5,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Profile; import org.springframework.scheduling.annotation.Scheduled; import java.io.IOException; diff --git a/indexer/src/test/java/au/org/aodn/esindexer/service/GeoNetworkServiceIT.java b/indexer/src/test/java/au/org/aodn/esindexer/service/GeoNetworkServiceIT.java index fe5fcfb5..713ac89d 100644 --- a/indexer/src/test/java/au/org/aodn/esindexer/service/GeoNetworkServiceIT.java +++ b/indexer/src/test/java/au/org/aodn/esindexer/service/GeoNetworkServiceIT.java @@ -8,7 +8,6 @@ import au.org.aodn.esindexer.utils.AssociatedRecordsUtil; import au.org.aodn.esindexer.model.RelationType; import au.org.aodn.esindexer.utils.JaxbUtils; -import au.org.aodn.esindexer.utils.StringUtil; import au.org.aodn.metadata.iso19115_3_2018.MDMetadataType; import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.core.SearchRequest; diff --git a/indexer/src/test/java/au/org/aodn/esindexer/utils/StringUtilTest.java b/indexer/src/test/java/au/org/aodn/esindexer/utils/StringUtilTest.java index 7e0b606f..f81974fc 100644 --- a/indexer/src/test/java/au/org/aodn/esindexer/utils/StringUtilTest.java +++ b/indexer/src/test/java/au/org/aodn/esindexer/utils/StringUtilTest.java @@ -1,12 +1,10 @@ package au.org.aodn.esindexer.utils; -import au.org.aodn.esindexer.utils.StringUtil; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import java.nio.charset.StandardCharsets; -import java.util.List; public class StringUtilTest { @Test diff --git a/indexer/src/test/resources/canned/abstract_resposibilty_null_stac.json b/indexer/src/test/resources/canned/abstract_resposibilty_null_stac.json index 65063faa..84db06ee 100644 --- a/indexer/src/test/resources/canned/abstract_resposibilty_null_stac.json +++ b/indexer/src/test/resources/canned/abstract_resposibilty_null_stac.json @@ -29,7 +29,9 @@ "temporal" : [ { "start" : null, "end" : null - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "metadata" ], diff --git a/indexer/src/test/resources/canned/associated/self.json b/indexer/src/test/resources/canned/associated/self.json index a8ba5fc6..49cf3870 100644 --- a/indexer/src/test/resources/canned/associated/self.json +++ b/indexer/src/test/resources/canned/associated/self.json @@ -41,7 +41,9 @@ }, "temporal" : [ { "start" : "2007-04-03T06:00:00Z" - } ] + } ], + "parameter_vocabs" : [ "ocean biota", "conductivity", "temperature" ], + "organisation_vocabs" : [ "Integrated Marine Observing System (IMOS)" ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/keywords_null_stac.json b/indexer/src/test/resources/canned/keywords_null_stac.json index 04f248c3..874761a9 100644 --- a/indexer/src/test/resources/canned/keywords_null_stac.json +++ b/indexer/src/test/resources/canned/keywords_null_stac.json @@ -32,7 +32,9 @@ "temporal" : [ { "start" : "2018-09-13T14:00:00Z", "end" : null - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "resourceProvider", "about" ], diff --git a/indexer/src/test/resources/canned/sample10_stac.json b/indexer/src/test/resources/canned/sample10_stac.json index d011f5ea..c08f02db 100644 --- a/indexer/src/test/resources/canned/sample10_stac.json +++ b/indexer/src/test/resources/canned/sample10_stac.json @@ -172,7 +172,9 @@ "temporal" : [ { "start" : "2007-09-08T14:00:00Z", "end" : null - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample11_stac.json b/indexer/src/test/resources/canned/sample11_stac.json index bc0dc43f..b01fe9af 100644 --- a/indexer/src/test/resources/canned/sample11_stac.json +++ b/indexer/src/test/resources/canned/sample11_stac.json @@ -78,7 +78,9 @@ "temporal" : [ { "start" : "2008-09-28T14:00:00Z", "end" : null - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample12_stac.json b/indexer/src/test/resources/canned/sample12_stac.json index 82c95d2d..9334617b 100644 --- a/indexer/src/test/resources/canned/sample12_stac.json +++ b/indexer/src/test/resources/canned/sample12_stac.json @@ -33,7 +33,9 @@ "temporal" : [ { "start" : "2012-04-15T14:00:00Z", "end" : "2012-04-30T13:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "custodian", "about" ], diff --git a/indexer/src/test/resources/canned/sample13_stac.json b/indexer/src/test/resources/canned/sample13_stac.json index 01165e53..0b5125ce 100644 --- a/indexer/src/test/resources/canned/sample13_stac.json +++ b/indexer/src/test/resources/canned/sample13_stac.json @@ -32,7 +32,9 @@ "temporal" : [ { "start" : "2016-11-17T13:00:00Z", "end" : "2016-11-20T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "processor", "metadata" ], diff --git a/indexer/src/test/resources/canned/sample14_stac.json b/indexer/src/test/resources/canned/sample14_stac.json index 2c1a5ff1..6bc82dea 100644 --- a/indexer/src/test/resources/canned/sample14_stac.json +++ b/indexer/src/test/resources/canned/sample14_stac.json @@ -35,7 +35,9 @@ "temporal" : [ { "start" : "2010-09-20T15:14:00Z", "end" : "2010-10-13T07:59:00Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample15_stac.json b/indexer/src/test/resources/canned/sample15_stac.json index 79d3cd5e..8eaa1652 100644 --- a/indexer/src/test/resources/canned/sample15_stac.json +++ b/indexer/src/test/resources/canned/sample15_stac.json @@ -34,7 +34,9 @@ "temporal" : [ { "start" : "1984-10-31T13:00:00Z", "end" : "2014-12-30T13:00:00Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample16_stac.json b/indexer/src/test/resources/canned/sample16_stac.json index a9e97fed..3194abd5 100644 --- a/indexer/src/test/resources/canned/sample16_stac.json +++ b/indexer/src/test/resources/canned/sample16_stac.json @@ -34,7 +34,9 @@ "temporal" : [ { "start" : "1989-01-11T13:00:00Z", "end" : "1989-11-15T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample17_stac.json b/indexer/src/test/resources/canned/sample17_stac.json index 78078ea7..47ccfd6c 100644 --- a/indexer/src/test/resources/canned/sample17_stac.json +++ b/indexer/src/test/resources/canned/sample17_stac.json @@ -17,7 +17,9 @@ "creation" : "2015-02-02T15:39:42", "revision" : "2018-11-14T15:23:41", "update_frequency" : "other", - "temporal" : [ ] + "temporal" : [ ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "about" ], diff --git a/indexer/src/test/resources/canned/sample18_stac.json b/indexer/src/test/resources/canned/sample18_stac.json index cfed391e..efdc9fd2 100644 --- a/indexer/src/test/resources/canned/sample18_stac.json +++ b/indexer/src/test/resources/canned/sample18_stac.json @@ -271,7 +271,9 @@ "temporal" : [ { "start" : "2002-11-30T13:00:00Z", "end" : null - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "principalInvestigator", "about" ], diff --git a/indexer/src/test/resources/canned/sample4_stac.json b/indexer/src/test/resources/canned/sample4_stac.json index 2acdb49e..08c1d3a0 100644 --- a/indexer/src/test/resources/canned/sample4_stac.json +++ b/indexer/src/test/resources/canned/sample4_stac.json @@ -43,7 +43,8 @@ "start" : "1870-07-16T14:10:44Z", "end" : "2013-06-17T13:59:59Z" } ], - "parameter_vocabs" : [ "salinity", "chemical", "carbon", "temperature", "ph (total scale) of the water body", "alkalinity" ] + "parameter_vocabs" : [ "salinity", "carbon", "temperature", "alkalinity", "ph (total scale) of the water body" ], + "organisation_vocabs" : [ "CSIRO Oceans and Atmosphere", "National Institute for Environmental Studies (NIES)", "Climate Change Research Centre (CCRC)" ] }, "contacts" : [ { "roles" : [ "principalInvestigator", "about" ], diff --git a/indexer/src/test/resources/canned/sample5_stac.json b/indexer/src/test/resources/canned/sample5_stac.json index 96243d3a..0235ea4a 100644 --- a/indexer/src/test/resources/canned/sample5_stac.json +++ b/indexer/src/test/resources/canned/sample5_stac.json @@ -35,7 +35,9 @@ "temporal" : [ { "start" : "2010-01-21T01:00:00Z", "end" : "2017-03-27T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ "current" ], + "organisation_vocabs" : [ "Integrated Marine Observing System (IMOS)" ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample6_stac.json b/indexer/src/test/resources/canned/sample6_stac.json index 36942ad7..6fed54fc 100644 --- a/indexer/src/test/resources/canned/sample6_stac.json +++ b/indexer/src/test/resources/canned/sample6_stac.json @@ -36,8 +36,9 @@ "start" : "2024-01-01T13:00:00Z", "end" : "2024-03-05T12:59:59Z" } ], - "parameter_vocabs" : [ "salinity", "nutrient", "chlorophyll", "air temperature", "precipitation and evaporation", "wave", "air-sea fluxes", "current", "chemical", "air pressure", "carbon", "physical-atmosphere", "bathymetry", "temperature", "wind", "ocean biota", "density", "water pressure" ], - "platform_vocabs" : [ "research vessel" ] + "parameter_vocabs" : [ "salinity", "current", "ocean biota", "density", "bathymetry", "temperature", "water pressure" ], + "platform_vocabs" : [ "research vessel" ], + "organisation_vocabs" : [ "CSIRO Oceans and Atmosphere" ] }, "contacts" : [ { "roles" : [ "custodian", "about" ], diff --git a/indexer/src/test/resources/canned/sample7_stac.json b/indexer/src/test/resources/canned/sample7_stac.json index ed84afe7..c299886a 100644 --- a/indexer/src/test/resources/canned/sample7_stac.json +++ b/indexer/src/test/resources/canned/sample7_stac.json @@ -95,7 +95,9 @@ "temporal" : [ { "start" : "2021-09-30T14:00:00Z", "end" : "2022-12-31T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ "Australian Institute of Marine Science (AIMS)" ] }, "contacts" : [ { "roles" : [ "principalInvestigator", "about" ], diff --git a/indexer/src/test/resources/canned/sample7_stac_no_es.json b/indexer/src/test/resources/canned/sample7_stac_no_es.json index 3f5e512d..abcdfa50 100644 --- a/indexer/src/test/resources/canned/sample7_stac_no_es.json +++ b/indexer/src/test/resources/canned/sample7_stac_no_es.json @@ -94,7 +94,9 @@ "temporal" : [ { "start" : "2021-09-30T14:00:00Z", "end" : "2022-12-31T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "principalInvestigator", "about" ], diff --git a/indexer/src/test/resources/canned/sample8_stac.json b/indexer/src/test/resources/canned/sample8_stac.json index 89364c42..aa40a086 100644 --- a/indexer/src/test/resources/canned/sample8_stac.json +++ b/indexer/src/test/resources/canned/sample8_stac.json @@ -34,7 +34,9 @@ "temporal" : [ { "start" : "2019-10-18T13:00:00Z", "end" : "2019-12-17T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample9_stac.json b/indexer/src/test/resources/canned/sample9_stac.json index ca9ccd0d..a1aca8e1 100644 --- a/indexer/src/test/resources/canned/sample9_stac.json +++ b/indexer/src/test/resources/canned/sample9_stac.json @@ -40,7 +40,9 @@ "temporal" : [ { "start" : "2018-10-28T13:00:00Z", "end" : "2019-11-20T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "principalInvestigator", "about" ], diff --git a/indexer/src/test/resources/canned/sample_abstract_citation_null_stac.json b/indexer/src/test/resources/canned/sample_abstract_citation_null_stac.json index b8e46450..4cb5d2d6 100644 --- a/indexer/src/test/resources/canned/sample_abstract_citation_null_stac.json +++ b/indexer/src/test/resources/canned/sample_abstract_citation_null_stac.json @@ -29,7 +29,9 @@ "temporal" : [ { "start" : "2017-01-13T13:00:00Z", "end" : "2016-03-04T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample_geoenum_publication_stac.json b/indexer/src/test/resources/canned/sample_geoenum_publication_stac.json index f260f4d0..fc2b9413 100644 --- a/indexer/src/test/resources/canned/sample_geoenum_publication_stac.json +++ b/indexer/src/test/resources/canned/sample_geoenum_publication_stac.json @@ -34,7 +34,9 @@ "temporal" : [ { "start" : "2021-10-12T13:00:00Z", "end" : "2022-10-05T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample_incorrect_projection_stac.json b/indexer/src/test/resources/canned/sample_incorrect_projection_stac.json index b5462339..b4f200d3 100644 --- a/indexer/src/test/resources/canned/sample_incorrect_projection_stac.json +++ b/indexer/src/test/resources/canned/sample_incorrect_projection_stac.json @@ -76,7 +76,9 @@ "temporal" : [ { "start" : "2003-03-31T14:00:00Z", "end" : "2013-03-01T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "author", "about" ], diff --git a/indexer/src/test/resources/canned/sample_invalid_polygon.json b/indexer/src/test/resources/canned/sample_invalid_polygon.json index ba48c1af..8b5aad77 100644 --- a/indexer/src/test/resources/canned/sample_invalid_polygon.json +++ b/indexer/src/test/resources/canned/sample_invalid_polygon.json @@ -1,254 +1,167 @@ { - "title": "Natural Resource Management (NRM) areas flowing into the Great Barrier Reef Marine Park 2012 (NERP TE 13.1 eAtlas AIMS, source: Dept. Env.)", - "description": "This dataset corresponds to the Natural Resource Management (NRM) Regions corresponding to river catchments neighbouring the Great Barrier Reef Marine Park. The original aim of this dataset was to show river basins that flow into the Great Barrier Reef (GBR) Marine Park, grouping them by their NRM region. The NRM region boundaries already mostly correspond to a grouping of river basin boundaries and so this regrouping of river basins was unnecessary. The NRM regions did however need some adjustments as they extend out to sea and the Cape York NRM region covers river basins on the east and west coast of Cape York and thus contains river basins that do not flow into the GBR. For this reason the Cape York NRM region was split along the Great Dividing range to remove the western catchments so that only eastern catchments were kept. In addition to this the NRM region polygons were split into the mainland and sea areas to allow this dataset to be used for easy map creation. Because of these changes the polygons in this dataset do not correspond to the NRM boundaries, but are based on the NRM boundaries.\n\n Since 2006, NRM regions have been important in the delivery of Australian Government funding initiatives including Caring for our Country, the Natural Heritage Trust, the National Landcare Program, the Environmental Stewardship Program and the Working on Country Indigenous land and sea ranger program.\n\n The NRM regions included in this dataset: Burnett Mary, Fitzroy, Mackay Whitsunday, Burdekin, Wet Tropics and Cape York (eastern half). Since this dataset was only including catchments neighbouring the marine park it does not include the Torres Strait NRM region and only includes the eastern half of Cape York. The NRM regions were split into mainland and sea features using the Australian Coast 100k 2004 dataset.\n\n This dataset was created for the eAtlas and is not an authoritative source of the NRM boundaries. It should be used for research or display purposes only. It should be noted that from time to time the states and/or territories may revise their regional boundaries in accordance with local needs and therefore alterations to either the attribution or boundaries of the data may occur in the future.\n\n This dataset was derived from River Basins 1997 (Geoscience Australia), NRM Regions 2012 (Department of Environment) and Australian Coast 100k 2004 (Geoscience Australia) datasets.\n\n\n Processing:\n\n Using ArcMap a copy of the NRM regions shapefile was made (NRM_Regions_2012_GBRMP) and editing enabled. The NRM regions of interest were selected. This selection was then inverted to select all the features we didn't want to keep. These were then deleted.\n\n The River Basins 1997 dataset was loaded into ArcMap and a transformation was chosen to convert the ADG66 data into GDA 94. The coast was checked against the Coast 100k dataset to ensure the transformation was correct.\n\n The Cape York NRM region was split in two by tracing the catchments along the Great Dividing range based on the River Basins 1997 (Geoscience Australia) dataset. The tip of the eastern side basin of Cape York was drawn to the boundary vertically. The western side was then selected and deleted.\n\n The Coast 100k 2004 dataset was added and an a Definition Query was setup to only keep the mainland features (\"FEAT_CODE\" = 'mainland').\n\n This was then used to split the NRM_Regions_2010_GBRMP using the Split Polygons tool from the Advanced Editing menu.\n\n A new attribute (FEAT_CODE) was then added to the shapefile to indicate if the feature was part of the mainland ('mainland') or part of the marine boundary ('sea').\n\n The Shape_Area attribute was renamed to SHAPE_Area by removing and recreating it. Also Leng_Units and Area_Units was added as text fields.\n\n The Data Frame projection was changed to GDA 1994 Australia Albers equal area projection for recalculate the Shape areas and length. This was done using the Calculate Geometry tool. The The AREA_DESC attribute was removed as it no longer made sense.\n\n The shapefile was then renamed to GBR_eAtlas_NRM_Regions_2012_GBRMP.shp.\n\n NRM_Regions_2012_GBRMP: Natural Resource Management (NRM) Regions (2012), Australian Government Department of the Environment, ERIN DIG, Available from http://www.environment.gov.au/fed/catalog/search/resource/details.page?uuid=%7BD92421DF-37D9-4194-854C-FBD123747A71%7D", - "extent": { - "bbox": [], - "temporal": [ - [ - null, - null - ] - ] + "title" : "Natural Resource Management (NRM) areas flowing into the Great Barrier Reef Marine Park 2012 (NERP TE 13.1 eAtlas AIMS, source: Dept. Env.)", + "description" : "This dataset corresponds to the Natural Resource Management (NRM) Regions corresponding to river catchments neighbouring the Great Barrier Reef Marine Park. The original aim of this dataset was to show river basins that flow into the Great Barrier Reef (GBR) Marine Park, grouping them by their NRM region. The NRM region boundaries already mostly correspond to a grouping of river basin boundaries and so this regrouping of river basins was unnecessary. The NRM regions did however need some adjustments as they extend out to sea and the Cape York NRM region covers river basins on the east and west coast of Cape York and thus contains river basins that do not flow into the GBR. For this reason the Cape York NRM region was split along the Great Dividing range to remove the western catchments so that only eastern catchments were kept. In addition to this the NRM region polygons were split into the mainland and sea areas to allow this dataset to be used for easy map creation. Because of these changes the polygons in this dataset do not correspond to the NRM boundaries, but are based on the NRM boundaries.\n\n Since 2006, NRM regions have been important in the delivery of Australian Government funding initiatives including Caring for our Country, the Natural Heritage Trust, the National Landcare Program, the Environmental Stewardship Program and the Working on Country Indigenous land and sea ranger program.\n\n The NRM regions included in this dataset: Burnett Mary, Fitzroy, Mackay Whitsunday, Burdekin, Wet Tropics and Cape York (eastern half). Since this dataset was only including catchments neighbouring the marine park it does not include the Torres Strait NRM region and only includes the eastern half of Cape York. The NRM regions were split into mainland and sea features using the Australian Coast 100k 2004 dataset.\n\n This dataset was created for the eAtlas and is not an authoritative source of the NRM boundaries. It should be used for research or display purposes only. It should be noted that from time to time the states and/or territories may revise their regional boundaries in accordance with local needs and therefore alterations to either the attribution or boundaries of the data may occur in the future.\n\n This dataset was derived from River Basins 1997 (Geoscience Australia), NRM Regions 2012 (Department of Environment) and Australian Coast 100k 2004 (Geoscience Australia) datasets.\n\n\n Processing:\n\n Using ArcMap a copy of the NRM regions shapefile was made (NRM_Regions_2012_GBRMP) and editing enabled. The NRM regions of interest were selected. This selection was then inverted to select all the features we didn't want to keep. These were then deleted.\n\n The River Basins 1997 dataset was loaded into ArcMap and a transformation was chosen to convert the ADG66 data into GDA 94. The coast was checked against the Coast 100k dataset to ensure the transformation was correct.\n\n The Cape York NRM region was split in two by tracing the catchments along the Great Dividing range based on the River Basins 1997 (Geoscience Australia) dataset. The tip of the eastern side basin of Cape York was drawn to the boundary vertically. The western side was then selected and deleted.\n\n The Coast 100k 2004 dataset was added and an a Definition Query was setup to only keep the mainland features (\"FEAT_CODE\" = 'mainland').\n\n This was then used to split the NRM_Regions_2010_GBRMP using the Split Polygons tool from the Advanced Editing menu.\n\n A new attribute (FEAT_CODE) was then added to the shapefile to indicate if the feature was part of the mainland ('mainland') or part of the marine boundary ('sea').\n\n The Shape_Area attribute was renamed to SHAPE_Area by removing and recreating it. Also Leng_Units and Area_Units was added as text fields.\n\n The Data Frame projection was changed to GDA 1994 Australia Albers equal area projection for recalculate the Shape areas and length. This was done using the Calculate Geometry tool. The The AREA_DESC attribute was removed as it no longer made sense.\n\n The shapefile was then renamed to GBR_eAtlas_NRM_Regions_2012_GBRMP.shp.\n\n NRM_Regions_2012_GBRMP: Natural Resource Management (NRM) Regions (2012), Australian Government Department of the Environment, ERIN DIG, Available from http://www.environment.gov.au/fed/catalog/search/resource/details.page?uuid=%7BD92421DF-37D9-4194-854C-FBD123747A71%7D", + "extent" : { + "bbox" : [ ], + "temporal" : [ [ null, null ] ] }, - "summaries": { - "score": 1, - "status": "completed", - "credits": [ - "Department of the Environment, Geoscience Australia" - ], - "scope": { - "code": "dataset", - "name": "" + "summaries" : { + "score" : 1, + "status" : "completed", + "credits" : [ "Department of the Environment, Geoscience Australia" ], + "scope" : { + "code" : "dataset", + "name" : "" }, - "creation": "2016-08-02T14:43:41", - "revision": "2023-09-18T08:11:14", - "update_frequency": "completed", - "temporal": [] + "creation" : "2016-08-02T14:43:41", + "revision" : "2023-09-18T08:11:14", + "update_frequency" : "completed", + "temporal" : [ ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, - "contacts": [ - { - "roles": [ - "pointOfContact", - "about" - ], - "organization": "Australian Institute of Marine Science (AIMS)", - "name": "Lawrey, Eric, Dr", - "position": "eAtlas Project Leader", - "emails": [ - "e-atlas@aims.gov.au" - ], - "addresses": [ - { - "deliveryPoint": [ - "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" - ], - "city": "Townsville", - "country": "Australia", - "postalCode": "4810", - "administrativeArea": "Queensland" - } - ], - "phones": [ - { - "roles": [ - "voice" - ], - "value": "+61 7 4753 4444" - }, - { - "roles": [ - "facsimile" - ], - "value": "" - } - ], - "links": [ - { - "href": "https://eatlas.org.au", - "type": "WWW:LINK-1.0-http--link", - "title": "eAtlas portal" - } - ] - }, - { - "roles": [ - "pointOfContact", - "metadata" - ], - "organization": "Australian Institute of Marine Science (AIMS)", - "name": "eAtlas Data Manager", - "position": "", - "emails": [ - "e-atlas@aims.gov.au" - ], - "addresses": [ - { - "deliveryPoint": [ - "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" - ], - "city": "Townsville", - "country": "Australia", - "postalCode": "4810", - "administrativeArea": "Queensland" - } - ], - "phones": [ - { - "roles": [ - "voice" - ], - "value": "+61 7 4753 4444" - }, - { - "roles": [ - "facsimile" - ], - "value": "" - } - ], - "links": [ - { - "href": "https://eatlas.org.au", - "type": "WWW:LINK-1.0-http--link", - "title": "eAtlas portal" - } - ] - }, - { - "roles": [ - "principalInvestigator", - "citation" - ], - "organization": "Australian Institute of Marine Science (AIMS)", - "name": "Lawrey, Eric, Dr", - "position": "eAtlas Project Leader", - "emails": [ - "e-atlas@aims.gov.au" - ], - "addresses": [ - { - "deliveryPoint": [ - "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" - ], - "city": "Townsville", - "country": "Australia", - "postalCode": "4810", - "administrativeArea": "Queensland" - } - ], - "phones": [ - { - "roles": [ - "voice" - ], - "value": "+61 7 4753 4444" - } - ], - "links": [ - { - "href": "https://eatlas.org.au", - "type": "WWW:LINK-1.0-http--link", - "title": "eAtlas portal" - } - ] - } - ], - "languages": [ - { - "code": "eng", - "name": "English" - } - ], - "links": [ - { - "href": "https://maps.eatlas.org.au/index.html?intro=false&z=6&ll=148.79651,-18.50602&l0=ea_ea%3AGBR_NERP-TE-13-1_eAtlas_NRM-Regions-GBRMP-2012,ea_ea-be%3AWorld_Bright-Earth-e-Atlas-basemap&s0=GBR_NRM-Regions-GBRMP_Data-preview", - "rel": "related", - "type": "text/html", - "title": "Interactive map of this dataset" - }, - { - "href": "https://maps.eatlas.org.au/maps/wms", - "rel": "wms", - "type": "", - "title": "ea:GBR_NERP-TE-13-1_eAtlas_NRM-Regions-GBRMP-2012" - }, - { - "href": "https://eatlas.org.au/data/uuid/71127e4d-9f14-4c57-9845-1dce0b541d8d", - "rel": "related", - "type": "", - "title": "eAtlas Web Mapping Service (WMS) (AIMS)" - }, - { - "href": "https://eatlas.org.au/nerp-te/aims-eatlas-13-1", - "rel": "related", - "type": "", - "title": "eAtlas project page" - }, - { - "href": "http://www.environment.gov.au/fed/catalog/search/resource/details.page?uuid=%7BD92421DF-37D9-4194-854C-FBD123747A71%7D", - "rel": "related", - "type": "", - "title": "NRM_Regions_2012_GBRMP: Natural Resource Management (NRM) Regions (2012), Australian Government Department of the Environment, ERIN DIG" - }, - { - "href": "https://nextcloud.eatlas.org.au/apps/sharealias/a/gbr_eatlas_nrm_regions_gbrmp_2012-zip", - "rel": "related", - "type": "", - "title": "Shapefile + Metadata [Zip 1.5 MB]" - }, - { - "href": "https://eatlas.org.au/data/uuid/053f0b32-47cc-4a3f-8325-b37feb33c0e3", - "rel": "describedby", - "type": "text/html", - "title": "Full metadata link" - }, - { - "href": "http://i.creativecommons.org/l/by/3.0/au/88x31.png", - "rel": "license", - "type": "image/png" - }, - { - "href": "http://creativecommons.org/licenses/by/3.0/au/", - "rel": "license", - "type": "text/html" - } - ], - "license": "Creative Commons Attribution 3.0 Australia License", - "providers": [ - { - "name": "Australian Institute of Marine Science (AIMS)", - "roles": [ - "pointOfContact" - ], - "url": "https://eatlas.org.au" - } - ], - "themes": [ - { - "concepts": [ - { - "id": "marine", - "url": null - } - ], - "scheme": "", - "description": "", - "title": "Keywords (Temporal)" - } - ], - "id": "053f0b32-47cc-4a3f-8325-b37feb33c0e3", - "search_suggestions": { - "abstract_phrases": [] + "contacts" : [ { + "roles" : [ "pointOfContact", "about" ], + "organization" : "Australian Institute of Marine Science (AIMS)", + "name" : "Lawrey, Eric, Dr", + "position" : "eAtlas Project Leader", + "emails" : [ "e-atlas@aims.gov.au" ], + "addresses" : [ { + "deliveryPoint" : [ "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" ], + "city" : "Townsville", + "country" : "Australia", + "postalCode" : "4810", + "administrativeArea" : "Queensland" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "+61 7 4753 4444" + }, { + "roles" : [ "facsimile" ], + "value" : "" + } ], + "links" : [ { + "href" : "https://eatlas.org.au", + "type" : "WWW:LINK-1.0-http--link", + "title" : "eAtlas portal" + } ] + }, { + "roles" : [ "pointOfContact", "metadata" ], + "organization" : "Australian Institute of Marine Science (AIMS)", + "name" : "eAtlas Data Manager", + "position" : "", + "emails" : [ "e-atlas@aims.gov.au" ], + "addresses" : [ { + "deliveryPoint" : [ "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" ], + "city" : "Townsville", + "country" : "Australia", + "postalCode" : "4810", + "administrativeArea" : "Queensland" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "+61 7 4753 4444" + }, { + "roles" : [ "facsimile" ], + "value" : "" + } ], + "links" : [ { + "href" : "https://eatlas.org.au", + "type" : "WWW:LINK-1.0-http--link", + "title" : "eAtlas portal" + } ] + }, { + "roles" : [ "principalInvestigator", "citation" ], + "organization" : "Australian Institute of Marine Science (AIMS)", + "name" : "Lawrey, Eric, Dr", + "position" : "eAtlas Project Leader", + "emails" : [ "e-atlas@aims.gov.au" ], + "addresses" : [ { + "deliveryPoint" : [ "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" ], + "city" : "Townsville", + "country" : "Australia", + "postalCode" : "4810", + "administrativeArea" : "Queensland" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "+61 7 4753 4444" + } ], + "links" : [ { + "href" : "https://eatlas.org.au", + "type" : "WWW:LINK-1.0-http--link", + "title" : "eAtlas portal" + } ] + } ], + "languages" : [ { + "code" : "eng", + "name" : "English" + } ], + "links" : [ { + "href" : "https://maps.eatlas.org.au/index.html?intro=false&z=6&ll=148.79651,-18.50602&l0=ea_ea%3AGBR_NERP-TE-13-1_eAtlas_NRM-Regions-GBRMP-2012,ea_ea-be%3AWorld_Bright-Earth-e-Atlas-basemap&s0=GBR_NRM-Regions-GBRMP_Data-preview", + "rel" : "related", + "type" : "text/html", + "title" : "Interactive map of this dataset" + }, { + "href" : "https://maps.eatlas.org.au/maps/wms", + "rel" : "wms", + "type" : "", + "title" : "ea:GBR_NERP-TE-13-1_eAtlas_NRM-Regions-GBRMP-2012" + }, { + "href" : "https://eatlas.org.au/data/uuid/71127e4d-9f14-4c57-9845-1dce0b541d8d", + "rel" : "related", + "type" : "", + "title" : "eAtlas Web Mapping Service (WMS) (AIMS)" + }, { + "href" : "https://eatlas.org.au/nerp-te/aims-eatlas-13-1", + "rel" : "related", + "type" : "", + "title" : "eAtlas project page" + }, { + "href" : "http://www.environment.gov.au/fed/catalog/search/resource/details.page?uuid=%7BD92421DF-37D9-4194-854C-FBD123747A71%7D", + "rel" : "related", + "type" : "", + "title" : "NRM_Regions_2012_GBRMP: Natural Resource Management (NRM) Regions (2012), Australian Government Department of the Environment, ERIN DIG" + }, { + "href" : "https://nextcloud.eatlas.org.au/apps/sharealias/a/gbr_eatlas_nrm_regions_gbrmp_2012-zip", + "rel" : "related", + "type" : "", + "title" : "Shapefile + Metadata [Zip 1.5 MB]" + }, { + "href" : "https://eatlas.org.au/data/uuid/053f0b32-47cc-4a3f-8325-b37feb33c0e3", + "rel" : "describedby", + "type" : "text/html", + "title" : "Full metadata link" + }, { + "href" : "http://i.creativecommons.org/l/by/3.0/au/88x31.png", + "rel" : "license", + "type" : "image/png" + }, { + "href" : "http://creativecommons.org/licenses/by/3.0/au/", + "rel" : "license", + "type" : "text/html" + } ], + "license" : "Creative Commons Attribution 3.0 Australia License", + "providers" : [ { + "name" : "Australian Institute of Marine Science (AIMS)", + "roles" : [ "pointOfContact" ], + "url" : "https://eatlas.org.au" + } ], + "themes" : [ { + "concepts" : [ { + "id" : "marine", + "url" : null + } ], + "scheme" : "", + "description" : "", + "title" : "Keywords (Temporal)" + } ], + "id" : "053f0b32-47cc-4a3f-8325-b37feb33c0e3", + "search_suggestions" : { + "abstract_phrases" : [ ] }, - "sci:citation": "{\"suggestedCitation\":null,\"useLimitations\":null,\"otherConstraints\":null}", - "type": "Collection", - "stac_version": "1.0.0", - "stac_extensions": [ - "https://stac-extensions.github.io/scientific/v1.0.0/schema.json", - "https://stac-extensions.github.io/contacts/v0.1.1/schema.json", - "https://stac-extensions.github.io/projection/v1.1.0/schema.json", - "https://stac-extensions.github.io/language/v1.0.0/schema.json", - "https://stac-extensions.github.io/themes/v1.0.0/schema.json", - "https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json" - ] + "sci:citation" : "{\"suggestedCitation\":null,\"useLimitations\":null,\"otherConstraints\":null}", + "type" : "Collection", + "stac_version" : "1.0.0", + "stac_extensions" : [ "https://stac-extensions.github.io/scientific/v1.0.0/schema.json", "https://stac-extensions.github.io/contacts/v0.1.1/schema.json", "https://stac-extensions.github.io/projection/v1.1.0/schema.json", "https://stac-extensions.github.io/language/v1.0.0/schema.json", "https://stac-extensions.github.io/themes/v1.0.0/schema.json", "https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json" ] } diff --git a/indexer/src/test/resources/canned/sample_malform_date_stac.json b/indexer/src/test/resources/canned/sample_malform_date_stac.json index 6849f437..8a187816 100644 --- a/indexer/src/test/resources/canned/sample_malform_date_stac.json +++ b/indexer/src/test/resources/canned/sample_malform_date_stac.json @@ -29,7 +29,9 @@ "temporal" : [ { "start" : "2004-12-31T13:00:00Z", "end" : "2013-02-28T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample_multiple_temporal1_stac.json b/indexer/src/test/resources/canned/sample_multiple_temporal1_stac.json index 33210424..dc10238f 100644 --- a/indexer/src/test/resources/canned/sample_multiple_temporal1_stac.json +++ b/indexer/src/test/resources/canned/sample_multiple_temporal1_stac.json @@ -118,7 +118,9 @@ }, { "start" : "1984-02-27T13:00:00Z", "end" : null - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "principalInvestigator", "about" ], diff --git a/indexer/src/test/resources/canned/sample_multiple_temporal2_stac.json b/indexer/src/test/resources/canned/sample_multiple_temporal2_stac.json index ab032f48..9afd9077 100644 --- a/indexer/src/test/resources/canned/sample_multiple_temporal2_stac.json +++ b/indexer/src/test/resources/canned/sample_multiple_temporal2_stac.json @@ -118,7 +118,9 @@ }, { "start" : "1984-02-27T13:00:00Z", "end" : "1985-02-28T12:59:59Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "principalInvestigator", "about" ], diff --git a/indexer/src/test/resources/canned/sample_multiple_temporal_null_stac.json b/indexer/src/test/resources/canned/sample_multiple_temporal_null_stac.json index 88cb4f17..33bd7cab 100644 --- a/indexer/src/test/resources/canned/sample_multiple_temporal_null_stac.json +++ b/indexer/src/test/resources/canned/sample_multiple_temporal_null_stac.json @@ -34,7 +34,9 @@ } ], "type" : "GeometryCollection" }, - "temporal" : [ ] + "temporal" : [ ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ], diff --git a/indexer/src/test/resources/canned/sample_non_noded_intersections_stac.json b/indexer/src/test/resources/canned/sample_non_noded_intersections_stac.json index 54facda4..2f70d8b5 100644 --- a/indexer/src/test/resources/canned/sample_non_noded_intersections_stac.json +++ b/indexer/src/test/resources/canned/sample_non_noded_intersections_stac.json @@ -45,7 +45,9 @@ "temporal" : [ { "start" : "1883-11-30T14:10:44Z", "end" : "2017-03-15T13:00:00Z" - } ] + } ], + "parameter_vocabs" : [ ], + "organisation_vocabs" : [ ] }, "contacts" : [ { "roles" : [ "pointOfContact", "about" ],