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=fb3e38f44af0fff91264f24d197fb77e02d67c49;hb=523c3f0629438462c5bb7be4adcaf7103a3f7ea6;hp=c335b75e15981989078fa862ad31b88dd70d4e04;hpb=4f76ea30ad49331ca38ce63925b3fabf8e769731;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 c335b75e15..fb3e38f44a 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,8 +1,8 @@ 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; @@ -12,9 +12,7 @@ import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.controller.md.sal.common.api.data.DataReader; import org.opendaylight.yangtools.concepts.Path; -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; @@ -59,40 +57,40 @@ public abstract class AbstractDataModification

*/, D> imple unmodifiable_operationalUpdate = Collections.unmodifiableMap(operationalUpdate); unmodifiable_configurationRemove = Collections.unmodifiableSet(configurationRemove.keySet()); unmodifiable_OperationalRemove = Collections.unmodifiableSet(operationalRemove.keySet()); - } @Override public final void putConfigurationData(P path, D data) { checkMutable(); - - if (!hasConfigurationOriginal(path)) { + D original = null; + if ((original = getConfigurationOriginal(path)) == null) { configurationCreated.put(path, data); } - configurationUpdate.put(path, data); + configurationUpdate.put(path, mergeConfigurationData(path,original, data)); configurationRemove.remove(path); } @Override public final void putOperationalData(P path, D data) { checkMutable(); - if (!hasOperationalOriginal(path)) { + D original = null; + if ((original = getOperationalOriginal(path)) == null) { operationalCreated.put(path, data); } - operationalUpdate.put(path, data); + operationalUpdate.put(path, mergeOperationalData(path,original,data)); operationalRemove.remove(path); } @Override public final void putRuntimeData(P path, D data) { - putRuntimeData(path, data); + putOperationalData(path, data); } @Override public final void removeOperationalData(P path) { checkMutable(); - hasOperationalOriginal(path); + getOperationalOriginal(path); operationalUpdate.remove(path); operationalRemove.put(path, path); } @@ -105,7 +103,7 @@ public abstract class AbstractDataModification

*/, D> imple @Override public final void removeConfigurationData(P path) { checkMutable(); - hasConfigurationOriginal(path); + getConfigurationOriginal(path); configurationUpdate.remove(path); configurationRemove.put(path, path); } @@ -166,27 +164,37 @@ public abstract class AbstractDataModification

*/, D> imple return reader.readConfigurationData(path); } - private boolean hasConfigurationOriginal(P path) { - if (configurationOriginal.containsKey(path)) { - return true; + private D getConfigurationOriginal(P path) { + D data = configurationOriginal.get(path); + if (data != null) { + return data; } - D data = reader.readConfigurationData(path); + data = reader.readConfigurationData(path); if (data != null) { configurationOriginal.putIfAbsent(path, data); - return true; + return data; } - return false; + return null; } - private boolean hasOperationalOriginal(P path) { - if (operationalOriginal.containsKey(path)) { - return true; + private D getOperationalOriginal(P path) { + D data = operationalOriginal.get(path); + if (data != null) { + return data; } - D data = reader.readConfigurationData(path); + data = reader.readOperationalData(path); if (data != null) { operationalOriginal.putIfAbsent(path, data); - return true; + return data; } - return false; + return null; + } + + protected D mergeOperationalData(P path,D stored, D modified) { + return modified; + } + + protected D mergeConfigurationData(P path,D stored, D modified) { + return modified; } }