View Javadoc
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  }