From f65e3b66ee42013fd88f4e036108e42da7d28292 Mon Sep 17 00:00:00 2001 From: Damien Lacoste Date: Mon, 4 Apr 2022 12:51:30 +0200 Subject: [PATCH] Add support for fetching only selected indexes. This is based on the correct branch of libhdbpp-extraction-java. Support is only for timescaleDB for now, further effort is needed to have it working or failing properly on other backends. --- src/main/java/HDBViewer/AttributeInfo.java | 14 ++++++ src/main/java/HDBViewer/MainPanel.java | 47 ++++++++++++++------- src/main/java/HDBViewer/SelectionPanel.java | 18 ++++++++ 3 files changed, 63 insertions(+), 16 deletions(-) diff --git a/src/main/java/HDBViewer/AttributeInfo.java b/src/main/java/HDBViewer/AttributeInfo.java index 9e1a7f0..bd1a388 100644 --- a/src/main/java/HDBViewer/AttributeInfo.java +++ b/src/main/java/HDBViewer/AttributeInfo.java @@ -7,6 +7,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; import org.tango.jhdb.HdbSigInfo; import org.tango.jhdb.HdbSigParam; import org.tango.jhdb.SignalInfo; @@ -217,6 +219,18 @@ public void removeAggregate(HdbData.Aggregate agg) { aggInfos.remove(agg); } + public SortedSet getArrayIndexes() + { + TreeSet ret = new TreeSet<>(); + if( !isArray() || arrAttInfos==null ) + return ret; + for(ArrayAttributeInfo ai : arrAttInfos) + { + ret.add(ai.idx); + } + return ret; + } + public JLDataView getDataView() { return chartData[DATA_IDX]; diff --git a/src/main/java/HDBViewer/MainPanel.java b/src/main/java/HDBViewer/MainPanel.java index 385ac34..cfc6077 100644 --- a/src/main/java/HDBViewer/MainPanel.java +++ b/src/main/java/HDBViewer/MainPanel.java @@ -657,11 +657,11 @@ private void createDataviewExpanded(AttributeInfo ai,int item) { try { // Read - double r = (aai.idx>d.size())?Double.NaN:d.getValueAsDoubleArray()[aai.idx]; + double r = (item>d.size())?Double.NaN:d.getValueAsDoubleArray()[item]; addToDv(aai.chartData,chartTime,r,lastValue,aai.step); if( isRW ) { - double s = (aai.idx>d.sizeW())?Double.NaN:d.getWriteValueAsDoubleArray()[aai.idx]; + double s = (item>d.sizeW())?Double.NaN:d.getWriteValueAsDoubleArray()[item]; addToDv(aai.wchartData,chartTime,s,lastWriteValue,aai.step); } @@ -871,6 +871,7 @@ public void run() { input.endDate = stopDate; input.info.interval = att.interval; //this will only be used for aggregate. input.info.aggregates = att.getAggregates(); + input.info.indexes = att.getArrayIndexes(); sigIn.add(input); } @@ -1298,11 +1299,13 @@ else if (attInfo.isState()) { try { int[] hdbV = ((HdbStateArray) d).getValue(); int[] hdbVWrite = ((HdbStateArray) d).getWriteValue(); + int idx = 0; for (ArrayAttributeInfo aai : attInfo.arrAttInfos) { if(aai.table) { - tablePanel.table.add("/State" + HdbState.getStateString(hdbV[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); + tablePanel.table.add("/State" + HdbState.getStateString(hdbV[idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); if (isRW) - tablePanel.table.add("/State" + HdbState.getStateString(hdbVWrite[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + tablePanel.table.add("/State" + HdbState.getStateString(hdbVWrite[idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + idx++; } } } catch(HdbFailed e) {} @@ -1330,61 +1333,73 @@ else if (attInfo.isState()) { if (d instanceof HdbFloatArray) { float[] hdbV = ((HdbFloatArray) d).getValue(); float[] hdbVWrite = ((HdbFloatArray) d).getWriteValue(); + int idx = 0; for(ArrayAttributeInfo aai : attInfo.arrAttInfos) { if(aai.table) { - tablePanel.table.add(Float.toString(hdbV[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); + tablePanel.table.add(Float.toString(hdbV[idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); if(isRW) - tablePanel.table.add(Float.toString(hdbVWrite[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + tablePanel.table.add(Float.toString(hdbVWrite[idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + idx++; } } } else if (d instanceof HdbLongArray) { int[] hdbV = ((HdbLongArray) d).getValue(); int[] hdbVWrite = ((HdbLongArray) d).getWriteValue(); + int idx = 0; for(ArrayAttributeInfo aai : attInfo.arrAttInfos) { if(aai.table) { - tablePanel.table.add(Integer.toString(hdbV[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); + tablePanel.table.add(Integer.toString(hdbV[idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); if(isRW) - tablePanel.table.add(Integer.toString(hdbVWrite[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + tablePanel.table.add(Integer.toString(hdbVWrite[idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + idx++; } } } else if (d instanceof HdbLong64Array) { long[] hdbV = ((HdbLong64Array) d).getValue(); long[] hdbVWrite = ((HdbLong64Array) d).getWriteValue(); + int idx = 0; for(ArrayAttributeInfo aai : attInfo.arrAttInfos) { if(aai.table) { - tablePanel.table.add(Long.toString(hdbV[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); + tablePanel.table.add(Long.toString(hdbV[idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); if(isRW) - tablePanel.table.add(Long.toString(hdbVWrite[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + tablePanel.table.add(Long.toString(hdbVWrite[idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + idx++; } } } else if (d instanceof HdbShortArray) { short[] hdbV = ((HdbShortArray) d).getValue(); short[] hdbVWrite = ((HdbShortArray) d).getWriteValue(); + int idx = 0; for(ArrayAttributeInfo aai : attInfo.arrAttInfos) { if(aai.table) { - tablePanel.table.add(Short.toString(hdbV[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); + tablePanel.table.add(Short.toString(hdbV[idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); if(isRW) - tablePanel.table.add(Short.toString(hdbVWrite[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + tablePanel.table.add(Short.toString(hdbVWrite[idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + idx++; } } } else if (d instanceof HdbStringArray) { String[] hdbV = ((HdbStringArray) d).getValue(); String[] hdbVWrite = ((HdbStringArray) d).getValue(); + int idx = 0; for(ArrayAttributeInfo aai : attInfo.arrAttInfos) { if(aai.table) { - tablePanel.table.add(hdbV[aai.idx], d.getQualityFactor(), d.getDataTime(), aai.tableIdx); + tablePanel.table.add(hdbV[idx], d.getQualityFactor(), d.getDataTime(), aai.tableIdx); if(isRW) - tablePanel.table.add(hdbVWrite[aai.idx], d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + tablePanel.table.add(hdbVWrite[idx], d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + idx++; } } } else { double[] hdbV = d.getValueAsDoubleArray(); double[] hdbVWrite = d.getValueAsDoubleArray(); + int idx = 0; for(ArrayAttributeInfo aai : attInfo.arrAttInfos) { if(aai.table) { - tablePanel.table.add(Double.toString(hdbV[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); + tablePanel.table.add(Double.toString(hdbV[idx]), d.getQualityFactor(), d.getDataTime(), aai.tableIdx); if(isRW) - tablePanel.table.add(Double.toString(hdbVWrite[aai.idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + tablePanel.table.add(Double.toString(hdbVWrite[idx]), d.getQualityFactor(), d.getDataTime(), aai.wtableIdx); + idx++; } } } diff --git a/src/main/java/HDBViewer/SelectionPanel.java b/src/main/java/HDBViewer/SelectionPanel.java index 35a54fc..543bf97 100644 --- a/src/main/java/HDBViewer/SelectionPanel.java +++ b/src/main/java/HDBViewer/SelectionPanel.java @@ -572,6 +572,24 @@ void updateSelectionList() { rowToIdx[j] = new SelRowItem(i, false, -1, agg); j++; + if (ai.isExpanded()) { + int k = 0; + for (ArrayAttributeInfo aai : ai.arrAttInfos) { + objs[j][HOST_IDX] = ai.host; + objs[j][ATTRIBUTE_IDX] = ai.getName() + "[" + aai.idx + "]"; + objs[j][TYPE_IDX] = "Item #" + aai.idx; + objs[j][INTERVAL_IDX] = ai.interval; + objs[j][RECORDS_IDX] = Integer.toString(ai.dataSize) + " (Err=" + Integer.toString(ai.errorSize) + ")"; + objs[j][TABLE_IDX] = aai.table; + objs[j][STEP_IDX] = aai.step; + objs[j][Y1_IDX] = (aai.selection == AttributeInfo.SEL_Y1); + objs[j][Y2_IDX] = (aai.selection == AttributeInfo.SEL_Y2); + objs[j][IMG_IDX] = (aai.selection == AttributeInfo.SEL_IMAGE); + rowToIdx[j] = new SelRowItem(i, false, k); + j++; + k++; + } + } } } else {