use of org.diirt.vtype.VType in project yamcs-studio by yamcs.
the class TableValueFilterFunction method calculate.
@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;
}
use of org.diirt.vtype.VType in project yamcs-studio by yamcs.
the class LocalChannelHandler method write.
@Override
public void write(Object newValue, ChannelWriteCallback callback) {
try {
if (VEnum.class.equals(type)) {
// Handle enum writes
int newIndex = -1;
VEnum firstEnum = (VEnum) initialValue;
List<String> labels = firstEnum.getLabels();
if (newValue instanceof Number) {
newIndex = ((Number) newValue).intValue();
} else if (newValue instanceof String) {
newIndex = labels.indexOf((String) newValue);
// parse a number.
if (newIndex == -1) {
String value = (String) newValue;
try {
newIndex = Double.valueOf(value).intValue();
} catch (NumberFormatException ex) {
}
}
} else {
throw new IllegalArgumentException("Value" + newValue + " can not be accepted by VEnum.");
}
newValue = ValueFactory.newVEnum(newIndex, firstEnum.getLabels(), alarmNone(), timeNow());
} else if (VString.class.equals(type) && newValue instanceof String) {
newValue = ValueFactory.newVString((String) newValue, alarmNone(), timeNow());
} else {
// If the string can be parsed to a number, do it
if (newValue instanceof String) {
String value = (String) newValue;
try {
newValue = Double.valueOf(value);
} catch (NumberFormatException ex) {
// Not a double - continue
}
}
// If new value is not a VType, try to convert it
if (!(newValue instanceof VType)) {
newValue = checkValue(ValueFactory.toVTypeChecked(newValue));
}
}
processMessage(newValue);
callback.channelWritten(null);
} catch (Exception ex) {
callback.channelWritten(ex);
}
}
use of org.diirt.vtype.VType in project yamcs-studio by yamcs.
the class PVUtil method getStringArray.
/**
* Get string array from pv.
*
* @param pv
* The PV.
* @return String array. For string array, it's the actual strings. For numeric arrays, the numbers are formatted as
* strings. For enum array, the labels are returned. For scalar PVs, an array with a single string is
* returned.
*/
public static final String[] getStringArray(IPV pv) {
final VType value = checkPVValue(pv);
if (value instanceof VStringArray) {
final List<String> list = ((VStringArray) value).getData();
return list.toArray(new String[list.size()]);
} else if (value instanceof VDoubleArray) {
final ListNumber list = ((VNumberArray) value).getData();
final String[] text = new String[list.size()];
for (int i = 0; i < text.length; ++i) text[i] = Double.toString(list.getDouble(i));
return text;
} else if (value instanceof VNumberArray) {
final ListNumber list = ((VNumberArray) value).getData();
final String[] text = new String[list.size()];
for (int i = 0; i < text.length; ++i) text[i] = Long.toString(list.getLong(i));
return text;
} else if (value instanceof VEnumArray) {
final List<String> labels = ((VEnumArray) value).getLabels();
final ListInt list = ((VEnumArray) value).getIndexes();
final String[] text = new String[list.size()];
for (int i = 0; i < text.length; ++i) {
final int index = list.getInt(i);
if (index >= 0 && index <= labels.size())
text[i] = labels.get(index);
else
text[i] = "<" + index + ">";
}
return text;
}
return new String[] { getString(pv) };
}
use of org.diirt.vtype.VType in project yamcs-studio by yamcs.
the class ScrollbarEditPart method registerLoadLimitsListener.
/**
*/
private void registerLoadLimitsListener() {
if (getExecutionMode() == ExecutionMode.RUN_MODE) {
final ScrollBarModel model = getWidgetModel();
if (model.isLimitsFromPV()) {
IPV pv = getPV(AbstractPVWidgetModel.PROP_PVNAME);
if (pv != null) {
if (pvLoadLimitsListener == null)
pvLoadLimitsListener = new IPVListener.Stub() {
@Override
public void valueChanged(IPV pv) {
VType value = pv.getValue();
Display displayInfo = VTypeHelper.getDisplayInfo(value);
if (value != null && displayInfo != null) {
Display new_meta = displayInfo;
if (meta == null || !meta.equals(new_meta)) {
meta = new_meta;
model.setPropertyValue(ScrollBarModel.PROP_MAX, meta.getUpperDisplayLimit());
model.setPropertyValue(ScrollBarModel.PROP_MIN, meta.getLowerDisplayLimit());
}
}
}
};
pv.addListener(pvLoadLimitsListener);
}
}
}
}
use of org.diirt.vtype.VType in project yamcs-studio by yamcs.
the class ScrollbarEditPart method registerPropertyChangeHandlers.
@Override
protected void registerPropertyChangeHandlers() {
IWidgetPropertyChangeHandler pvNameHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
registerLoadLimitsListener();
return false;
}
};
setPropertyChangeHandler(AbstractPVWidgetModel.PROP_PVNAME, pvNameHandler);
((ScrollbarFigure) getFigure()).setEnabled(getWidgetModel().isEnabled() && (getExecutionMode() == ExecutionMode.RUN_MODE));
removeAllPropertyChangeHandlers(AbstractWidgetModel.PROP_ENABLED);
// enable
IWidgetPropertyChangeHandler enableHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
if (getExecutionMode() == ExecutionMode.RUN_MODE)
figure.setEnabled((Boolean) newValue);
return false;
}
};
setPropertyChangeHandler(AbstractWidgetModel.PROP_ENABLED, enableHandler);
// value
IWidgetPropertyChangeHandler valueHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
if (newValue == null)
return false;
((ScrollbarFigure) refreshableFigure).setValue(VTypeHelper.getDouble((VType) newValue));
return false;
}
};
setPropertyChangeHandler(AbstractPVWidgetModel.PROP_PVVALUE, valueHandler);
// minimum
IWidgetPropertyChangeHandler minimumHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
((ScrollbarFigure) refreshableFigure).setMinimum((Double) newValue);
return false;
}
};
setPropertyChangeHandler(ScrollBarModel.PROP_MIN, minimumHandler);
// maximum
IWidgetPropertyChangeHandler maximumHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
((ScrollbarFigure) refreshableFigure).setMaximum((Double) newValue);
return false;
}
};
setPropertyChangeHandler(ScrollBarModel.PROP_MAX, maximumHandler);
// page increment
IWidgetPropertyChangeHandler pageIncrementHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
((ScrollbarFigure) refreshableFigure).setPageIncrement((Double) newValue);
return false;
}
};
setPropertyChangeHandler(ScrollBarModel.PROP_PAGE_INCREMENT, pageIncrementHandler);
// step increment
IWidgetPropertyChangeHandler stepIncrementHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
((ScrollbarFigure) refreshableFigure).setStepIncrement((Double) newValue);
return false;
}
};
setPropertyChangeHandler(ScrollBarModel.PROP_STEP_INCREMENT, stepIncrementHandler);
// bar length
IWidgetPropertyChangeHandler barLengthHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
((ScrollbarFigure) refreshableFigure).setExtent((Double) newValue);
return false;
}
};
setPropertyChangeHandler(ScrollBarModel.PROP_BAR_LENGTH, barLengthHandler);
// value tip
IWidgetPropertyChangeHandler valueTipHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
((ScrollbarFigure) refreshableFigure).setShowValueTip((Boolean) newValue);
return false;
}
};
setPropertyChangeHandler(ScrollBarModel.PROP_SHOW_VALUE_TIP, valueTipHandler);
// horizontal
IWidgetPropertyChangeHandler horizontalHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure refreshableFigure) {
((ScrollbarFigure) refreshableFigure).setHorizontal((Boolean) newValue);
ScrollBarModel model = getWidgetModel();
if (// from vertical to horizontal
(Boolean) newValue)
model.setLocation(model.getLocation().x - model.getSize().height / 2 + model.getSize().width / 2, model.getLocation().y + model.getSize().height / 2 - model.getSize().width / 2);
else
// from horizontal to vertical
model.setLocation(model.getLocation().x + model.getSize().width / 2 - model.getSize().height / 2, model.getLocation().y - model.getSize().width / 2 + model.getSize().height / 2);
model.setSize(model.getSize().height, model.getSize().width);
return false;
}
};
setPropertyChangeHandler(ScrollBarModel.PROP_HORIZONTAL, horizontalHandler);
}
Aggregations