1 package de.dlr.shepard.data.spatialdata.endpoints;
2
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.fasterxml.jackson.core.type.TypeReference;
5 import com.fasterxml.jackson.databind.ObjectMapper;
6 import de.dlr.shepard.data.spatialdata.io.FilterCondition;
7 import de.dlr.shepard.data.spatialdata.model.geometryFilter.AbstractGeometryFilter;
8 import jakarta.ws.rs.BadRequestException;
9 import java.util.List;
10 import java.util.Map;
11 import java.util.Optional;
12
13 public final class SpatialDataParamParser {
14
15 private static final ObjectMapper objectMapper = new ObjectMapper();
16
17 public static Optional<AbstractGeometryFilter> parseGeometryFilter(String paramString) {
18 if (paramString == null) return Optional.empty();
19 try {
20 AbstractGeometryFilter geometryFilter = objectMapper.readValue(paramString, AbstractGeometryFilter.class);
21 if (!geometryFilter.isValid()) throw new BadRequestException("Invalid geometryFilter param");
22 return Optional.of(geometryFilter);
23 } catch (JsonProcessingException e) {
24 throw new BadRequestException("Invalid geometryFilter param");
25 }
26 }
27
28 public static Optional<Map<String, Object>> parseMetadata(String metadataParam) {
29 if (metadataParam == null) return Optional.empty();
30 try {
31 return Optional.of(objectMapper.readValue(metadataParam, new TypeReference<Map<String, Object>>() {}));
32 } catch (JsonProcessingException e) {
33 throw new BadRequestException("Invalid metadata filter param", e);
34 }
35 }
36
37 public static Optional<List<FilterCondition>> parseMeasurementsFilter(String measurementsParam) {
38 if (measurementsParam == null) return Optional.empty();
39 try {
40 return Optional.of(objectMapper.readValue(measurementsParam, new TypeReference<List<FilterCondition>>() {}));
41 } catch (JsonProcessingException e) {
42 throw new BadRequestException("Invalid measurements filter param", e);
43 }
44 }
45 }