package org.geotoolkit.data.geojson.utils;
import com.fasterxml.jackson.core.JsonLocation;
import java.util.Objects;
/**
* Lightweight pojo of {@link JsonLocation} without internal source object reference and offset.
* Because since 2.3.x+ of jackson byteOffset and charOffset values depend of underling
* source type. (InputStream -> use byteOffset, BufferedReader -> use charOffset)
*
* @author Quentin Boileau (Geomatys)
*/
public class LiteJsonLocation {
private final int lineNr;
private final int columnNr;
public LiteJsonLocation(JsonLocation location) {
this.lineNr = location.getLineNr();
this.columnNr = location.getColumnNr();
}
public int getLineNr() {
return lineNr;
}
public int getColumnNr() {
return columnNr;
}
/**
* Check if an JsonLocation position (line and column) is before
* current LiteJsonLocation.
* @param o JsonLocation
* @return true if before and false if input JsonLocation is equals or after current LiteJsonLocation
*/
public boolean isBefore(JsonLocation o) {
if (o == null) return false;
LiteJsonLocation that = new LiteJsonLocation(o);
return lineNr < that.lineNr || (lineNr == that.lineNr && columnNr < that.columnNr);
}
/**
* Test equality with LiteJsonLocation and JsonLocation input objects
*
* @param o
* @return
*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
// not equals if o is null or not an instance of LiteJsonLocation or JsonLocation
if (o == null ||
(!LiteJsonLocation.class.isAssignableFrom(o.getClass()) &&
!JsonLocation.class.isAssignableFrom(o.getClass()))) return false;
LiteJsonLocation that;
if (JsonLocation.class.isAssignableFrom(o.getClass())) {
that = new LiteJsonLocation((JsonLocation) o);
} else {
that = (LiteJsonLocation) o;
}
return lineNr == that.lineNr &&
columnNr == that.columnNr;
}
@Override
public int hashCode() {
return Objects.hash(lineNr, columnNr);
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("LiteJsonLocation{");
sb.append("lineNr=").append(lineNr);
sb.append(", columnNr=").append(columnNr);
sb.append('}');
return sb.toString();
}
}