View Javadoc
1   package de.dlr.shepard.context.references.spatialdata.io;
2   
3   import de.dlr.shepard.context.references.basicreference.io.BasicReferenceIO;
4   import de.dlr.shepard.context.references.spatialdata.entities.SpatialDataReference;
5   import de.dlr.shepard.data.spatialdata.endpoints.SpatialDataParamParser;
6   import de.dlr.shepard.data.spatialdata.io.FilterCondition;
7   import de.dlr.shepard.data.spatialdata.model.geometryFilter.AbstractGeometryFilter;
8   import jakarta.validation.constraints.NotNull;
9   import java.util.Collections;
10  import java.util.List;
11  import java.util.Map;
12  import lombok.Data;
13  import lombok.EqualsAndHashCode;
14  import lombok.NoArgsConstructor;
15  import org.eclipse.microprofile.openapi.annotations.media.Schema;
16  
17  @Data
18  @EqualsAndHashCode(callSuper = true)
19  @NoArgsConstructor
20  @Schema(name = "SpatialDataReference")
21  public class SpatialDataReferenceIO extends BasicReferenceIO {
22  
23    @NotNull
24    @Schema(required = true)
25    private long spatialDataContainerId;
26  
27    @Schema(
28      example = """
29      {
30        "type": "AXIS_ALIGNED_BOUNDING_BOX",
31        "minX": 0,
32        "minY": 0,
33        "minZ": 0,
34        "maxX": 100,
35        "maxY": 100,
36        "maxZ": 100
37        }
38      """
39    )
40    private AbstractGeometryFilter geometryFilter;
41  
42    @Schema(
43      example = """
44      [{ "key": "temperature,val", "operator": "EQUALS", "value": 20 }]
45      """
46    )
47    private List<FilterCondition> measurementsFilter;
48  
49    @Schema
50    private Long startTime;
51  
52    @Schema
53    private Long endTime;
54  
55    @Schema
56    private Map<String, Object> metadataFilter;
57  
58    @Schema
59    private Integer limit;
60  
61    @Schema
62    private Integer skip;
63  
64    public SpatialDataReferenceIO(SpatialDataReference ref) {
65      super(ref);
66      this.geometryFilter = SpatialDataParamParser.parseGeometryFilter(ref.getGeometryFilter()).orElse(null);
67      this.measurementsFilter = SpatialDataParamParser.parseMeasurementsFilter(ref.getMeasurementsFilter()).orElse(
68        Collections.emptyList()
69      );
70      this.startTime = ref.getStartTime();
71      this.endTime = ref.getEndTime();
72      this.metadataFilter = SpatialDataParamParser.parseMetadata(ref.getMetadata()).orElse(Collections.emptyMap());
73      this.limit = ref.getLimit();
74      this.skip = ref.getSkip();
75      this.spatialDataContainerId = ref.getSpatialDataContainer() != null ? ref.getSpatialDataContainer().getId() : -1;
76    }
77  }