@Override public void pvChanged(PVReaderEvent<VNumber> event) { VNumber value = event.getPvReader().getValue(); if (value != null) { System.out.println(value.getValue() + " " + value.getAlarmSeverity()); } } })
static double integrate(Instant start, Instant end, VNumber value, VNumber nextValue) { Instant actualStart = Collections.max(Arrays.asList(start, value.getTimestamp())); Instant actualEnd = end; if (nextValue != null) { actualEnd = Collections.min(Arrays.asList(end, nextValue.getTimestamp())); } Duration duration = Duration.between(actualStart, actualEnd); if (!duration.isNegative() && !duration.isZero()) { return TimeDuration.toSecondsDouble(duration.multipliedBy(value.getValue().longValue())); } else { return 0; } }
static double integrate(Instant start, Instant end, List<VNumber> values) { if (values.isEmpty()) { return 0; } if (values.get(0).getTimestamp().compareTo(end) >= 0) { return 0; } double integratedValue = 0; for (int i = 0; i < values.size() - 1; i++) { integratedValue += integrate(start, end, values.get(i), values.get(i+1)); } integratedValue += integrate(start, end, values.get(values.size() - 1), null); return integratedValue; }
@Override public Object calculate(final List<Object> args) { VNumber value = (VNumber) args.get(0); if (value != null && value.getValue() != null) { values.add(value); } if (values.isEmpty()) { return null; } if (previousTime == null) { Instant now = Instant.now(); if (now.compareTo(values.get(0).getTimestamp()) <= 0) { previousTime = now; } else { previousTime = values.get(0).getTimestamp(); } } Instant currentTime = Instant.now(); integratedValue += integrate(previousTime, currentTime, values); previousTime = currentTime; while (values.size() > 1 && values.get(1).getTimestamp().compareTo(currentTime) <= 0) { values.remove(0); } return ValueFactory.newVDouble(integratedValue); }
@Override public Object calculate(final List<Object> args) { VNumber minValue = (VNumber) args.get(0); VNumber maxValue = (VNumber) args.get(1); if (minValue == null || maxValue == null) { return null; } return VTableFactory.range(minValue.getValue().doubleValue(), maxValue.getValue().doubleValue()); }
@Override public Object calculate(final List<Object> args) { VNumber initialValue = (VNumber) args.get(0); VNumber increment = (VNumber) args.get(1); if (initialValue == null || increment == null) { return null; } return VTableFactory.step(initialValue.getValue().doubleValue(), increment.getValue().doubleValue()); }
@Override public Map<String, Object> syncExecImpl(Map<String, Object> parameters) { // Method implementation: this is what the service method actually does // Here we are choosing a synchronous implementation, that is the // calculation is done on the thread inside this method call. // Extract data from parameters VNumber arg1 = (VNumber) parameters.get("arg1"); VNumber arg2 = (VNumber) parameters.get("arg2"); // Check for nulls if (arg1 == null || arg2 == null) { return new HashMap<>(); } // Perform calculation VNumber result = ValueFactory.newVDouble(arg1.getValue().doubleValue() + arg2.getValue().doubleValue()); // Prepare the result Map<String, Object> resultMap = new HashMap<>(); resultMap.put("result", result); return resultMap; } }
@Override public Map<String, Object> syncExecImpl(Map<String, Object> parameters) { // Method implementation: this is what the service method actually does // Here we are choosing a synchronous implementation, that is the // calculation is done on the thread inside this method call. // Extract data from parameters VNumber arg1 = (VNumber) parameters.get("arg1"); VNumber arg2 = (VNumber) parameters.get("arg2"); // Check for nulls if (arg1 == null || arg2 == null) { return new HashMap<>(); } // Perform calculation VNumber result = ValueFactory.newVDouble(arg1.getValue().doubleValue() * arg2.getValue().doubleValue()); // Prepare the result Map<String, Object> resultMap = new HashMap<>(); resultMap.put("result", result); return resultMap; } }
@Override public Object calculate(List<Object> args) { if (NullUtils.containsNull(args)) { return null; } VStringArray stringArray = (VStringArray) args.get(0); VNumber index = (VNumber) args.get(1); int i = index.getValue().intValue(); return newVString(stringArray.getData().get(i), stringArray, stringArray); }
@Override public final Object calculate(List<Object> args) { if (NullUtils.containsNull(args)) { return null; } VNumber arg1 = (VNumber) args.get(0); VNumber arg2 = (VNumber) args.get(1); return ValueFactory.newVBoolean( calculate(arg1.getValue().doubleValue(), arg2.getValue().doubleValue()), ValueUtil.highestSeverityOf(args, false), ValueUtil.latestValidTimeOrNowOf(args)); }
@Override public Object calculate(final List<Object> args) { VNumber size = (VNumber) args.get(0); VBoolean invert = (VBoolean) args.get(1); if (size == null || invert == null) { return null; } return ValueFactory.newDisplay(size.getValue().intValue(), VTableFactory.step(0, 1), invert.getValue()); }
@Override public final Object calculate(List<Object> args) { VNumber arg = (VNumber) args.get(0); if (arg == null) { return null; } return ValueFactory.newVDouble(calculate(arg.getValue().doubleValue()), arg, arg, ValueFactory.displayNone()); }
@Override public void pvChanged(PVReaderEvent<VNumber> event) { if (event.isValueChanged()) { System.out.println("... value is " + event.getPvReader().getValue().getValue()); } } })
@Override public Object calculate(final List<Object> args) { if (NullUtils.containsNull(args)) { return null; } VNumberArray arg1 = (VNumberArray) args.get(0); VNumber arg2 = (VNumber) args.get(1); VNumber arg3 = (VNumber) args.get(2); return newVNumberArray( ListMath.rescale(arg1.getData(), arg2.getValue().doubleValue(), arg3.getValue().doubleValue()), ValueUtil.highestSeverityOf(args, false), ValueUtil.latestValidTimeOrNowOf(args), displayNone()); } }
@Override public final Object calculate(List<Object> args) { Object arg1 = args.get(0); Object arg2 = args.get(1); if (arg1 == null || arg2 == null) { return null; } Alarm alarm = ValueUtil.highestSeverityOf(args, false); Time time = ValueUtil.latestTimeOf(args); if (time == null) { time = ValueFactory.timeNow(); } return ValueFactory.newVDouble( calculate(((VNumber) args.get(0)).getValue().doubleValue(), ((VNumber) args.get(1)).getValue().doubleValue()) , alarm, time, ValueFactory.displayNone()); }
@Override public void pvChanged(PVReaderEvent<VNumber> event) { if (event.isValueChanged()) { System.out.println("... value is " + event.getPvReader().getValue().getValue()); } } })
@Override public Object calculate(List<Object> args) { if (NullUtils.containsNull(args)) { return null; } VNumberArray numberArray = (VNumberArray) args.get(0); int fromIndex = ((VNumber) args.get(1)).getValue().intValue(); int toIndex = ((VNumber) args.get(2)).getValue().intValue(); return newVNumberArray( ListMath.limit(numberArray.getData(), fromIndex, toIndex), ValueUtil.highestSeverityOf(args, false), ValueUtil.latestValidTimeOrNowOf(args), displayNone()); }
@Override public final Object calculate(List<Object> args) { if (NullUtils.containsNull(args)) { return null; } Number arg1 = ((VNumber) args.get(0)).getValue(); Number arg2 = ((VNumber) args.get(1)).getValue(); if (arg1 instanceof Float || arg2 instanceof Float || arg1 instanceof Double || arg2 instanceof Double) { throw new IllegalArgumentException("Operator '" + getName() + "' only works with integers"); } return newVInt( calculate(arg1.intValue(), arg2.intValue()), ValueUtil.highestSeverityOf(args, false), ValueUtil.latestValidTimeOrNowOf(args), displayNone()); }