package com.revolsys.gis.parallel;
import java.util.LinkedHashSet;
import java.util.Set;
import com.revolsys.geometry.model.Geometry;
import com.revolsys.logging.Logs;
import com.revolsys.record.Record;
public class OutsideBoundaryObjects {
private Geometry boundary;
private Set<Record> objects = new LinkedHashSet<>();
private Geometry preparedBoundary;
public boolean addObject(final Record object) {
return this.objects.add(object);
}
public boolean boundaryContains(final Geometry geometry) {
return geometry == null || this.boundary == null || this.preparedBoundary.contains(geometry);
}
public boolean boundaryContains(final Record object) {
final Geometry geometry = object.getGeometry();
return boundaryContains(geometry);
}
public void clear() {
this.objects = new LinkedHashSet<>();
}
public void expandBoundary(final Geometry geometry) {
if (this.boundary == null) {
setBoundary(geometry);
} else {
setBoundary(this.boundary.union(geometry));
}
}
public Set<Record> getAndClearObjects() {
final Set<Record> objects = this.objects;
Logs.info(this, "Outside boundary objects size=" + this.objects.size());
clear();
return objects;
}
public Geometry getBoundary() {
return this.boundary;
}
public Set<Record> getObjects() {
return this.objects;
}
public boolean removeObject(final Record object) {
return this.objects.remove(object);
}
public void setBoundary(final Geometry boundary) {
this.boundary = boundary;
this.preparedBoundary = boundary.prepare();
}
public void setObjects(final Set<Record> objects) {
this.objects = objects;
}
}