X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fstore%2Fimpl%2FDOMImmutableDataChangeEvent.java;h=86f08de61566d6da785fe49166cdde694e8ed92a;hb=259b65622b8c29c49235c2210609b9f7a68826eb;hp=3c6a3d60d859e4c503c7bc9ed6d3b0045d58a68e;hpb=a04257d357eccb69d9fda2c4ac171acdc5b76e28;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/DOMImmutableDataChangeEvent.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/DOMImmutableDataChangeEvent.java index 3c6a3d60d8..86f08de615 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/DOMImmutableDataChangeEvent.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/DOMImmutableDataChangeEvent.java @@ -3,22 +3,32 @@ package org.opendaylight.controller.md.sal.dom.store.impl; import java.util.Map; import java.util.Set; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; public final class DOMImmutableDataChangeEvent implements AsyncDataChangeEvent> { + + private static final RemoveEventFactory REMOVE_EVENT_FACTORY = new RemoveEventFactory(); + private static final CreateEventFactory CREATE_EVENT_FACTORY = new CreateEventFactory(); + private final NormalizedNode original; private final NormalizedNode updated; private final Map> originalData; private final Map> createdData; private final Map> updatedData; private final Set removedPaths; + private final DataChangeScope scope; + + private DOMImmutableDataChangeEvent(final Builder change) { original = change.before; @@ -27,10 +37,15 @@ public final class DOMImmutableDataChangeEvent implements createdData = change.created.build(); updatedData = change.updated.build(); removedPaths = change.removed.build(); + scope = change.scope; + } + + public static final Builder builder(final DataChangeScope scope) { + return new Builder(scope); } - public static final Builder builder() { - return new Builder(); + protected DataChangeScope getScope() { + return scope; } @Override @@ -69,8 +84,44 @@ public final class DOMImmutableDataChangeEvent implements + ", removed=" + removedPaths + "]"; } + /** + * Simple event factory which creates event based on path and data + * + * + */ + public interface SimpleEventFactory { + DOMImmutableDataChangeEvent create(InstanceIdentifier path, NormalizedNode data); + } + + /** + * Event factory which takes after state and creates event for it. + * + * Factory for events based on path and after state. + * After state is set as {@link #getUpdatedSubtree()} and is path, + * state mapping is also present in {@link #getUpdatedData()}. + * + * @return + */ + public static final SimpleEventFactory getCreateEventFactory() { + return CREATE_EVENT_FACTORY; + } + + /** + * Event factory which takes before state and creates event for it. + * + * Factory for events based on path and after state. + * After state is set as {@link #getOriginalSubtree()} and is path, + * state mapping is also present in {@link #getOriginalSubtree()}. + * + * Path is present in {@link #getRemovedPaths()}. + * @return + */ + public static final SimpleEventFactory getRemoveEventFactory() { + return REMOVE_EVENT_FACTORY; + } public static class Builder { + public DataChangeScope scope; private NormalizedNode after; private NormalizedNode before; @@ -79,8 +130,9 @@ public final class DOMImmutableDataChangeEvent implements private final ImmutableMap.Builder> updated = ImmutableMap.builder(); private final ImmutableSet.Builder removed = ImmutableSet.builder(); - private Builder() { - + private Builder(final DataChangeScope scope) { + Preconditions.checkNotNull(scope, "Data change scope should not be null."); + this.scope = scope; } public Builder setAfter(final NormalizedNode node) { @@ -126,4 +178,27 @@ public final class DOMImmutableDataChangeEvent implements } } + private static final class RemoveEventFactory implements SimpleEventFactory { + + @Override + public DOMImmutableDataChangeEvent create(final InstanceIdentifier path, final NormalizedNode data) { + return builder(DataChangeScope.BASE) // + .setBefore(data) // + .addRemoved(path, data) // + .build(); + } + + } + + private static final class CreateEventFactory implements SimpleEventFactory { + + @Override + public DOMImmutableDataChangeEvent create(final InstanceIdentifier path, final NormalizedNode data) { + return builder(DataChangeScope.BASE) // + .setAfter(data) // + .addCreated(path, data) // + .build(); + } + } + }