package org.batfish.question.jsonpath;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
public class ConcreteJsonPath implements Comparable<ConcreteJsonPath> {
private final List<String> _parts;
@JsonCreator
private ConcreteJsonPath(List<String> parts) {
_parts = parts;
}
public ConcreteJsonPath(String text) {
String endsCut = text.substring(2, text.length() - 1);
_parts = Arrays.asList(endsCut.split("\\]\\["));
}
@Override
public int compareTo(ConcreteJsonPath o) {
Iterator<String> iLhs = _parts.iterator();
Iterator<String> iRhs = o._parts.iterator();
do {
boolean iLhsNext = iLhs.hasNext();
boolean iRhsNext = iRhs.hasNext();
if (iLhsNext && iRhsNext) {
int c = iLhs.next().compareTo(iRhs.next());
if (c != 0) {
return c;
}
}
else if (iLhsNext) {
return 1;
}
else if (iRhsNext) {
return -1;
}
else {
return 0;
}
} while (true);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
return _parts.equals(((ConcreteJsonPath) obj)._parts);
}
@JsonValue
public final List<String> getParts() {
return _parts;
}
@Override
public int hashCode() {
return _parts.hashCode();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(_parts.get(0));
for (int i = 1; i < _parts.size(); i++) {
String currentPart = _parts.get(i);
sb.append("->" + currentPart);
}
String result = sb.toString();
return result;
}
}