- public void addMapping(MappingOrigin origin, Eid key, Object value, boolean merge) {
- tableMap.get(origin).addMapping(key, value, origin == MappingOrigin.Southbound ? overwrite : true, merge);
+ public void addMapping(MappingOrigin origin, Eid key, MappingData mappingData) {
+ if (mappingData == null) {
+ LOG.warn("addMapping() called with null mapping, ignoring");
+ return;
+ }
+
+ if (origin == MappingOrigin.Southbound) {
+ XtrId xtrId = mappingData.getXtrId();
+ if (xtrId == null && mappingMerge && mappingData.isMergeEnabled()) {
+ LOG.warn("addMapping() called will null xTR-ID in MappingRecord, while merge is set, ignoring");
+ return;
+ }
+ if (xtrId != null && mappingMerge) {
+ if (mappingData.isMergeEnabled()) {
+ smc.addMapping(key, xtrId, mappingData);
+ mergeMappings(key);
+ return;
+ } else {
+ clearPresentXtrIdMappings(key);
+ smc.addMapping(key, xtrId, mappingData);
+ }
+ }
+ }
+
+ tableMap.get(origin).addMapping(key, mappingData);
+ }
+
+ private void clearPresentXtrIdMappings(Eid key) {
+ List<MappingData> allXtrMappingList = (List<MappingData>) (List<?>) smc.getAllXtrIdMappings(key);
+
+ if (((MappingData) smc.getMapping(key, (XtrId) null)).isMergeEnabled()) {
+ LOG.trace("Different xTRs have different merge configuration!");
+ }
+
+ for (MappingData mappingData : allXtrMappingList) {
+ smc.removeMapping(key, mappingData.getXtrId());
+ dsbe.removeXtrIdMapping(DSBEInputUtil.toXtrIdMapping(mappingData));
+ }