1 package org.opendaylight.controller.md.sal.common.impl;
3 import java.util.Collections;
4 import java.util.HashMap;
5 import java.util.HashSet;
9 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
10 import org.opendaylight.yangtools.concepts.Path;
12 import static org.opendaylight.controller.md.sal.common.api.TransactionStatus.NEW;
14 public abstract class AbstractDataModification<P extends Path<P>, D> implements DataModification<P, D> {
16 private final Map<P,D> configurationUpdate;
17 private final Map<P,D> operationalUpdate;
19 private final Set<P> configurationRemove;
20 private final Set<P> operationalRemove;
22 private final Map<P, D> unmodifiable_configurationUpdate;
23 private final Map<P, D> unmodifiable_operationalUpdate;
24 private final Set<P> unmodifiable_configurationRemove;
25 private final Set<P> unmodifiable_OperationalRemove;
29 public AbstractDataModification(Map<P, D> configurationUpdate, Map<P, D> operationalUpdate,
30 Set<P> configurationRemove, Set<P> operationalRemove) {
31 this.configurationUpdate = configurationUpdate;
32 this.operationalUpdate = operationalUpdate;
33 this.configurationRemove = configurationRemove;
34 this.operationalRemove = operationalRemove;
36 unmodifiable_configurationUpdate = Collections.unmodifiableMap(configurationUpdate);
37 unmodifiable_operationalUpdate = Collections.unmodifiableMap(operationalUpdate);
38 unmodifiable_configurationRemove = Collections.unmodifiableSet(configurationRemove);
39 unmodifiable_OperationalRemove = Collections.unmodifiableSet(operationalRemove);
42 public AbstractDataModification() {
43 this(new HashMap<P,D>(), new HashMap<P,D>(), new HashSet<P>(), new HashSet<P>());
47 public final void putConfigurationData(P path, D data) {
49 configurationUpdate.put(path, data);
50 configurationRemove.remove(path);
54 public final void putRuntimeData(P path, D data) {
56 operationalUpdate.put(path, data);
57 operationalRemove.remove(path);
61 public final void removeRuntimeData(P path) {
63 operationalUpdate.remove(path);
64 operationalRemove.add(path);
68 public final void removeConfigurationData(P path) {
70 configurationUpdate.remove(path);
71 configurationRemove.add(path);
74 private final void checkMutable() {
75 if(!NEW.equals(this.getStatus())) throw new IllegalStateException("Transaction was already submitted");
79 public Map<P, D> getUpdatedConfigurationData() {
81 return unmodifiable_configurationUpdate;
85 public Map<P, D> getUpdatedOperationalData() {
86 return unmodifiable_operationalUpdate;
90 public Set<P> getRemovedConfigurationData() {
91 return unmodifiable_configurationRemove;
95 public Set<P> getRemovedOperationalData() {
96 return unmodifiable_OperationalRemove;