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 }