Skip to content

Commit 24f8a08

Browse files
committed
Add dimensions and non-equal count to comparison dialog
1 parent d355c64 commit 24f8a08

File tree

5 files changed

+159
-132
lines changed

5 files changed

+159
-132
lines changed
6.05 KB
Loading

app/save-and-restore/app/src/main/java/org/phoebus/applications/saveandrestore/ui/snapshot/compare/TableComparisonViewController.java

Lines changed: 92 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,14 @@
5252
import org.phoebus.core.vtypes.VTypeHelper;
5353
import org.phoebus.pv.PV;
5454
import org.phoebus.pv.PVPool;
55+
import org.phoebus.saveandrestore.util.Utilities;
5556
import org.phoebus.saveandrestore.util.VNoData;
5657

5758
import java.util.ArrayList;
5859
import java.util.Comparator;
5960
import java.util.List;
6061
import java.util.concurrent.TimeUnit;
62+
import java.util.concurrent.atomic.AtomicInteger;
6163
import java.util.logging.Level;
6264
import java.util.logging.Logger;
6365

@@ -94,7 +96,23 @@ public class TableComparisonViewController {
9496
@FXML
9597
private Label pvName;
9698

99+
@SuppressWarnings("unused")
100+
@FXML
101+
private Label dimensionStored;
102+
103+
@SuppressWarnings("unused")
104+
@FXML
105+
private Label dimensionLive;
106+
107+
@SuppressWarnings("unused")
108+
@FXML
109+
private Label nonEqualCount;
110+
111+
97112
private final StringProperty pvNameProperty = new SimpleStringProperty();
113+
private final StringProperty dimensionStoredProperty = new SimpleStringProperty();
114+
private final StringProperty dimensionLiveProperty = new SimpleStringProperty();
115+
private final StringProperty nonEqualCountProperty = new SimpleStringProperty("0");
98116

99117
private PV pv;
100118

@@ -124,6 +142,10 @@ public void initialize() {
124142
thresholdSpinner.setValueFactory(thresholdSpinnerValueFactory);
125143
thresholdSpinner.getEditor().setAlignment(Pos.CENTER_RIGHT);
126144
thresholdSpinner.getEditor().textProperty().addListener((a, o, n) -> parseAndUpdateThreshold(n));
145+
146+
dimensionLive.textProperty().bind(dimensionLiveProperty);
147+
dimensionStored.textProperty().bind(dimensionStoredProperty);
148+
nonEqualCount.textProperty().bind(nonEqualCountProperty);
127149
}
128150

129151
/**
@@ -137,74 +159,60 @@ public void loadDataAndConnect(VType data, String pvName) {
137159
pvNameProperty.set(pvName);
138160

139161
int arraySize = VTypeHelper.getArraySize(data);
140-
if (data instanceof VNumberArray) {
141-
for (int index = 0; index < arraySize; index++) {
142-
List<ColumnEntry> columnEntries = new ArrayList<>();
162+
for (int index = 0; index < arraySize; index++) {
163+
List<ColumnEntry> columnEntries = new ArrayList<>();
164+
ColumnEntry columnEntry = null;
165+
if (data instanceof VNumberArray) {
143166
if (data instanceof VDoubleArray array) {
144167
double value = array.getData().getDouble(index);
145-
ColumnEntry columnEntry = new ColumnEntry(VDouble.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
146-
addRow(index, columnEntries, columnEntry);
168+
columnEntry = new ColumnEntry(VDouble.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
147169
} else if (data instanceof VFloatArray array) {
148170
float value = array.getData().getFloat(index);
149-
ColumnEntry columnEntry = new ColumnEntry(VFloat.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
150-
addRow(index, columnEntries, columnEntry);
171+
columnEntry = new ColumnEntry(VFloat.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
151172
} else if (data instanceof VIntArray array) {
152173
int value = array.getData().getInt(index);
153-
ColumnEntry columnEntry = new ColumnEntry(VInt.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
154-
addRow(index, columnEntries, columnEntry);
174+
columnEntry = new ColumnEntry(VInt.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
155175
} else if (data instanceof VUIntArray array) {
156176
int value = array.getData().getInt(index);
157-
ColumnEntry columnEntry = new ColumnEntry(VUInt.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
158-
addRow(index, columnEntries, columnEntry);
177+
columnEntry = new ColumnEntry(VUInt.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
159178
} else if (data instanceof VLongArray array) {
160179
long value = array.getData().getLong(index);
161-
ColumnEntry columnEntry = new ColumnEntry(VLong.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
162-
addRow(index, columnEntries, columnEntry);
180+
columnEntry = new ColumnEntry(VLong.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
163181
} else if (data instanceof VULongArray array) {
164182
long value = array.getData().getLong(index);
165-
ColumnEntry columnEntry = new ColumnEntry(VULong.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
166-
addRow(index, columnEntries, columnEntry);
183+
columnEntry = new ColumnEntry(VULong.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
167184
} else if (data instanceof VShortArray array) {
168185
short value = array.getData().getShort(index);
169-
ColumnEntry columnEntry = new ColumnEntry(VShort.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
170-
addRow(index, columnEntries, columnEntry);
186+
columnEntry = new ColumnEntry(VShort.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
171187
} else if (data instanceof VUShortArray array) {
172188
short value = array.getData().getShort(index);
173-
ColumnEntry columnEntry = new ColumnEntry(VUShort.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
174-
addRow(index, columnEntries, columnEntry);
189+
columnEntry = new ColumnEntry(VUShort.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
175190
} else if (data instanceof VByteArray array) {
176191
byte value = array.getData().getByte(index);
177-
ColumnEntry columnEntry = new ColumnEntry(VByte.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
178-
addRow(index, columnEntries, columnEntry);
192+
columnEntry = new ColumnEntry(VByte.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
179193
} else if (data instanceof VUByteArray array) {
180194
byte value = array.getData().getByte(index);
181-
ColumnEntry columnEntry = new ColumnEntry(VUByte.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
182-
addRow(index, columnEntries, columnEntry);
195+
columnEntry = new ColumnEntry(VUByte.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
183196
}
184197
}
185-
} else if (data instanceof VBooleanArray array) {
186-
ListBoolean listBoolean = array.getData();
187-
for (int index = 0; index < listBoolean.size(); index++) {
188-
List<ColumnEntry> columnEntries = new ArrayList<>();
198+
else if (data instanceof VBooleanArray array) {
199+
ListBoolean listBoolean = array.getData();
189200
boolean value = listBoolean.getBoolean(index);
190-
ColumnEntry columnEntry = new ColumnEntry(VBoolean.of(value, array.getAlarm(), array.getTime()));
191-
addRow(index, columnEntries, columnEntry);
201+
columnEntry = new ColumnEntry(VBoolean.of(value, array.getAlarm(), array.getTime()));
202+
} else if (data instanceof VEnumArray array) {
203+
List<String> enumValues = array.getData();
204+
columnEntry = new ColumnEntry(VString.of(enumValues.get(index), array.getAlarm(), array.getTime()));
205+
} else if (data instanceof VStringArray array) {
206+
List<String> stringValues = array.getData();
207+
columnEntry = new ColumnEntry(VString.of(stringValues.get(index), array.getAlarm(), array.getTime()));
192208
}
193-
} else if (data instanceof VEnumArray array) {
194-
List<String> enumValues = array.getData();
195-
for (int index = 0; index < enumValues.size(); index++) {
196-
List<ColumnEntry> columnEntries = new ArrayList<>();
197-
ColumnEntry columnEntry = new ColumnEntry(VString.of(enumValues.get(index), array.getAlarm(), array.getTime()));
198-
addRow(index, columnEntries, columnEntry);
199-
}
200-
} else if (data instanceof VStringArray array) {
201-
List<String> stringValues = array.getData();
202-
for (int index = 0; index < stringValues.size(); index++) {
203-
List<ColumnEntry> columnEntries = new ArrayList<>();
204-
ColumnEntry columnEntry = new ColumnEntry(VString.of(stringValues.get(index), array.getAlarm(), array.getTime()));
209+
if(columnEntry != null){
205210
addRow(index, columnEntries, columnEntry);
206211
}
207212
}
213+
214+
// Hard coded column count until we support VTable
215+
dimensionStoredProperty.set(arraySize + " x 1");
208216
connect();
209217
}
210218

@@ -299,103 +307,60 @@ private void updateTable(VType liveData) {
299307
// Live data may have more elements than stored data
300308
if (liveDataArraySize > comparisonTable.getItems().size()) {
301309
List<ColumnEntry> columnEntries = new ArrayList<>();
302-
if (liveData instanceof VNumberArray) {
303-
if (liveData instanceof VDoubleArray array) {
304-
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
310+
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
311+
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
312+
if (liveData instanceof VNumberArray) {
313+
if (liveData instanceof VDoubleArray array) {
305314
double value = array.getData().getDouble(index);
306-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
307315
columnEntry.setLiveVal(VDouble.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
308-
addRow(index, columnEntries, columnEntry);
309-
}
310-
} else if (liveData instanceof VFloatArray array) {
311-
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
316+
} else if (liveData instanceof VFloatArray array) {
312317
float value = array.getData().getFloat(index);
313-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
314318
columnEntry.setLiveVal(VFloat.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
315-
addRow(index, columnEntries, columnEntry);
316-
}
317-
} else if (liveData instanceof VIntArray array) {
318-
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
319+
} else if (liveData instanceof VIntArray array) {
319320
int value = array.getData().getInt(index);
320-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
321321
columnEntry.setLiveVal(VInt.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
322-
addRow(index, columnEntries, columnEntry);
323-
}
324-
} else if (liveData instanceof VUIntArray array) {
325-
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
322+
} else if (liveData instanceof VUIntArray array) {
326323
int value = array.getData().getInt(index);
327-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
328324
columnEntry.setLiveVal(VUInt.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
329-
addRow(index, columnEntries, columnEntry);
330-
}
331-
} else if (liveData instanceof VLongArray array) {
332-
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
325+
} else if (liveData instanceof VLongArray array) {
333326
long value = array.getData().getLong(index);
334-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
335327
columnEntry.setLiveVal(VLong.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
336-
addRow(index, columnEntries, columnEntry);
337-
}
338-
} else if (liveData instanceof VULongArray array) {
339-
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
328+
} else if (liveData instanceof VULongArray array) {
340329
long value = array.getData().getLong(index);
341-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
342330
columnEntry.setLiveVal(VULong.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
343-
addRow(index, columnEntries, columnEntry);
344-
}
345-
} else if (liveData instanceof VShortArray array) {
346-
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
331+
} else if (liveData instanceof VShortArray array) {
347332
short value = array.getData().getShort(index);
348-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
349333
columnEntry.setLiveVal(VShort.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
350-
addRow(index, columnEntries, columnEntry);
351-
}
352-
} else if (liveData instanceof VUShortArray array) {
353-
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
334+
} else if (liveData instanceof VUShortArray array) {
354335
short value = array.getData().getShort(index);
355-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
356336
columnEntry.setLiveVal(VUShort.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
357-
addRow(index, columnEntries, columnEntry);
358-
}
359-
} else if (liveData instanceof VByteArray array) {
360-
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
337+
} else if (liveData instanceof VByteArray array) {
361338
byte value = array.getData().getByte(index);
362-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
363339
columnEntry.setLiveVal(VByte.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
364-
addRow(index, columnEntries, columnEntry);
365-
}
366-
} else if (liveData instanceof VUByteArray array) {
367-
for (int index = comparisonTable.getItems().size(); index < liveDataArraySize; index++) {
340+
} else if (liveData instanceof VUByteArray array) {
368341
byte value = array.getData().getByte(index);
369-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
370342
columnEntry.setLiveVal(VUByte.of(value, array.getAlarm(), array.getTime(), array.getDisplay()));
371-
addRow(index, columnEntries, columnEntry);
372343
}
373344
}
374-
} else if (liveData instanceof VBooleanArray array) {
375-
ListBoolean listBoolean = array.getData();
376-
for (int i = 0; i < listBoolean.size(); i++) {
377-
boolean value = listBoolean.getBoolean(i);
378-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
345+
else if (liveData instanceof VBooleanArray array) {
346+
ListBoolean listBoolean = array.getData();
347+
boolean value = listBoolean.getBoolean(index);
379348
columnEntry.setLiveVal(VBoolean.of(value, array.getAlarm(), array.getTime()));
380-
addRow(i, columnEntries, columnEntry);
381-
}
382-
} else if (liveData instanceof VEnumArray array) {
383-
List<String> enumValues = array.getData();
384-
for (int i = 0; i < enumValues.size(); i++) {
385-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
386-
columnEntry.setLiveVal(VString.of(enumValues.get(i), array.getAlarm(), array.getTime()));
387-
addRow(i, columnEntries, columnEntry);
388-
}
389-
} else if (liveData instanceof VStringArray array) {
390-
List<String> stringValues = array.getData();
391-
for (int i = 0; i < stringValues.size(); i++) {
392-
ColumnEntry columnEntry = new ColumnEntry(VNoData.INSTANCE);
393-
columnEntry.setLiveVal(VString.of(stringValues.get(i), array.getAlarm(), array.getTime()));
394-
addRow(i, columnEntries, columnEntry);
349+
} else if (liveData instanceof VEnumArray array) {
350+
List<String> enumValues = array.getData();
351+
columnEntry.setLiveVal(VString.of(enumValues.get(index), array.getAlarm(), array.getTime()));
352+
} else if (liveData instanceof VStringArray array) {
353+
List<String> stringValues = array.getData();
354+
columnEntry.setLiveVal(VString.of(stringValues.get(index), array.getAlarm(), array.getTime()));
395355
}
356+
addRow(index, columnEntries, columnEntry);
396357
}
397358
}
359+
// Hard coded column count until we support VTable
360+
dimensionLiveProperty.set(liveDataArraySize + " x 1");
361+
computeNonEqualCount();
398362
}
363+
399364
}
400365

401366
private void parseAndUpdateThreshold(String value) {
@@ -418,8 +383,24 @@ private void parseAndUpdateThreshold(String value) {
418383
*/
419384
private void updateThreshold(double threshold) {
420385
double ratio = threshold / 100;
386+
421387
comparisonTable.getItems().forEach(comparisonData -> {
422388
comparisonData.setThreshold(ratio);
423389
});
390+
391+
computeNonEqualCount();
392+
}
393+
394+
private void computeNonEqualCount(){
395+
AtomicInteger nonEqualCount = new AtomicInteger(0);
396+
comparisonTable.getItems().forEach(comparisonData -> {
397+
comparisonData.getColumnEntries().forEach(columnEntry -> {
398+
if(!Utilities.areValuesEqual(columnEntry.liveValueProperty().get(), columnEntry.storedValueProperty().get(), columnEntry.getDelta().get().threshold)){
399+
nonEqualCount.incrementAndGet();
400+
}
401+
});
402+
});
403+
404+
nonEqualCountProperty.set(nonEqualCount.toString());
424405
}
425406
}

0 commit comments

Comments
 (0)