]> git.basschouten.com Git - openhab-addons.git/commitdiff
[tr064] Merge duplicate phone book entries (#9739)
authort2000 <t2000@users.noreply.github.com>
Sat, 9 Jan 2021 09:39:21 +0000 (10:39 +0100)
committerGitHub <noreply@github.com>
Sat, 9 Jan 2021 09:39:21 +0000 (10:39 +0100)
* [tr064] Merge duplicate phone book entries

Fixes #9738

Signed-off-by: Stefan Triller <github@stefantriller.de>
bundles/org.openhab.binding.tr064/src/main/java/org/openhab/binding/tr064/internal/phonebook/Tr064PhonebookImpl.java

index b9e1dc650c9a6421d1526e7935b3624f4796210d..8e7782b7636858e1ecb02cc810892e184cd8f477 100644 (file)
@@ -72,7 +72,8 @@ public class Tr064PhonebookImpl implements Phonebook {
             phonebook = phonebooksType.getPhonebook().getContact().stream().map(contact -> {
                 String contactName = contact.getPerson().getRealName();
                 return contact.getTelephony().getNumber().stream()
-                        .collect(Collectors.toMap(number -> normalizeNumber(number.getValue()), number -> contactName));
+                        .collect(Collectors.toMap(number -> normalizeNumber(number.getValue()), number -> contactName,
+                                this::mergeSameContactNames));
             }).collect(HashMap::new, HashMap::putAll, HashMap::putAll);
             logger.debug("Downloaded phonebook {}: {}", phonebookName, phonebook);
         } catch (JAXBException | InterruptedException | ExecutionException | TimeoutException e) {
@@ -80,6 +81,16 @@ public class Tr064PhonebookImpl implements Phonebook {
         }
     }
 
+    // in case there are multiple phone entries with same number -> name mapping, i.e. in phonebooks exported from
+    // mobiles containing multiple accounts like: local, cloudprovider1, messenger1, messenger2,...
+    private String mergeSameContactNames(String nameA, String nameB) {
+        if (nameA != null && nameA.equals(nameB)) {
+            return nameA;
+        }
+        throw new IllegalStateException(
+                "Found different names for the same number: '" + nameA + "' and '" + nameB + "'");
+    }
+
     @Override
     public String getName() {
         return phonebookName;