Update to MD-SAL APIs
[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     
28
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;
35         
36         unmodifiable_configurationUpdate = Collections.unmodifiableMap(configurationUpdate);
37         unmodifiable_operationalUpdate = Collections.unmodifiableMap(operationalUpdate);
38         unmodifiable_configurationRemove = Collections.unmodifiableSet(configurationRemove);
39         unmodifiable_OperationalRemove = Collections.unmodifiableSet(operationalRemove);
40     }
41     
42     public AbstractDataModification() {
43         this(new HashMap<P,D>(), new HashMap<P,D>(), new HashSet<P>(), new HashSet<P>());
44     }
45
46     @Override
47     public final void putConfigurationData(P path, D data) {
48         checkMutable();
49         configurationUpdate.put(path, data);
50         configurationRemove.remove(path);
51     }
52     
53     @Override
54     public final void putRuntimeData(P path, D data) {
55         checkMutable();
56         operationalUpdate.put(path, data);
57         operationalRemove.remove(path);
58     }
59     
60     @Override
61     public final void removeRuntimeData(P path) {
62         checkMutable();
63         operationalUpdate.remove(path);
64         operationalRemove.add(path);
65     }
66     
67     @Override
68     public final void removeConfigurationData(P path) {
69         checkMutable();
70         configurationUpdate.remove(path);
71         configurationRemove.add(path);
72     }
73
74     private final void checkMutable() {
75         if(!NEW.equals(this.getStatus())) throw new IllegalStateException("Transaction was already submitted");
76     }
77
78     @Override
79     public Map<P, D> getUpdatedConfigurationData() {
80         
81         return unmodifiable_configurationUpdate;
82     }
83
84     @Override
85     public Map<P, D> getUpdatedOperationalData() {
86         return unmodifiable_operationalUpdate;
87     }
88
89     @Override
90     public Set<P> getRemovedConfigurationData() {
91         return unmodifiable_configurationRemove;
92     }
93     
94     @Override
95     public Set<P> getRemovedOperationalData() {
96         return unmodifiable_OperationalRemove;
97     }
98
99 }