X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Fimpl%2FLazyDataObjectModification.java;h=d81765eabf064d7777b354fd5fd6f77f1d7eacba;hb=refs%2Fchanges%2F58%2F35058%2F2;hp=b29ed3849bc4749eaee18ce0f41260c93f9455bf;hpb=8542d448f20b0eb4ace904fa0babd24a98d5c4e4;p=controller.git diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazyDataObjectModification.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazyDataObjectModification.java index b29ed3849b..d81765eabf 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazyDataObjectModification.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazyDataObjectModification.java @@ -15,8 +15,11 @@ import java.util.Iterator; import java.util.List; import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; import org.opendaylight.yangtools.binding.data.codec.api.BindingCodecTreeNode; +import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.ChildOf; import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.Identifiable; +import org.opendaylight.yangtools.yang.binding.Identifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -34,7 +37,7 @@ import org.slf4j.LoggerFactory; * * @param Type of Binding Data Object */ -class LazyDataObjectModification implements DataObjectModification { +final class LazyDataObjectModification implements DataObjectModification { private final static Logger LOG = LoggerFactory.getLogger(LazyDataObjectModification.class); @@ -49,14 +52,14 @@ class LazyDataObjectModification implements DataObjectModi this.identifier = codec.deserializePathArgument(domData.getIdentifier()); } - static DataObjectModification create(final BindingCodecTreeNode codec, + static DataObjectModification create(final BindingCodecTreeNode codec, final DataTreeCandidateNode domData) { return new LazyDataObjectModification<>(codec,domData); } - static Collection> from(final BindingCodecTreeNode parentCodec, + private static Collection> from(final BindingCodecTreeNode parentCodec, final Collection domChildNodes) { - final ArrayList> result = new ArrayList<>(domChildNodes.size()); + final List> result = new ArrayList<>(domChildNodes.size()); populateList(result, parentCodec, domChildNodes); return result; } @@ -76,7 +79,7 @@ class LazyDataObjectModification implements DataObjectModi parentCodec.yangPathArgumentChild(domChildNode.getIdentifier()); populateList(result,type, childCodec, domChildNode); } catch (final IllegalArgumentException e) { - if(type == BindingStructuralType.UNKNOWN) { + if (type == BindingStructuralType.UNKNOWN) { LOG.debug("Unable to deserialize unknown DOM node {}",domChildNode,e); } else { LOG.debug("Binding representation for DOM node {} was not found",domChildNode,e); @@ -86,7 +89,6 @@ class LazyDataObjectModification implements DataObjectModi } } - private static void populateList(final List> result, final BindingStructuralType type, final BindingCodecTreeNode childCodec, final DataTreeCandidateNode domChildNode) { @@ -113,6 +115,11 @@ class LazyDataObjectModification implements DataObjectModi } } + @Override + public T getDataBefore() { + return deserialize(domData.getDataBefore()); + } + @Override public T getDataAfter() { return deserialize(domData.getDataAfter()); @@ -133,11 +140,12 @@ class LazyDataObjectModification implements DataObjectModi switch(domData.getModificationType()) { case WRITE: return DataObjectModification.ModificationType.WRITE; + case APPEARED: case SUBTREE_MODIFIED: return DataObjectModification.ModificationType.SUBTREE_MODIFIED; + case DISAPPEARED: case DELETE: return DataObjectModification.ModificationType.DELETE; - default: // TODO: Should we lie about modification type instead of exception? throw new IllegalStateException("Unsupported DOM Modification type " + domData.getModificationType()); @@ -146,12 +154,13 @@ class LazyDataObjectModification implements DataObjectModi @Override public Collection> getModifiedChildren() { - if(childNodesCache == null) { - childNodesCache = from(codec,domData.getChildNodes()); + if (childNodesCache == null) { + childNodesCache = from(codec, domData.getChildNodes()); } return childNodesCache; } + @Override public DataObjectModification getModifiedChild(final PathArgument arg) { final List domArgumentList = new ArrayList<>(); final BindingCodecTreeNode childCodec = codec.bindingPathArgumentChild(arg, domArgumentList); @@ -166,13 +175,28 @@ class LazyDataObjectModification implements DataObjectModi return null; } + @Override @SuppressWarnings("unchecked") - public > DataObjectModification getModifiedChild(final Class arg) { + public & ChildOf, K extends Identifier> DataObjectModification getModifiedChildListItem( + final Class listItem, final K listKey) { + return (DataObjectModification) getModifiedChild(new InstanceIdentifier.IdentifiableItem<>(listItem, listKey)); + } + + @Override + @SuppressWarnings("unchecked") + public > DataObjectModification getModifiedChildContainer(final Class arg) { return (DataObjectModification) getModifiedChild(new InstanceIdentifier.Item<>(arg)); } + @Override + @SuppressWarnings("unchecked") + public & DataObject> DataObjectModification getModifiedAugmentation( + final Class augmentation) { + return (DataObjectModification) getModifiedChild(new InstanceIdentifier.Item<>(augmentation)); + } + private T deserialize(final Optional> dataAfter) { - if(dataAfter.isPresent()) { + if (dataAfter.isPresent()) { return codec.deserialize(dataAfter.get()); } return null;