X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-common-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fcommon%2Fimpl%2FAbstractDataModification.java;h=bee863321fdb1055887c35ff4a3c72e68939ca7e;hb=0f14bf97fb20a4d506a7ed4826b2a6ed3b9ebeab;hp=5d76717ab6ab0d5128bb2eb578f05bda48120a7f;hpb=a3dbf5335c352c7463674e31314ce2b5285cb6fe;p=controller.git diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/AbstractDataModification.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/AbstractDataModification.java index 5d76717ab6..bee863321f 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/AbstractDataModification.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/AbstractDataModification.java @@ -1,72 +1,110 @@ package org.opendaylight.controller.md.sal.common.impl; +import static org.opendaylight.controller.md.sal.common.api.TransactionStatus.NEW; + import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import org.opendaylight.controller.md.sal.common.api.data.DataModification; -import org.opendaylight.yangtools.concepts.Path; +import org.opendaylight.controller.md.sal.common.api.data.DataReader; -import static org.opendaylight.controller.md.sal.common.api.TransactionStatus.NEW; +public abstract class AbstractDataModification
*/, D> implements DataModification
{ -public abstract class AbstractDataModification
*/, D> implements DataModification
{ + private final ConcurrentMap
operationalOriginal; + private final ConcurrentMap
configurationOriginal; - private final Map
configurationUpdate; - private final Map
operationalUpdate; + private final ConcurrentMap
operationalCreated; + private final ConcurrentMap
configurationCreated; - private final Set
configurationRemove; - private final Set
operationalRemove; + private final ConcurrentMap
configurationUpdate; + private final ConcurrentMap
operationalUpdate; + private final ConcurrentMap
configurationRemove; + private final ConcurrentMap
operationalRemove; + + private final Map
unmodifiable_configurationOriginal; + private final Map
unmodifiable_operationalOriginal; + private final Map
unmodifiable_configurationCreated; + private final Map
unmodifiable_operationalCreated; private final Map
unmodifiable_configurationUpdate; private final Map
unmodifiable_operationalUpdate; private final Set
unmodifiable_configurationRemove; private final Set
unmodifiable_OperationalRemove; + private DataReader
reader; + + public AbstractDataModification(DataReader
reader) { + this.reader = reader; + this.configurationUpdate = new ConcurrentHashMap<>(); + this.operationalUpdate = new ConcurrentHashMap<>(); + this.configurationRemove = new ConcurrentHashMap<>(); + this.operationalRemove = new ConcurrentHashMap<>(); - public AbstractDataModification(Map
configurationUpdate, Map
operationalUpdate, - Set
configurationRemove, Set
operationalRemove) { - this.configurationUpdate = configurationUpdate; - this.operationalUpdate = operationalUpdate; - this.configurationRemove = configurationRemove; - this.operationalRemove = operationalRemove; + this.configurationOriginal = new ConcurrentHashMap<>(); + this.operationalOriginal = new ConcurrentHashMap<>(); + this.configurationCreated = new ConcurrentHashMap<>(); + this.operationalCreated = new ConcurrentHashMap<>(); + + unmodifiable_configurationOriginal = Collections.unmodifiableMap(configurationOriginal); + unmodifiable_operationalOriginal = Collections.unmodifiableMap(operationalOriginal); + unmodifiable_configurationCreated = Collections.unmodifiableMap(configurationCreated); + unmodifiable_operationalCreated = Collections.unmodifiableMap(operationalCreated); unmodifiable_configurationUpdate = Collections.unmodifiableMap(configurationUpdate); unmodifiable_operationalUpdate = Collections.unmodifiableMap(operationalUpdate); - unmodifiable_configurationRemove = Collections.unmodifiableSet(configurationRemove); - unmodifiable_OperationalRemove = Collections.unmodifiableSet(operationalRemove); - } + unmodifiable_configurationRemove = Collections.unmodifiableSet(configurationRemove.keySet()); + unmodifiable_OperationalRemove = Collections.unmodifiableSet(operationalRemove.keySet()); - public AbstractDataModification() { - this(new HashMap
(), new HashMap
(), new HashSet
(), new HashSet
()); } @Override public final void putConfigurationData(P path, D data) { checkMutable(); + + if (!hasConfigurationOriginal(path)) { + configurationCreated.put(path, data); + } + configurationUpdate.put(path, data); configurationRemove.remove(path); } @Override - public final void putRuntimeData(P path, D data) { + public final void putOperationalData(P path, D data) { checkMutable(); + if (!hasOperationalOriginal(path)) { + operationalCreated.put(path, data); + } operationalUpdate.put(path, data); operationalRemove.remove(path); } @Override - public final void removeRuntimeData(P path) { + public final void putRuntimeData(P path, D data) { + putOperationalData(path, data); + } + + @Override + public final void removeOperationalData(P path) { checkMutable(); + hasOperationalOriginal(path); operationalUpdate.remove(path); - operationalRemove.add(path); + operationalRemove.put(path, path); + } + + @Override + public final void removeRuntimeData(P path) { + removeOperationalData(path); } @Override public final void removeConfigurationData(P path) { checkMutable(); + hasConfigurationOriginal(path); configurationUpdate.remove(path); - configurationRemove.add(path); + configurationRemove.put(path, path); } private final void checkMutable() { @@ -75,24 +113,77 @@ public abstract class AbstractDataModification
*/, D> impleme } @Override - public Map
getUpdatedConfigurationData() { + public final Map
getUpdatedConfigurationData() { return unmodifiable_configurationUpdate; } @Override - public Map
getUpdatedOperationalData() { + public final Map
getUpdatedOperationalData() { return unmodifiable_operationalUpdate; } @Override - public Set
getRemovedConfigurationData() { + public final Set
getRemovedConfigurationData() { return unmodifiable_configurationRemove; } @Override - public Set
getRemovedOperationalData() { + public final Set
getRemovedOperationalData() { return unmodifiable_OperationalRemove; } + @Override + public Map
getCreatedConfigurationData() { + return unmodifiable_configurationCreated; + } + + @Override + public Map
getCreatedOperationalData() { + return unmodifiable_operationalCreated; + } + + @Override + public Map
getOriginalConfigurationData() { + return unmodifiable_configurationOriginal; + } + + @Override + public Map
getOriginalOperationalData() { + return unmodifiable_operationalOriginal; + } + + @Override + public D readOperationalData(P path) { + return reader.readOperationalData(path); + } + + @Override + public D readConfigurationData(P path) { + return reader.readConfigurationData(path); + } + + private boolean hasConfigurationOriginal(P path) { + if (configurationOriginal.containsKey(path)) { + return true; + } + D data = reader.readConfigurationData(path); + if (data != null) { + configurationOriginal.putIfAbsent(path, data); + return true; + } + return false; + } + + private boolean hasOperationalOriginal(P path) { + if (operationalOriginal.containsKey(path)) { + return true; + } + D data = reader.readOperationalData(path); + if (data != null) { + operationalOriginal.putIfAbsent(path, data); + return true; + } + return false; + } }