AbstractGeometryFilter.java

package de.dlr.shepard.data.spatialdata.model.geometryFilter;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.eclipse.microprofile.openapi.annotations.media.Schema;

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes(
  {
    @JsonSubTypes.Type(value = KNearestNeighbor.class, name = "K_NEAREST_NEIGHBOR"),
    @JsonSubTypes.Type(value = BoundingSphere.class, name = "BOUNDING_SPHERE"),
    @JsonSubTypes.Type(value = OrientedBoundingBox.class, name = "ORIENTED_BOUNDING_BOX"),
    @JsonSubTypes.Type(value = AxisAlignedBoundingBox.class, name = "AXIS_ALIGNED_BOUNDING_BOX"),
  }
)
@Schema(description = "abstract geometry filter")
@Data
@NoArgsConstructor
public abstract class AbstractGeometryFilter {

  protected GeometryFilterType type;

  @JsonIgnore
  public abstract boolean isValid();

  public AbstractGeometryFilter(GeometryFilterType type) {
    this.type = type;
  }
}