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;
27 public AbstractDataModification(Map<P, D> configurationUpdate, Map<P, D> operationalUpdate,
28 Set<P> configurationRemove, Set<P> operationalRemove) {
29 this.configurationUpdate = configurationUpdate;
30 this.operationalUpdate = operationalUpdate;
31 this.configurationRemove = configurationRemove;
32 this.operationalRemove = operationalRemove;
34 unmodifiable_configurationUpdate = Collections.unmodifiableMap(configurationUpdate);
35 unmodifiable_operationalUpdate = Collections.unmodifiableMap(operationalUpdate);
36 unmodifiable_configurationRemove = Collections.unmodifiableSet(configurationRemove);
37 unmodifiable_OperationalRemove = Collections.unmodifiableSet(operationalRemove);
40 public AbstractDataModification() {
41 this(new HashMap<P, D>(), new HashMap<P, D>(), new HashSet<P>(), new HashSet<P>());
45 public final void putConfigurationData(P path, D data) {
47 configurationUpdate.put(path, data);
48 configurationRemove.remove(path);
52 public final void putRuntimeData(P path, D data) {
54 operationalUpdate.put(path, data);
55 operationalRemove.remove(path);
59 public final void removeRuntimeData(P path) {
61 operationalUpdate.remove(path);
62 operationalRemove.add(path);
66 public final void removeConfigurationData(P path) {
68 configurationUpdate.remove(path);
69 configurationRemove.add(path);
72 private final void checkMutable() {
73 if (!NEW.equals(this.getStatus()))
74 throw new IllegalStateException("Transaction was already submitted");
78 public Map<P, D> getUpdatedConfigurationData() {
80 return unmodifiable_configurationUpdate;
84 public Map<P, D> getUpdatedOperationalData() {
85 return unmodifiable_operationalUpdate;
89 public Set<P> getRemovedConfigurationData() {
90 return unmodifiable_configurationRemove;
94 public Set<P> getRemovedOperationalData() {
95 return unmodifiable_OperationalRemove;