org.openlr.binary.reader.RectangleLocationReferenceReader Maven / Gradle / Ivy
The newest version!
package org.openlr.binary.reader;
import org.locationtech.jts.geom.Coordinate;
import org.openlr.binary.format.Status;
import org.openlr.locationreference.LocationReferenceFactory;
import org.openlr.locationreference.RectangleLocationReference;
import java.io.ByteArrayInputStream;
import java.io.IOException;
class RectangleLocationReferenceReader {
private final LocationReferenceFactory locationReferenceFactory;
private final StatusReader statusReader;
private final CoordinateReader coordinateReader;
RectangleLocationReferenceReader(LocationReferenceFactory locationReferenceFactory, StatusReader statusReader, CoordinateReader coordinateReader) {
this.locationReferenceFactory = locationReferenceFactory;
this.statusReader = statusReader;
this.coordinateReader = coordinateReader;
}
RectangleLocationReference read(ByteArrayInputStream inputStream) throws IOException {
Status status = statusReader.read(inputStream);
if (status.getVersion() != 3) {
throw new IllegalArgumentException();
}
if (status.isAttributeFlag()) {
throw new IllegalArgumentException();
}
if (status.getAreaFlag() != 2) {
throw new IllegalArgumentException();
}
if (status.isPointFlag()) {
throw new IllegalArgumentException();
}
Coordinate lowerLeft = coordinateReader.readAbsoluteCoordinate(inputStream);
Coordinate upperRight = inputStream.available() > 4 ?
coordinateReader.readAbsoluteCoordinate(inputStream) :
coordinateReader.readRelativeCoordinate(lowerLeft, inputStream);
return locationReferenceFactory.createRectangleLocationReference(lowerLeft, upperRight);
}
}