in hollow/src/main/java/com/netflix/hollow/core/write/objectmapper/flatrecords/traversal/FlatRecordTraversalObjectNodeEquality.java [26:76]
private static boolean compare(FlatRecordTraversalNode left, FlatRecordTraversalNode right) {
if(left == null && right == null) {
return true;
}
if(left == null || right == null) {
return false;
}
if(!left.getSchema().getName().equals(right.getSchema().getName())) {
return false;
}
left.setCommonSchema(commonSchemaCache);
right.setCommonSchema(commonSchemaCache);
if(left instanceof FlatRecordTraversalObjectNode && right instanceof FlatRecordTraversalObjectNode) {
FlatRecordTraversalObjectNode leftObjectNode = (FlatRecordTraversalObjectNode) left;
FlatRecordTraversalObjectNode rightObjectNode = (FlatRecordTraversalObjectNode) right;
if(leftObjectNode.hashCode() != rightObjectNode.hashCode()) {
return false;
}
for(int i=0;i<commonSchemaCache.get(leftObjectNode.getSchema().getName()).numFields();i++) {
String fieldName = leftObjectNode.getSchema().getFieldName(i);
if(leftObjectNode.getSchema().getFieldType(fieldName).equals(HollowObjectSchema.FieldType.REFERENCE)) {
FlatRecordTraversalNode leftChildNode = leftObjectNode.getFieldNode(fieldName);
FlatRecordTraversalNode rightChildNode = rightObjectNode.getFieldNode(fieldName);
if(commonSchemaCache.containsKey(leftObjectNode.getSchema().getName()) && commonSchemaCache.containsKey(rightObjectNode.getSchema().getName())) {
if(!compare(leftChildNode, rightChildNode)) {
return false;
}
}
}
}
}
else if(left instanceof FlatRecordTraversalSetNode && right instanceof FlatRecordTraversalSetNode) {
if(left.hashCode() != right.hashCode()) {
return false;
}
}
else if(left instanceof FlatRecordTraversalListNode && right instanceof FlatRecordTraversalListNode) {
if(left.hashCode() != right.hashCode()) {
return false;
}
}
else if(left instanceof FlatRecordTraversalMapNode && right instanceof FlatRecordTraversalMapNode) {
if(left.hashCode() != right.hashCode()) {
return false;
}
}
else {
throw new IllegalArgumentException("Unsupported schema type: " + left.getSchema().getSchemaType());
}
return true;
}