@Override public void addValue(Object array, int pos, Object value) { if (value != null) ((String[]) array)[pos] = ((VString) value).getValue(); }
@Override public Object calculate(final List<Object> args) { VTable table = (VTable) args.get(0); VString columnName = (VString) args.get(1); VString substring = (VString) args.get(2); if (columnName == null || columnName.getValue() == null || table == null || substring == null) { return null; } VTable result = VTableFactory.tableStringMatchFilter(table, columnName.getValue(), substring.getValue()); return result; }
@Override public Object calculate(final List<Object> args) { VTable table = (VTable) args.get(0); VString columnName = (VString) args.get(1); VType min = (VType) args.get(2); VType max = (VType) args.get(3); if (columnName == null || columnName.getValue() == null || table == null || min == null || max == null) { return null; } VTable result = VTableFactory.tableRangeFilter(table, columnName.getValue(), min, max); return result; }
@Override public Object calculate(final List<Object> args) { VTable table = (VTable) args.get(0); VString columnName = (VString) args.get(1); VType value = (VType) args.get(2); if (columnName == null || columnName.getValue() == null || table == null || value == null) { return null; } VTable result = VTableFactory.tableValueFilter(table, columnName.getValue(), value); return result; }
@Override public Object calculate(final List<Object> args) { // Retrieve the new name VString value = (VString) args.get(0); String newName = null; if (value != null) { newName = value.getValue(); } return calculateImpl(newName); }
@Override public Object calculate(final List<Object> args) { VString name = (VString) args.get(0); VStringArray data = (VStringArray) args.get(1); if (name == null || data == null) { return null; } return VTableFactory.column(name.getValue(), data); }
@Override public String readValue() { VString value = function.readValue(); if (value == null) { return null; } else { return value.getValue(); } }
@Override public Object calculate(final List<Object> args) { VString name = (VString) args.get(0); ListNumberProvider data = (ListNumberProvider) args.get(1); if (name == null || data == null) { return null; } return VTableFactory.column(name.getValue(), data); }
@Override public Object calculate(final List<Object> args) { VString name = (VString) args.get(0); VNumberArray data = (VNumberArray) args.get(1); if (name == null || data == null) { return null; } return VTableFactory.column(name.getValue(), data); }
@Override public Object calculate(List<Object> args) { List<String> data = new ArrayList<>(); for (Object arg : args) { VString str = (VString) arg; if (str == null || str.getValue() == null) data.add(null); else data.add(str.getValue()); } return ValueFactory.newVStringArray(data, ValueUtil.highestSeverityOf(args, false), ValueUtil.latestValidTimeOrNowOf(args)); }
@Override public Map<String, Object> syncExecImpl(final Map<String, Object> parameters) throws Exception { String expandedCommand = command; for (Map.Entry<String, Object> entry : parameters.entrySet()) { String name = entry.getKey(); Object object = entry.getValue(); String value = null; if (object instanceof VString) { value = ((VString) object).getValue(); } else if (object == null) { value = ""; } else { throw new IllegalArgumentException("Can't map parameter '" + name + "': was " + object); } expandedCommand = expandedCommand.replaceAll("#" + name + "#", value); } return GenericExecServiceMethod.syncExecuteCommand(parameters, shell, shellArg, expandedCommand); } }
@Override public Object calculate(List<Object> args) { VString vfieldName = (VString) args.get(0); if (vfieldName == null) return null; String fieldName = vfieldName.getValue(); PVAPVStructure value = (PVAPVStructure) args.get(1); if (value == null) return null; PVStructure pvStructure = value.getPVStructure(); PVField pvField = pvStructure.getSubField(fieldName); PVStructure pvMetadataParent = (fieldName.equals("value")) ? pvStructure : null; if (pvField != null) return toVType(pvField, pvMetadataParent); return null; }
@Override public Map<String, Object> syncExecImpl(final Map<String, Object> parameters) throws Exception{ String shell = defaultShell(); String shellArg = defaultShellArg(); String command = ((VString) parameters.get("command")).getValue(); return syncExecuteCommand(parameters, shell, shellArg, command); }
@Override public Object calculate(List<Object> args) { // Handle nulls if (NullUtils.containsNull(args)) { return null; } // Concatenate strings StringBuilder sb = new StringBuilder(); for (Object object : args) { VString str = (VString) object; sb.append(str.getValue()); } // Return new value return ValueFactory.newVString(sb.toString(), ValueUtil.highestSeverityOf(args, false), ValueUtil.latestValidTimeOrNowOf(args)); }
@Override public Map<String, Object> syncExecImpl(Map<String, Object> parameters) throws Exception { try (Connection connection = getDataSource().getConnection()) { try (PreparedStatement preparedStatement = connection.prepareStatement(getQuery())) { int i = 0; for (String parameterName : getParameterNames()) { Object value = parameters.get(parameterName); if (value instanceof VString) { preparedStatement.setString(i+1, ((VString) value).getValue()); } else if (value instanceof VNumber) { preparedStatement.setDouble(i+1, ((VNumber) value).getValue().doubleValue()); } else { throw new RuntimeException("JDBC mapping support for " + value.getClass().getSimpleName() + " not implemented"); } i++; } if (isResultQuery()) { ResultSet resultSet = preparedStatement.executeQuery(); VTable table = resultSetToVTable(resultSet); return Collections.<String, Object>singletonMap(getResults().get(0).getName(), table); } else { preparedStatement.execute(); return new HashMap<>(); } } } catch (Exception ex) { throw ex; } }
@Override public Object calculate(List<Object> args) { VString vfieldName = (VString) args.get(0); if (vfieldName == null) return null; String fieldName = vfieldName.getValue(); PVAPVStructure value = (PVAPVStructure) args.get(1); if (value == null) return null; PVStructure pvStructure = value.getPVStructure(); PVField pvField = pvStructure.getSubField(fieldName); if (pvField != null) { if (pvField instanceof PVStructure) return new PVAPVStructure((PVStructure)pvField, false); else return new PVAPVField(pvField, false); } else return null; }
@Override public Object calculate(final List<Object> args) { if (NullUtils.containsNull(args)) { return null; } VTable table = (VTable) args.get(0); VString columnName = (VString) args.get(1); VNumberArray range = (VNumberArray) args.get(2); if (range.getData().size() != 2) { throw new IllegalArgumentException("Range array must be of 2 elements"); } VTable result = VTableFactory.tableRangeFilter(table, columnName.getValue(), ValueFactory.newVDouble(range.getData().getDouble(0)), ValueFactory.newVDouble(range.getData().getDouble(1))); return result; }
@Override public void pvChanged(PVReaderEvent<VString> event) { PVReader<VString> pv = event.getPvReader(); logException(pv.lastException()); if (pv.getValue() != null) { System.out.println(pv.getValue().getValue() + " " + Date.from(pv.getValue().getTimestamp()) + " " + pv.getValue().getAlarmSeverity()); } } })
@Override public Object calculate(final List<Object> args) { // Retrieve the new name VString value = (VString) args.get(0); String newName = null; if (value != null) { newName = value.getValue(); } // If the name does not match, disconnect and connect if (!Objects.equals(newName, previousName)) { // Disconnect previous if (currentExpression != null) { getDirector().disconnectReadExpression(currentExpression); currentExpression = null; } // Connect new if (newName != null) { currentExpression = channel(newName, Object.class); getDirector().connectReadExpression(currentExpression); } previousName = newName; } // Return value if (newName == null) { return null; } return currentExpression.getFunction().readValue(); }
static JsonObject toJson(VString vString) { return new JsonVTypeBuilder() .addType(vString) .add("value", vString.getValue()) .addAlarm(vString) .addTime(vString) .build(); }