private static boolean compare()

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;
    }