Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions server/src/main/java/au/org/aodn/ogcapi/server/Server.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package au.org.aodn.ogcapi.server;

import au.org.aodn.ogcapi.server.core.configuration.DASConfig;
import jakarta.annotation.PostConstruct;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

import java.util.TimeZone;

@SpringBootApplication
@EnableConfigurationProperties(DASConfig.class)
public class Server {

@PostConstruct
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
package au.org.aodn.ogcapi.server.core.configuration;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;


@Configuration
public class DASConfig {

@Value("${data-access-service.host}")
public String host;
@Value("${data-access-service.secret}")
public String secret;
}
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "data-access-service")
public record DASConfig(
String host,
String secret,
String internal
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package au.org.aodn.ogcapi.server.core.model;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import java.util.Map;

@Data
@NoArgsConstructor
public class DatasetMetadata {

// Allows Jackson to deserialize the root JSON object directly into this wrapper class
@JsonValue
private Map<String, DatasetInfo> datasets;

@JsonCreator
public DatasetMetadata(Map<String, DatasetInfo> datasets) {
this.datasets = datasets;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
public static class DatasetInfo {
private String uuid;
private String dname;
private CoordinateBounds lat;
private CoordinateBounds lng;
private Double depth;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
public static class CoordinateBounds {
private Double min;
private Double max;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

public enum FeatureId {
summary("summary"),
dataset_metadata("dataset_metadata"),
wfs_fields("wfs_fields"), // Query field based on pure wfs and given layer
wfs_field_value("wfs_field_value"),
wms_fields("wms_fields"), // Query field based on value from wms describe layer query
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package au.org.aodn.ogcapi.server.core.service;

import au.org.aodn.ogcapi.server.core.configuration.DASConfig;
import au.org.aodn.ogcapi.server.core.model.DatasetMetadata;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
Expand All @@ -30,7 +28,8 @@ public class DasService {
public void init() {
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
headers.set("X-API-KEY", dasConfig.secret);
headers.set("X-API-KEY", dasConfig.secret());
headers.set("x-internal-das-header-secret", dasConfig.internal());
httpEntity = new HttpEntity<>(headers);
}

Expand All @@ -41,7 +40,7 @@ public void init() {
* {@code pathVariables}.
*/
private byte[] getFeatureCollection(String path, String start, String end, Map<String, String> pathVariables) {
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(dasConfig.host + path);
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(dasConfig.host() + path);
Map<String, String> params = new HashMap<>(pathVariables);

if (start != null) {
Expand All @@ -62,7 +61,7 @@ public byte[] getWaveBuoysBetweenDates(String start, String end) {
}

public byte[] getWaveBuoysLatestAvailableDate() {
String waveBuoysUrlTemplate = UriComponentsBuilder.fromUriString(dasConfig.host + "/api/v1/das/data/feature-collection/wave-buoy/latest")
String waveBuoysUrlTemplate = UriComponentsBuilder.fromUriString(dasConfig.host() + "/api/v1/das/data/feature-collection/wave-buoy/latest")
.encode()
.toUriString();

Expand All @@ -78,7 +77,7 @@ public byte[] getMooringsBetweenDates(String start, String end) {
}

public byte[] getMooringsLatestAvailableDate() {
String mooringsUrlTemplate = UriComponentsBuilder.fromUriString(dasConfig.host + "/api/v1/das/data/feature-collection/mooring/latest")
String mooringsUrlTemplate = UriComponentsBuilder.fromUriString(dasConfig.host() + "/api/v1/das/data/feature-collection/mooring/latest")
.encode()
.toUriString();

Expand All @@ -88,4 +87,18 @@ public byte[] getMooringsLatestAvailableDate() {
public byte[] getMooringDetailsBetweenDates(String startDateTime, String endDateTime, String mooring) {
return getFeatureCollection("/api/v1/das/data/feature-collection/mooring/{mooring}", startDateTime, endDateTime, Map.of("mooring", mooring));
}

public ResponseEntity<DatasetMetadata> getDatasetMetadata(String datasetId) {
ResponseEntity<DatasetMetadata> response = httpClient.exchange(
dasConfig.host() + "/api/v1/das/metadata/" + datasetId,
HttpMethod.GET,
httpEntity,
DatasetMetadata.class
);
// We need to do this so that the response is closed
return ResponseEntity
.status(response.getStatusCode())
.contentType(MediaType.APPLICATION_JSON)
.body(response.getBody());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ public ResponseEntity<?> getFeature(
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
case dataset_metadata -> {
return featuresService.getDatasetMetadata(collectionId);
}
case wave_buoys_between_dates -> {
return featuresService.getWaveBuoysBetweenDates( request.getStartDateTime(), request.getEndDateTime());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package au.org.aodn.ogcapi.server.features;

import au.org.aodn.ogcapi.features.model.Collection;
import au.org.aodn.ogcapi.server.core.model.DatasetMetadata;
import au.org.aodn.ogcapi.server.core.model.ogc.FeatureRequest;
import au.org.aodn.ogcapi.server.core.model.ogc.wfs.FeatureTypeInfo;
import au.org.aodn.ogcapi.server.core.model.ogc.wfs.WfsField;
Expand Down Expand Up @@ -77,6 +78,16 @@ public ResponseEntity<Collection> getCollection(String id) throws NoSuchElementE
}
}

public ResponseEntity<DatasetMetadata> getDatasetMetadata(String id) {
try {
return dasService.getDatasetMetadata(id);
}
catch (Exception e) {
log.error("Error fetching metadata of id: {}, {}", id, e.getMessage());
return ResponseEntity.internalServerError().build();
}
}

public ResponseEntity<FeatureInfoResponse> getWmsMapFeature(String collectionId, FeatureRequest request) {
try {
return ResponseEntity.ok()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,7 @@ public class DasServiceTest {
public void setUp() {
httpClient = mock(RestTemplate.class);

DASConfig config = new DASConfig();
config.host = HOST;
config.secret = "test-secret";
DASConfig config = new DASConfig(HOST, "test-secret", "");

dasService = new DasService();
dasService.dasConfig = config;
Expand Down
Loading