@SuppressWarnings("unchecked")
public static <TT> IdRef<TT> parse(Repository r, HttpVerb verb, String path) {
if (StringUtils.isBlank(path)) {
return null;
}
String[] parts = path.substring(1).split("/");
if (parts.length < 2) {
return null;
}
IdRef<TT> lastIdRef = null;
for (int i = 0; i < parts.length; i += 2) {
if (isActionOrCollection(r, verb, parts, i)) {
break;
}
String endpointPath = "/" + parts[i];
IdRef<TT> currentIdRef;
if (!isString(parts[i + 1])) {
Long asLong = Long.valueOf(parts[i + 1]);
currentIdRef = (IdRef<TT>) create(r, getIdRefClazz(r, endpointPath), asLong);
} else {
String asString = parts[i + 1];
currentIdRef = (IdRef<TT>) create(r, getIdRefClazz(r, endpointPath), asString);
}
currentIdRef.setParentId(lastIdRef);
lastIdRef = currentIdRef;
validateParentId(currentIdRef, path);
}
return lastIdRef;
}