Fixed history data collection minmax stream updates and plot rendering
[simantics/platform.git] / bundles / org.simantics.history / src / org / simantics / history / impl / CollectorImpl.java
index d6dd6d9b33f19baf7bca38f773d99f9530508f6e..87062a9dabecae759aa0f5dffd442a496af156e5 100644 (file)
@@ -811,7 +811,7 @@ public class CollectorImpl implements Collector {
                
                boolean condition = makeNewBand || (!i.hasEndTime && i.itemState.count==2); 
 
-               if(i.stream.size() > 0 ) { //!i.itemState.ooDeadband) {
+               if (i.stream.size() > 0) {
 
                        /// Extend existing band
                        // Extend endTime value
@@ -820,49 +820,51 @@ public class CollectorImpl implements Collector {
                        } else {
                                i.current.setEndTime( time.getBinding(), time.getValue() );
                        }
-                       if  (i.itemState.ooDeadband) {
+                       if (i.itemState.ooDeadband || isMinMaxFormat) {
                                if (isValidValue) {
                                        // Set last value
                                        if (i.current.hasLastValue()) {
                                                i.current.setLastValue( value.getBinding(), value.getValue() );
                                        }
 
-                                       // Add sum
-                                       if (i.current.hasAvg() && i.isNumeric && !isNanValue && !restep) {
-                                               double duration = (currentTime - i.itemState.firstTime);
-                                               if(duration < 1e-9) {
-                                                       i.current.setAvg( Bindings.DOUBLE, 0.0 );
-                                               } else {
-                                                       i.current.setAvg( Bindings.DOUBLE, i.itemState.sum / duration);
+                                       if (i.isNumeric && !isNanValue) {
+                                               // Add sum
+                                               if (i.current.hasAvg() && !restep) {
+                                                       double duration = (currentTime - i.itemState.firstTime);
+                                                       if(duration < 1e-9) {
+                                                               i.current.setAvg( Bindings.DOUBLE, 0.0 );
+                                                       } else {
+                                                               i.current.setAvg( Bindings.DOUBLE, i.itemState.sum / duration);
+                                                       }
                                                }
-                                       }
 
-                                       // Update min-max
-                                       if (i.current.hasMin() && i.isNumeric && !isNanValue) {
-                                               Binding minBinding = i.current.getMinBinding();
-                                               Object prevMinValue = i.current.getMin();
-                                               Object currentValueWithMinBinding = value.getValue( minBinding );
-                                               int diff = minBinding.compare( prevMinValue, currentValueWithMinBinding );
-                                               if (diff>0) i.current.setMin( minBinding, currentValueWithMinBinding );
-                                       }
-                                       if (i.current.hasMax() && i.isNumeric && !isNanValue) {
-                                               Binding maxBinding = i.current.getMaxBinding();
-                                               Object prevMaxValue = i.current.getMax();
-                                               Object currentValueWithMaxBinding = value.getValue( maxBinding );
-                                               int diff = maxBinding.compare( prevMaxValue, currentValueWithMaxBinding );
-                                               if (diff<0) i.current.setMax( maxBinding, currentValueWithMaxBinding );
-                                       }
+                                               // Update min-max
+                                               if (i.current.hasMin()) {
+                                                       Binding minBinding = i.current.getMinBinding();
+                                                       Object prevMinValue = i.current.getMin();
+                                                       Object currentValueWithMinBinding = value.getValue( minBinding );
+                                                       int diff = minBinding.compare( prevMinValue, currentValueWithMinBinding );
+                                                       if (diff>0) i.current.setMin( minBinding, currentValueWithMinBinding );
+                                               }
+                                               if (i.current.hasMax()) {
+                                                       Binding maxBinding = i.current.getMaxBinding();
+                                                       Object prevMaxValue = i.current.getMax();
+                                                       Object currentValueWithMaxBinding = value.getValue( maxBinding );
+                                                       int diff = maxBinding.compare( prevMaxValue, currentValueWithMaxBinding );
+                                                       if (diff<0) i.current.setMax( maxBinding, currentValueWithMaxBinding );
+                                               }
 
-                                       // Update median
-                                       if (i.current.hasMedian() && i.isNumeric && !isNanValue) {
-                                               Double median = i.itemState.median.getMedian();
-                                               i.current.setMedian( Bindings.DOUBLE, median);
+                                               // Update median
+                                               if (i.current.hasMedian()) {
+                                                       Double median = i.itemState.median.getMedian();
+                                                       i.current.setMedian( Bindings.DOUBLE, median);
+                                               }
                                        }
                                } else {
                                        i.current.setValueNull();
                                }
 
-                               // Add count
+                               // Update count
                                if (i.current.hasCount()) {
                                        i.current.setCount( i.itemState.count );
                                }