*/
package org.opendaylight.controller.md.sal.dom.store.impl;
+import com.google.common.base.Preconditions;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
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.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import com.google.common.base.Preconditions;
-
public final class DOMImmutableDataChangeEvent implements
AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> {
-
private static final RemoveEventFactory REMOVE_EVENT_FACTORY = new RemoveEventFactory();
private static final CreateEventFactory CREATE_EVENT_FACTORY = new CreateEventFactory();
private final Set<YangInstanceIdentifier> removedPaths;
private final DataChangeScope scope;
-
-
private DOMImmutableDataChangeEvent(final Builder change) {
original = change.before;
updated = change.after;
scope = change.scope;
}
- public static final Builder builder(final DataChangeScope scope) {
+ public static Builder builder(final DataChangeScope scope) {
return new Builder(scope);
}
}
/**
- * Simple event factory which creates event based on path and data
- *
- *
+ * Simple event factory which creates event based on path and data.
*/
public interface SimpleEventFactory {
DOMImmutableDataChangeEvent create(YangInstanceIdentifier path, NormalizedNode<PathArgument,?> data);
/**
* Event factory which takes after state and creates event for it.
*
+ * <p>
* 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() {
+ public static SimpleEventFactory getCreateEventFactory() {
return CREATE_EVENT_FACTORY;
}
/**
* Event factory which takes before state and creates event for it.
*
+ * <p>
* 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()}.
*
+ * <p>
* Path is present in {@link #getRemovedPaths()}.
- * @return
*/
- public static final SimpleEventFactory getRemoveEventFactory() {
+ public static SimpleEventFactory getRemoveEventFactory() {
return REMOVE_EVENT_FACTORY;
}
- public static class Builder {
+
+ public static final class Builder {
public DataChangeScope scope;
private NormalizedNode<?, ?> after;
private final Set<YangInstanceIdentifier> removed = new HashSet<>();
private Builder(final DataChangeScope scope) {
- Preconditions.checkNotNull(scope, "Data change scope should not be null.");
- this.scope = scope;
+ this.scope = Preconditions.checkNotNull(scope, "Data change scope should not be null.");
}
public Builder setAfter(final NormalizedNode<?, ?> node) {
return this;
}
- public Builder addUpdated(final YangInstanceIdentifier path, final NormalizedNode<?, ?> before,
- final NormalizedNode<?, ?> after) {
- original.put(path, before);
- updated.put(path, after);
+ public Builder addUpdated(final YangInstanceIdentifier path, final NormalizedNode<?, ?> nodeBefore,
+ final NormalizedNode<?, ?> nodeAfter) {
+ original.put(path, nodeBefore);
+ updated.put(path, nodeAfter);
return this;
}
+
+ public boolean isEmpty() {
+ return created.isEmpty() && removed.isEmpty() && updated.isEmpty();
+ }
}
private static final class RemoveEventFactory implements SimpleEventFactory {
@Override
- public DOMImmutableDataChangeEvent create(final YangInstanceIdentifier path, final NormalizedNode<PathArgument, ?> data) {
+ public DOMImmutableDataChangeEvent create(final YangInstanceIdentifier path,
+ final NormalizedNode<PathArgument, ?> data) {
return builder(DataChangeScope.BASE) //
.setBefore(data) //
.addRemoved(path, data) //
private static final class CreateEventFactory implements SimpleEventFactory {
@Override
- public DOMImmutableDataChangeEvent create(final YangInstanceIdentifier path, final NormalizedNode<PathArgument, ?> data) {
+ public DOMImmutableDataChangeEvent create(final YangInstanceIdentifier path,
+ final NormalizedNode<PathArgument, ?> data) {
return builder(DataChangeScope.BASE) //
.setAfter(data) //
.addCreated(path, data) //
.build();
}
}
-
}