Merge "Bug 2362 - Milestone: Basic constraints validation"
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / tree / RecursiveReplaceCandidateNode.java
1 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
2
3 import com.google.common.base.Optional;
4 import com.google.common.base.Preconditions;
5 import java.util.Collection;
6 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
7 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
8 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer;
9 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
10 import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType;
11
12 final class RecursiveReplaceCandidateNode extends AbstractDataTreeCandidateNode {
13     private final NormalizedNodeContainer<?, PathArgument, NormalizedNode<?, ?>> oldData;
14
15     public RecursiveReplaceCandidateNode(final NormalizedNodeContainer<?, PathArgument, NormalizedNode<?, ?>> oldData,
16             final NormalizedNodeContainer<?, PathArgument, NormalizedNode<?, ?>> newData) {
17         super(newData);
18         this.oldData = Preconditions.checkNotNull(oldData);
19     }
20
21     @Override
22     public ModificationType getModificationType() {
23         return ModificationType.WRITE;
24     }
25
26     @Override
27     public Optional<NormalizedNode<?, ?>> getDataAfter() {
28         return super.dataOptional();
29     }
30
31     @Override
32     public Optional<NormalizedNode<?, ?>> getDataBefore() {
33         return Optional.<NormalizedNode<?, ?>>of(oldData);
34     }
35
36     @Override
37     public DataTreeCandidateNode getModifiedChild(final PathArgument identifier) {
38         // FIXME: this is a linear walk. We need a Map of these in order to
39         //        do something like getChildMap().get(identifier);
40         for (DataTreeCandidateNode c : getChildNodes()) {
41             if (identifier.equals(c.getIdentifier())) {
42                 return c;
43             }
44         }
45         return null;
46     }
47
48     @Override
49     public Collection<DataTreeCandidateNode> getChildNodes() {
50         return deltaChildren(oldData, getData());
51     }
52 }