improve renaming wallet keystore labels for uniqueness

This commit is contained in:
Craig Raw 2023-08-30 15:21:31 +02:00
parent bae4ce6605
commit 2b7b650fae
2 changed files with 16 additions and 4 deletions

View file

@ -1773,8 +1773,11 @@ public class Wallet extends Persistable implements Comparable<Wallet> {
}
public void makeLabelsUnique(Keystore newKeystore) {
Set<String> labels = getKeystores().stream().map(Keystore::getLabel).collect(Collectors.toSet());
if(!labels.add(newKeystore.getLabel())) {
makeLabelsUnique(newKeystore, false);
}
}
private int makeLabelsUnique(Keystore newKeystore, boolean duplicateFound) {
int max = 0;
@ -1800,6 +1803,8 @@ public class Wallet extends Persistable implements Comparable<Wallet> {
max++;
if(newKeystore.getLabel().equals(Keystore.DEFAULT_LABEL)) {
newKeystore.setLabel(Keystore.DEFAULT_LABEL.substring(0, Keystore.DEFAULT_LABEL.length() - 2) + " " + max);
} else if(newKeystore.getLabel().length() + Integer.toString(max).length() + 1 > Keystore.MAX_LABEL_LENGTH) {
newKeystore.setLabel(newKeystore.getLabel().substring(0, Keystore.MAX_LABEL_LENGTH - (Integer.toString(max).length() + 1)) + " " + max);
} else {
newKeystore.setLabel(newKeystore.getLabel() + " " + max);
}

View file

@ -85,12 +85,19 @@ public class WalletTest {
wallet.getKeystores().add(defaultKeystore3);
Keystore defaultKeystore4 = new Keystore("Keystore");
wallet.makeLabelsUnique(defaultKeystore4);
Assert.assertEquals("Keystore 4", defaultKeystore4.getLabel());
Assert.assertEquals("Keystore", defaultKeystore4.getLabel());
wallet.getKeystores().add(defaultKeystore4);
Keystore defaultKeystore5 = new Keystore("Keystore 4");
Keystore defaultKeystore5 = new Keystore("Keystore 3");
wallet.makeLabelsUnique(defaultKeystore5);
Assert.assertEquals("Keystore 4 2", defaultKeystore5.getLabel());
Assert.assertEquals("Keystore 3 2", defaultKeystore5.getLabel());
wallet.getKeystores().add(defaultKeystore5);
Keystore longKeystore1 = new Keystore("1234567890ABCDEFG");
wallet.getKeystores().add(longKeystore1);
Keystore longKeystore2 = new Keystore("1234567890ABCDEFG");
wallet.makeLabelsUnique(longKeystore2);
Assert.assertEquals("1234567890ABCD 1", longKeystore1.getLabel());
Assert.assertEquals("1234567890ABCD 2", longKeystore2.getLabel());
}
@Test