BUG-8733: refactor IdInts listeners
[controller.git] / opendaylight / md-sal / samples / clustering-test-app / provider / src / main / java / org / opendaylight / controller / clustering / it / provider / NormalizedNodeDiff.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.clustering.it.provider;
9
10 import static com.google.common.base.Preconditions.checkNotNull;
11
12 import com.google.common.base.MoreObjects;
13 import com.google.common.base.Optional;
14 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
15
16 public abstract class NormalizedNodeDiff {
17     private static final class Missing extends NormalizedNodeDiff {
18         private final NormalizedNode<?, ?> expected;
19
20         Missing(final NormalizedNode<?, ?> expected) {
21             this.expected = checkNotNull(expected);
22         }
23
24         @Override
25         public String toString() {
26             return MoreObjects.toStringHelper(this).add("expected", expected).toString();
27         }
28     }
29
30     private static final class Unexpected extends NormalizedNodeDiff {
31         private final NormalizedNode<?, ?> actual;
32
33         Unexpected(final NormalizedNode<?, ?> actual) {
34             this.actual = checkNotNull(actual);
35         }
36
37         @Override
38         public String toString() {
39             return MoreObjects.toStringHelper(this).add("actual", actual).toString();
40         }
41     }
42
43     private static final class Regular extends NormalizedNodeDiff {
44         private final NormalizedNode<?, ?> expected;
45         private final NormalizedNode<?, ?> actual;
46
47         Regular(final NormalizedNode<?, ?> expected, final NormalizedNode<?, ?> actual) {
48             this.expected = checkNotNull(expected);
49             this.actual = checkNotNull(actual);
50         }
51
52         @Override
53         public String toString() {
54             return MoreObjects.toStringHelper(this).add("expected", expected).add("actual", actual).toString();
55         }
56     }
57
58     public static Optional<NormalizedNodeDiff> compute(final NormalizedNode<?, ?> expected,
59             final NormalizedNode<?, ?> actual) {
60         if (expected == null) {
61             return actual == null ? Optional.absent() : Optional.of(new Unexpected(actual));
62         }
63         if (actual == null) {
64             return Optional.of(new Missing(expected));
65         }
66         if (actual.equals(expected)) {
67             return Optional.absent();
68         }
69
70         // TODO: better diff
71         return Optional.of(new Regular(expected, actual));
72     }
73 }