Updated implementation of broker (data services, generated code), added Integration...
[controller.git] / opendaylight / md-sal / sal-common-impl / src / main / java / org / opendaylight / controller / md / sal / common / impl / AbstractDataModification.java
1 package org.opendaylight.controller.md.sal.common.impl;
2
3 import java.util.Collections;
4 import java.util.HashMap;
5 import java.util.HashSet;
6 import java.util.Map;
7 import java.util.Set;
8
9 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
10 import org.opendaylight.yangtools.concepts.Path;
11
12 import static org.opendaylight.controller.md.sal.common.api.TransactionStatus.NEW;
13
14 public abstract class AbstractDataModification<P /*extends Path<P>*/, D> implements DataModification<P, D> {
15
16     private final Map<P, D> configurationUpdate;
17     private final Map<P, D> operationalUpdate;
18
19     private final Set<P> configurationRemove;
20     private final Set<P> operationalRemove;
21
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;
26
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;
33
34         unmodifiable_configurationUpdate = Collections.unmodifiableMap(configurationUpdate);
35         unmodifiable_operationalUpdate = Collections.unmodifiableMap(operationalUpdate);
36         unmodifiable_configurationRemove = Collections.unmodifiableSet(configurationRemove);
37         unmodifiable_OperationalRemove = Collections.unmodifiableSet(operationalRemove);
38     }
39
40     public AbstractDataModification() {
41         this(new HashMap<P, D>(), new HashMap<P, D>(), new HashSet<P>(), new HashSet<P>());
42     }
43
44     @Override
45     public final void putConfigurationData(P path, D data) {
46         checkMutable();
47         configurationUpdate.put(path, data);
48         configurationRemove.remove(path);
49     }
50
51     @Override
52     public final void putRuntimeData(P path, D data) {
53         checkMutable();
54         operationalUpdate.put(path, data);
55         operationalRemove.remove(path);
56     }
57
58     @Override
59     public final void removeRuntimeData(P path) {
60         checkMutable();
61         operationalUpdate.remove(path);
62         operationalRemove.add(path);
63     }
64
65     @Override
66     public final void removeConfigurationData(P path) {
67         checkMutable();
68         configurationUpdate.remove(path);
69         configurationRemove.add(path);
70     }
71
72     private final void checkMutable() {
73         if (!NEW.equals(this.getStatus()))
74             throw new IllegalStateException("Transaction was already submitted");
75     }
76
77     @Override
78     public Map<P, D> getUpdatedConfigurationData() {
79
80         return unmodifiable_configurationUpdate;
81     }
82
83     @Override
84     public Map<P, D> getUpdatedOperationalData() {
85         return unmodifiable_operationalUpdate;
86     }
87
88     @Override
89     public Set<P> getRemovedConfigurationData() {
90         return unmodifiable_configurationRemove;
91     }
92
93     @Override
94     public Set<P> getRemovedOperationalData() {
95         return unmodifiable_OperationalRemove;
96     }
97
98 }