2 * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.controller.md.sal.common.impl.service;
13 import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
14 import org.opendaylight.controller.md.sal.common.api.data.DataChangeListener;
15 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
16 import org.opendaylight.yangtools.concepts.Path;
18 import com.google.common.base.Predicate;
21 public final class ListenerStateCapture<P extends Path<P>, D, DCL extends DataChangeListener<P, D>> {
25 final Iterable<DataChangeListenerRegistration<P, D, DCL>> listeners;
27 D initialOperationalState;
29 D initialConfigurationState;
31 D finalConfigurationState;
33 D finalOperationalState;
35 Map<P, D> additionalConfigOriginal;
36 Map<P, D> additionalConfigCreated;
37 Map<P, D> additionalConfigUpdated;
38 Map<P, D> additionalConfigDeleted;
40 Map<P, D> additionalOperOriginal;
41 Map<P, D> additionalOperCreated;
42 Map<P, D> additionalOperUpdated;
43 Map<P, D> additionalOperDeleted;
45 RootedChangeSet<P, D> normalizedConfigurationChanges;
46 RootedChangeSet<P, D> normalizedOperationalChanges;
48 private final Predicate<P> containsPredicate;
50 public ListenerStateCapture(P path, Iterable<DataChangeListenerRegistration<P, D, DCL>> listeners,
51 Predicate<P> containsPredicate) {
54 this.listeners = listeners;
55 this.containsPredicate = containsPredicate;
58 protected D getInitialOperationalState() {
59 return initialOperationalState;
62 protected void setInitialOperationalState(D initialOperationalState) {
63 this.initialOperationalState = initialOperationalState;
66 protected D getInitialConfigurationState() {
67 return initialConfigurationState;
70 protected void setInitialConfigurationState(D initialConfigurationState) {
71 this.initialConfigurationState = initialConfigurationState;
74 protected P getPath() {
78 protected Iterable<DataChangeListenerRegistration<P, D, DCL>> getListeners() {
82 protected D getFinalConfigurationState() {
83 return finalConfigurationState;
86 protected void setFinalConfigurationState(D finalConfigurationState) {
87 this.finalConfigurationState = finalConfigurationState;
90 protected D getFinalOperationalState() {
91 return finalOperationalState;
94 protected void setFinalOperationalState(D finalOperationalState) {
95 this.finalOperationalState = finalOperationalState;
98 protected RootedChangeSet<P, D> getNormalizedConfigurationChanges() {
99 return normalizedConfigurationChanges;
102 protected void setNormalizedConfigurationChanges(RootedChangeSet<P, D> normalizedConfigurationChanges) {
103 this.normalizedConfigurationChanges = normalizedConfigurationChanges;
106 protected RootedChangeSet<P, D> getNormalizedOperationalChanges() {
107 return normalizedOperationalChanges;
110 protected void setNormalizedOperationalChanges(RootedChangeSet<P, D> normalizedOperationalChange) {
111 this.normalizedOperationalChanges = normalizedOperationalChange;
114 protected DataChangeEvent<P, D> createEvent(DataModification<P, D> modification) {
115 return ImmutableDataChangeEvent.<P, D> builder()//
116 .addTransaction(modification, containsPredicate) //
117 .addConfigurationChangeSet(normalizedConfigurationChanges) //
118 .addOperationalChangeSet(normalizedOperationalChanges) //
119 .setOriginalConfigurationSubtree(initialConfigurationState) //
120 .setOriginalOperationalSubtree(initialOperationalState) //
121 .setUpdatedConfigurationSubtree(finalConfigurationState) //
122 .setUpdatedOperationalSubtree(finalOperationalState) //