Skip to content

Commit 5ea828e

Browse files
committed
Improve feedback when duplicate PV names are detected
1 parent eb16940 commit 5ea828e

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

app/save-and-restore/app/src/main/java/org/phoebus/applications/saveandrestore/Messages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public class Messages {
7979
public static String duplicatePVNamesAdditionalItems;
8080
public static String duplicatePVNamesCheckFailed;
8181
public static String duplicatePVNamesFoundInSelection;
82+
public static String duplicatePVNamesNotSupported;
8283
public static String Edit;
8384
public static String editFilter;
8485
public static String errorActionFailed;

app/save-and-restore/app/src/main/java/org/phoebus/applications/saveandrestore/ui/configuration/ConfigurationController.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -413,14 +413,13 @@ public void addPv() {
413413
String[] pvNames = pvNameProperty.get().trim().split("[\\s;]+");
414414
String[] readbackPvNames = readbackPvNameProperty.get().trim().split("[\\s;]+");
415415

416+
if(!checkForDuplicatePvNames(pvNames)){
417+
return;
418+
}
419+
416420
ArrayList<ConfigPvEntry> configPVs = new ArrayList<>();
417421
for (int i = 0; i < pvNames.length; i++) {
418-
// Disallow duplicate PV names as in a restore operation this would mean that a PV is written
419-
// multiple times, possibly with different values.
420422
String pvName = pvNames[i].trim();
421-
if (configurationEntries.stream().anyMatch(s -> s.getPvNameProperty().get().equals(pvName))) {
422-
continue;
423-
}
424423
String readbackPV = i >= readbackPvNames.length ? null : readbackPvNames[i] == null || readbackPvNames[i].isEmpty() ? null : readbackPvNames[i].trim();
425424
ConfigPv configPV = ConfigPv.builder()
426425
.pvName(pvName)
@@ -432,7 +431,26 @@ public void addPv() {
432431
configurationEntries.addAll(configPVs);
433432
resetAddPv();
434433
});
434+
}
435435

436+
/**
437+
* Checks that added PV names are not added multiple times
438+
* @param addedPvNames New PV names added in the UI
439+
* @return <code>true</code> if no duplicates are detected, otherwise <code>false</code>
440+
*/
441+
private boolean checkForDuplicatePvNames(String[] addedPvNames){
442+
List<String> pvNamesAsList = new ArrayList<>();
443+
pvNamesAsList.addAll(Arrays.asList(addedPvNames));
444+
pvTable.itemsProperty().get().forEach(i -> pvNamesAsList.add(i.getPvNameProperty().get()));
445+
List<String> duplicatePvNames = pvNamesAsList.stream().filter(n -> Collections.frequency(pvNamesAsList, n) > 1).toList();
446+
447+
if(duplicatePvNames.size() > 0){
448+
Alert alert = new Alert(Alert.AlertType.ERROR);
449+
alert.setHeaderText(Messages.duplicatePVNamesNotSupported);
450+
alert.showAndWait();
451+
return false;
452+
}
453+
return true;
436454
}
437455

438456
private void resetAddPv() {

app/save-and-restore/app/src/main/resources/org/phoebus/applications/saveandrestore/messages.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,9 @@ deleteFilterFailed=Failed to delete filter
6969
description=Description
7070
descriptionHint=Specify non-empty description
7171
duplicatePVNamesAdditionalItems={0} additional PV names
72-
duplicatePVNamesFoundInSelection=Cannot add selected snapshots, duplicate PV names found
7372
duplicatePVNamesCheckFailed=Cannot check if snapshots may be added, remote service off-line?
73+
duplicatePVNamesFoundInSelection=Cannot add selected snapshots, duplicate PV names found
74+
duplicatePVNamesNotSupported=Duplicate PV names detected. This is not supported.
7475
editFilter=Edit filter
7576
errorActionFailed=Action failed
7677
errorAddTagFailed=Failed to add tag

0 commit comments

Comments
 (0)