SpatialDataReferenceIO.java
package de.dlr.shepard.context.references.spatialdata.io;
import de.dlr.shepard.context.references.basicreference.io.BasicReferenceIO;
import de.dlr.shepard.context.references.spatialdata.entities.SpatialDataReference;
import de.dlr.shepard.data.spatialdata.endpoints.SpatialDataParamParser;
import de.dlr.shepard.data.spatialdata.io.FilterCondition;
import de.dlr.shepard.data.spatialdata.model.geometryFilter.AbstractGeometryFilter;
import jakarta.validation.constraints.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@Schema(name = "SpatialDataReference")
public class SpatialDataReferenceIO extends BasicReferenceIO {
@NotNull
@Schema(required = true)
private long spatialDataContainerId;
@Schema(
example = """
{
"type": "AXIS_ALIGNED_BOUNDING_BOX",
"minX": 0,
"minY": 0,
"minZ": 0,
"maxX": 100,
"maxY": 100,
"maxZ": 100
}
"""
)
private AbstractGeometryFilter geometryFilter;
@Schema(
example = """
[{ "key": "temperature,val", "operator": "EQUALS", "value": 20 }]
"""
)
private List<FilterCondition> measurementsFilter;
@Schema
private Long startTime;
@Schema
private Long endTime;
@Schema
private Map<String, Object> metadataFilter;
@Schema
private Integer limit;
@Schema
private Integer skip;
public SpatialDataReferenceIO(SpatialDataReference ref) {
super(ref);
this.geometryFilter = SpatialDataParamParser.parseGeometryFilter(ref.getGeometryFilter()).orElse(null);
this.measurementsFilter = SpatialDataParamParser.parseMeasurementsFilter(ref.getMeasurementsFilter()).orElse(
Collections.emptyList()
);
this.startTime = ref.getStartTime();
this.endTime = ref.getEndTime();
this.metadataFilter = SpatialDataParamParser.parseMetadata(ref.getMetadata()).orElse(Collections.emptyMap());
this.limit = ref.getLimit();
this.skip = ref.getSkip();
this.spatialDataContainerId = ref.getSpatialDataContainer() != null ? ref.getSpatialDataContainer().getId() : -1;
}
}