package org.opendaylight.controller.md.sal.common.impl.service; import java.util.Map; import java.util.Set; import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent; import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.yangtools.concepts.Path; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; public final class ImmutableDataChangeEvent

, D> implements DataChangeEvent { private final D updatedOperationalSubtree; private final Map updatedOperational; private final D updatedConfigurationSubtree; private final Map updatedConfiguration; private final Set

removedOperational; private final Set

removedConfiguration; private final D originalOperationalSubtree; private final Map originalOperational; private final D originalConfigurationSubtree; private final Map originalConfiguration; private final Map createdOperational; private final Map createdConfiguration; private ImmutableDataChangeEvent(final Builder builder) { createdConfiguration = builder.getCreatedConfiguration().build(); createdOperational = builder.getCreatedOperational().build(); originalConfiguration = builder.getOriginalConfiguration().build(); originalConfigurationSubtree = builder.getOriginalConfigurationSubtree(); originalOperational = builder.getOriginalOperational().build(); originalOperationalSubtree = builder.getOriginalOperationalSubtree(); removedConfiguration = builder.getRemovedConfiguration().build(); removedOperational = builder.getRemovedOperational().build(); updatedConfiguration = builder.getUpdatedConfiguration().build(); updatedConfigurationSubtree = builder.getUpdatedConfigurationSubtree(); updatedOperational = builder.getUpdatedOperational().build(); updatedOperationalSubtree = builder.getUpdatedOperationalSubtree(); } @Override public Map getCreatedConfigurationData() { return createdConfiguration; } @Override public Map getCreatedOperationalData() { return createdOperational; } @Override public Map getOriginalConfigurationData() { return originalConfiguration; } @Override public D getOriginalConfigurationSubtree() { return originalConfigurationSubtree; } @Override public Map getOriginalOperationalData() { return originalOperational; } @Override public D getOriginalOperationalSubtree() { return originalOperationalSubtree; } @Override public Set

getRemovedConfigurationData() { return removedConfiguration; } @Override public Set

getRemovedOperationalData() { return removedOperational; } @Override public Map getUpdatedConfigurationData() { return updatedConfiguration; } @Override public D getUpdatedConfigurationSubtree() { return updatedConfigurationSubtree; } @Override public Map getUpdatedOperationalData() { return updatedOperational; } @Override public D getUpdatedOperationalSubtree() { return updatedOperationalSubtree; } public static final

,D> Builder builder() { return new Builder<>(); } public static final class Builder

,D> { private D updatedOperationalSubtree; private D originalOperationalSubtree; private D originalConfigurationSubtree; private D updatedConfigurationSubtree; private final ImmutableMap.Builder updatedOperational = ImmutableMap.builder(); private final ImmutableMap.Builder updatedConfiguration = ImmutableMap.builder(); private final ImmutableSet.Builder

removedOperational = ImmutableSet.builder(); private final ImmutableSet.Builder

removedConfiguration = ImmutableSet.builder(); private final ImmutableMap.Builder originalOperational = ImmutableMap.builder(); private final ImmutableMap.Builder originalConfiguration = ImmutableMap.builder(); private final ImmutableMap.Builder createdOperational = ImmutableMap.builder(); private final ImmutableMap.Builder createdConfiguration = ImmutableMap.builder(); protected Builder addTransaction(final DataModification data, final Predicate

keyFilter) { updatedOperational.putAll(Maps.filterKeys(data.getUpdatedOperationalData(), keyFilter)); updatedConfiguration.putAll(Maps.filterKeys(data.getUpdatedConfigurationData(), keyFilter)); originalConfiguration.putAll(Maps.filterKeys(data.getOriginalConfigurationData(), keyFilter)); originalOperational.putAll(Maps.filterKeys(data.getOriginalOperationalData(), keyFilter)); createdOperational.putAll(Maps.filterKeys(data.getCreatedOperationalData(), keyFilter)); createdConfiguration.putAll(Maps.filterKeys(data.getCreatedConfigurationData(), keyFilter)); return this; } protected Builder addConfigurationChangeSet(final RootedChangeSet changeSet) { if(changeSet == null) { return this; } originalConfiguration.putAll(changeSet.getOriginal()); createdConfiguration.putAll(changeSet.getCreated()); updatedConfiguration.putAll(changeSet.getUpdated()); removedConfiguration.addAll(changeSet.getRemoved()); return this; } protected Builder addOperationalChangeSet(final RootedChangeSet changeSet) { if(changeSet == null) { return this; } originalOperational.putAll(changeSet.getOriginal()); createdOperational.putAll(changeSet.getCreated()); updatedOperational.putAll(changeSet.getUpdated()); removedOperational.addAll(changeSet.getRemoved()); return this; } public ImmutableDataChangeEvent build() { return new ImmutableDataChangeEvent(this); } protected D getUpdatedOperationalSubtree() { return updatedOperationalSubtree; } public Builder setUpdatedOperationalSubtree(final D updatedOperationalSubtree) { this.updatedOperationalSubtree = updatedOperationalSubtree; return this; } protected D getOriginalOperationalSubtree() { return originalOperationalSubtree; } public Builder setOriginalOperationalSubtree(final D originalOperationalSubtree) { this.originalOperationalSubtree = originalOperationalSubtree; return this; } protected D getOriginalConfigurationSubtree() { return originalConfigurationSubtree; } public Builder setOriginalConfigurationSubtree(final D originalConfigurationSubtree) { this.originalConfigurationSubtree = originalConfigurationSubtree; return this; } protected D getUpdatedConfigurationSubtree() { return updatedConfigurationSubtree; } public Builder setUpdatedConfigurationSubtree(final D updatedConfigurationSubtree) { this.updatedConfigurationSubtree = updatedConfigurationSubtree; return this; } protected ImmutableMap.Builder getUpdatedOperational() { return updatedOperational; } protected ImmutableMap.Builder getUpdatedConfiguration() { return updatedConfiguration; } protected ImmutableSet.Builder

getRemovedOperational() { return removedOperational; } protected ImmutableSet.Builder

getRemovedConfiguration() { return removedConfiguration; } protected ImmutableMap.Builder getOriginalOperational() { return originalOperational; } protected ImmutableMap.Builder getOriginalConfiguration() { return originalConfiguration; } protected ImmutableMap.Builder getCreatedOperational() { return createdOperational; } protected ImmutableMap.Builder getCreatedConfiguration() { return createdConfiguration; } public Builder putOriginalOperational(final Map originalData) { originalOperational.putAll(originalData); return this; } public Builder putCreatedOperational(final Map originalData) { createdOperational.putAll(originalData); return this; } public Builder putUpdatedOperational(final Map originalData) { updatedOperational.putAll(originalData); return this; } public Builder putRemovedOperational(final Set originalData) { removedOperational.addAll(originalData); return this; } } }