Moving msp to kotlin
This commit is contained in:
parent
1d82ccf123
commit
66148d66f4
@ -55,7 +55,7 @@ import java.util.stream.Collectors;
|
|||||||
@RoleDef(name = Roles.STORAGE_ROLE)
|
@RoleDef(name = Roles.STORAGE_ROLE)
|
||||||
@RoleDef(name = Roles.VIEW_ROLE)
|
@RoleDef(name = Roles.VIEW_ROLE)
|
||||||
@ValueDef(name = "port", def = "virtual", info = "The name of the port for this PKT8")
|
@ValueDef(name = "port", def = "virtual", info = "The name of the port for this PKT8")
|
||||||
@StateDef(name = "storing")
|
@StateDef(@ValueDef(name = "storing"))
|
||||||
public class PKT8Device extends PortSensor<PKT8Result> {
|
public class PKT8Device extends PortSensor<PKT8Result> {
|
||||||
public static final String PKT8_DEVICE_TYPE = "numass:pkt8";
|
public static final String PKT8_DEVICE_TYPE = "numass:pkt8";
|
||||||
|
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
package inr.numass.control.cryotemp;
|
|
||||||
|
|
||||||
import hep.dataforge.context.Context;
|
|
||||||
import hep.dataforge.control.devices.Device;
|
|
||||||
import hep.dataforge.meta.Meta;
|
|
||||||
import inr.numass.control.DeviceViewConnection;
|
|
||||||
import inr.numass.control.DeviceViewFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by darksnake on 09-May-17.
|
|
||||||
*/
|
|
||||||
public class PKT8DeviceFactory implements DeviceViewFactory {
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return PKT8Device.PKT8_DEVICE_TYPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PKT8Device build(Context context, Meta meta) {
|
|
||||||
return new PKT8Device(context, meta);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeviceViewConnection buildView(Device device) {
|
|
||||||
return new PKT8ViewConnection();
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,24 @@
|
|||||||
|
package inr.numass.control.cryotemp
|
||||||
|
|
||||||
|
import hep.dataforge.context.Context
|
||||||
|
import hep.dataforge.control.devices.Device
|
||||||
|
import hep.dataforge.meta.Meta
|
||||||
|
import inr.numass.control.DeviceViewConnection
|
||||||
|
import inr.numass.control.DeviceViewFactory
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by darksnake on 09-May-17.
|
||||||
|
*/
|
||||||
|
class PKT8DeviceFactory : DeviceViewFactory {
|
||||||
|
override fun getType(): String {
|
||||||
|
return PKT8Device.PKT8_DEVICE_TYPE
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun build(context: Context, meta: Meta): PKT8Device {
|
||||||
|
return PKT8Device(context, meta)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun buildView(device: Device): DeviceViewConnection<*> {
|
||||||
|
return PKT8ViewConnection()
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,7 @@ apply plugin: 'application'
|
|||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
|
|
||||||
if (!hasProperty('mainClass')) {
|
if (!hasProperty('mainClass')) {
|
||||||
ext.mainClass = 'inr.numass.control.msp.fx.MspApp'
|
ext.mainClass = 'inr.numass.control.msp.MspApp'
|
||||||
}
|
}
|
||||||
mainClassName = mainClass
|
mainClassName = mainClass
|
||||||
|
|
||||||
|
@ -149,8 +149,10 @@ public class MspDevice extends Sensor<DataPoint> implements PortHandler.PortCont
|
|||||||
switch (stateName) {
|
switch (stateName) {
|
||||||
case PortSensor.CONNECTED_STATE:
|
case PortSensor.CONNECTED_STATE:
|
||||||
setConnected(value.booleanValue());
|
setConnected(value.booleanValue());
|
||||||
|
break;
|
||||||
case "filamentOn":
|
case "filamentOn":
|
||||||
setFilamentOn(value.booleanValue());
|
setFilamentOn(value.booleanValue());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
super.requestStateChange(stateName, value);
|
super.requestStateChange(stateName, value);
|
||||||
}
|
}
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
package inr.numass.control.msp;
|
|
||||||
|
|
||||||
import hep.dataforge.context.Context;
|
|
||||||
import hep.dataforge.control.devices.Device;
|
|
||||||
import hep.dataforge.meta.Meta;
|
|
||||||
import inr.numass.control.DeviceViewConnection;
|
|
||||||
import inr.numass.control.DeviceViewFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by darksnake on 09-May-17.
|
|
||||||
*/
|
|
||||||
public class MspDeviceFactory implements DeviceViewFactory {
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return MspDevice.MSP_DEVICE_TYPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MspDevice build(Context context, Meta config) {
|
|
||||||
MspDevice device = new MspDevice(context,config);
|
|
||||||
return device;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeviceViewConnection buildView(Device device) {
|
|
||||||
return MspViewConnection.Companion.build(device.getContext());
|
|
||||||
}
|
|
||||||
}
|
|
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package inr.numass.control.msp
|
package inr.numass.control.msp
|
||||||
|
|
||||||
|
import hep.dataforge.control.connections.Roles
|
||||||
import hep.dataforge.control.devices.DeviceFactory
|
import hep.dataforge.control.devices.DeviceFactory
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
import inr.numass.control.DeviceViewConnection
|
import inr.numass.control.DeviceViewConnection
|
||||||
@ -27,7 +28,9 @@ import javafx.stage.Stage
|
|||||||
class MspApp : NumassControlApplication<MspDevice>() {
|
class MspApp : NumassControlApplication<MspDevice>() {
|
||||||
|
|
||||||
override fun buildView(device: MspDevice): DeviceViewConnection<MspDevice> {
|
override fun buildView(device: MspDevice): DeviceViewConnection<MspDevice> {
|
||||||
return MspViewConnection.build(device.context)
|
return MspViewConnection().apply {
|
||||||
|
device.connect(this, Roles.VIEW_ROLE)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override val deviceFactory: DeviceFactory = MspDeviceFactory()
|
override val deviceFactory: DeviceFactory = MspDeviceFactory()
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
package inr.numass.control.msp
|
||||||
|
|
||||||
|
import hep.dataforge.context.Context
|
||||||
|
import hep.dataforge.control.devices.Device
|
||||||
|
import hep.dataforge.meta.Meta
|
||||||
|
import inr.numass.control.DeviceViewConnection
|
||||||
|
import inr.numass.control.DeviceViewFactory
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by darksnake on 09-May-17.
|
||||||
|
*/
|
||||||
|
class MspDeviceFactory : DeviceViewFactory {
|
||||||
|
override fun getType(): String {
|
||||||
|
return MspDevice.MSP_DEVICE_TYPE
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun build(context: Context, config: Meta): MspDevice {
|
||||||
|
val device = MspDevice(context, config)
|
||||||
|
return device
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun buildView(device: Device): DeviceViewConnection<*> {
|
||||||
|
return MspViewConnection()
|
||||||
|
}
|
||||||
|
}
|
@ -16,7 +16,6 @@
|
|||||||
package inr.numass.control.msp
|
package inr.numass.control.msp
|
||||||
|
|
||||||
import hep.dataforge.control.NamedValueListener
|
import hep.dataforge.control.NamedValueListener
|
||||||
import hep.dataforge.control.devices.Device
|
|
||||||
import hep.dataforge.control.devices.DeviceListener
|
import hep.dataforge.control.devices.DeviceListener
|
||||||
import hep.dataforge.control.devices.PortSensor
|
import hep.dataforge.control.devices.PortSensor
|
||||||
import hep.dataforge.control.devices.Sensor
|
import hep.dataforge.control.devices.Sensor
|
||||||
@ -34,8 +33,9 @@ import hep.dataforge.plots.jfreechart.JFreeChartFrame
|
|||||||
import hep.dataforge.values.Value
|
import hep.dataforge.values.Value
|
||||||
import inr.numass.control.DeviceViewConnection
|
import inr.numass.control.DeviceViewConnection
|
||||||
import inr.numass.control.deviceStateIndicator
|
import inr.numass.control.deviceStateIndicator
|
||||||
import javafx.application.Platform
|
|
||||||
import javafx.beans.property.SimpleObjectProperty
|
import javafx.beans.property.SimpleObjectProperty
|
||||||
|
import javafx.collections.FXCollections
|
||||||
|
import javafx.collections.MapChangeListener
|
||||||
import javafx.geometry.Insets
|
import javafx.geometry.Insets
|
||||||
import javafx.geometry.Orientation
|
import javafx.geometry.Orientation
|
||||||
import javafx.scene.Node
|
import javafx.scene.Node
|
||||||
@ -56,6 +56,8 @@ import tornadofx.*
|
|||||||
class MspViewConnection : DeviceViewConnection<MspDevice>(), DeviceListener, NamedValueListener {
|
class MspViewConnection : DeviceViewConnection<MspDevice>(), DeviceListener, NamedValueListener {
|
||||||
private val mspView by lazy { MspView() }
|
private val mspView by lazy { MspView() }
|
||||||
|
|
||||||
|
private val table = FXCollections.observableHashMap<String, Value>()
|
||||||
|
|
||||||
override fun getBoardView(): Parent {
|
override fun getBoardView(): Parent {
|
||||||
return VBox().apply {
|
return VBox().apply {
|
||||||
this += super.getBoardView()
|
this += super.getBoardView()
|
||||||
@ -70,17 +72,7 @@ class MspViewConnection : DeviceViewConnection<MspDevice>(), DeviceListener, Nam
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun pushValue(valueName: String, value: Value) {
|
override fun pushValue(valueName: String, value: Value) {
|
||||||
val pl = plottables.get(valueName)
|
table.put(valueName, value)
|
||||||
if (pl != null) {
|
|
||||||
if (value.doubleValue() > 0) {
|
|
||||||
pl.put(value)
|
|
||||||
} else {
|
|
||||||
pl.put(Value.NULL)
|
|
||||||
}
|
|
||||||
val titleBase = pl.config.getString("titleBase")
|
|
||||||
val title = String.format("%s (%.4g)", titleBase, value.doubleValue())
|
|
||||||
pl.configureValue("title", title)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -102,7 +94,26 @@ class MspViewConnection : DeviceViewConnection<MspDevice>(), DeviceListener, Nam
|
|||||||
configure(plotFrameMeta)
|
configure(plotFrameMeta)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val plottables: TimePlottableGroup = TimePlottableGroup()
|
val plottables: TimePlottableGroup = TimePlottableGroup().apply {
|
||||||
|
if (plotFrameMeta.hasMeta("peakJump.peak")) {
|
||||||
|
for (peakMeta in plotFrameMeta.getMetaList("peakJump.peak")) {
|
||||||
|
val mass = peakMeta.getString("mass")
|
||||||
|
if (!this.has(mass)) {
|
||||||
|
val newPlottable = TimePlottable(mass, mass)
|
||||||
|
newPlottable.configure(peakMeta)
|
||||||
|
newPlottable.setMaxItems(1000)
|
||||||
|
newPlottable.setPrefItems(400)
|
||||||
|
newPlottable.configureValue("titleBase", peakMeta.getString("title", mass))
|
||||||
|
add(newPlottable)
|
||||||
|
} else {
|
||||||
|
get(mass).configure(peakMeta)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
showError("No peaks defined in config")
|
||||||
|
throw RuntimeException()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private var logButton: ToggleButton by singleAssign()
|
private var logButton: ToggleButton by singleAssign()
|
||||||
|
|
||||||
@ -136,7 +147,7 @@ class MspViewConnection : DeviceViewConnection<MspDevice>(), DeviceListener, Nam
|
|||||||
.bind(getStateBinding(MEASURING_STATE).booleanBinding { it!!.booleanValue() })
|
.bind(getStateBinding(MEASURING_STATE).booleanBinding { it!!.booleanValue() })
|
||||||
}
|
}
|
||||||
add(ToggleSwitch().apply {
|
add(ToggleSwitch().apply {
|
||||||
padding = Insets(11.0, 0.0, 0.0, 0.0)
|
padding = Insets(5.0, 0.0, 0.0, 0.0)
|
||||||
disableProperty()
|
disableProperty()
|
||||||
.bind(getStateBinding(PortSensor.CONNECTED_STATE).booleanBinding { !it!!.booleanValue() })
|
.bind(getStateBinding(PortSensor.CONNECTED_STATE).booleanBinding { !it!!.booleanValue() })
|
||||||
bindBooleanToState("filamentOn", selectedProperty())
|
bindBooleanToState("filamentOn", selectedProperty())
|
||||||
@ -146,7 +157,7 @@ class MspViewConnection : DeviceViewConnection<MspDevice>(), DeviceListener, Nam
|
|||||||
"ON" -> Paint.valueOf("red")
|
"ON" -> Paint.valueOf("red")
|
||||||
"OFF" -> Paint.valueOf("blue")
|
"OFF" -> Paint.valueOf("blue")
|
||||||
"WARM-UP", "COOL-DOWN" -> Paint.valueOf("yellow")
|
"WARM-UP", "COOL-DOWN" -> Paint.valueOf("yellow")
|
||||||
else -> error("Unknown filament state")
|
else -> Paint.valueOf("grey")
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -179,66 +190,33 @@ class MspViewConnection : DeviceViewConnection<MspDevice>(), DeviceListener, Nam
|
|||||||
}
|
}
|
||||||
PlotContainer.centerIn(this).plot = plotFrame
|
PlotContainer.centerIn(this).plot = plotFrame
|
||||||
}
|
}
|
||||||
|
init{
|
||||||
private var plot: JFreeChartFrame? = null
|
table.addListener {change: MapChangeListener.Change<out String, out Value> ->
|
||||||
private var logFragment: LogFragment? = null
|
if (change.wasAdded()) {
|
||||||
|
val pl = plottables.get(change.key)
|
||||||
@Throws(Exception::class)
|
val value = change.valueAdded
|
||||||
override fun open(device: MspDevice) {
|
if (pl != null) {
|
||||||
super.open(device)
|
if (value.doubleValue() > 0) {
|
||||||
updatePlot()
|
pl.put(value)
|
||||||
|
} else {
|
||||||
bindBooleanToState("connected", connectButton!!.selectedProperty())
|
pl.put(Value.NULL)
|
||||||
}
|
}
|
||||||
|
val titleBase = pl.config.getString("titleBase")
|
||||||
private fun initPlot() {
|
val title = String.format("%s (%.4g)", titleBase, value.doubleValue())
|
||||||
val plotConfig = MetaBuilder("plotFrame")
|
pl.configureValue("title", title)
|
||||||
.setNode(MetaBuilder("yAxis")
|
|
||||||
.setValue("type", "log")
|
|
||||||
.setValue("axisTitle", "partial pressure")
|
|
||||||
.setValue("axisUnits", "mbar")
|
|
||||||
)
|
|
||||||
.setValue("xAxis.type", "time")
|
|
||||||
|
|
||||||
this.plot = JFreeChartFrame(plotConfig)
|
|
||||||
val container = PlotContainer.centerIn(plotPane)
|
|
||||||
container.plot = plot
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePlot() {
|
|
||||||
if (plot == null) {
|
|
||||||
initPlot()
|
|
||||||
}
|
|
||||||
if (plotFrameMeta.hasMeta("plotFrame")) {
|
|
||||||
this.plot!!.configure(plotFrameMeta.getMeta("plotFrame"))
|
|
||||||
}
|
|
||||||
if (plotFrameMeta.hasMeta("peakJump.peak")) {
|
|
||||||
for (peakMeta in plotFrameMeta.getMetaList("peakJump.peak")) {
|
|
||||||
val mass = peakMeta.getString("mass")
|
|
||||||
if (!this.plottables.has(mass)) {
|
|
||||||
val newPlottable = TimePlottable(mass, mass)
|
|
||||||
newPlottable.configure(peakMeta)
|
|
||||||
newPlottable.setMaxItems(1000)
|
|
||||||
newPlottable.setPrefItems(400)
|
|
||||||
newPlottable.configureValue("titleBase", peakMeta.getString("title", mass))
|
|
||||||
this.plottables.add(newPlottable)
|
|
||||||
plot!!.add(newPlottable)
|
|
||||||
} else {
|
|
||||||
plottables.get(mass).configure(peakMeta)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
showError("No peaks defined in config")
|
|
||||||
throw RuntimeException()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun evaluateDeviceException(device: Device, message: String, exception: Throwable) {
|
|
||||||
Platform.runLater {
|
// override fun evaluateDeviceException(device: Device, message: String, exception: Throwable) {
|
||||||
logFragment!!.appendLine("ERROR: " + message)
|
// Platform.runLater {
|
||||||
showError(message)
|
// logFragment!!.appendLine("ERROR: " + message)
|
||||||
}
|
// showError(message)
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
private fun showError(message: String) {
|
private fun showError(message: String) {
|
||||||
val alert = Alert(Alert.AlertType.ERROR)
|
val alert = Alert(Alert.AlertType.ERROR)
|
||||||
|
@ -9,6 +9,7 @@ import hep.dataforge.fx.FXObject
|
|||||||
import hep.dataforge.fx.fragments.FXFragment
|
import hep.dataforge.fx.fragments.FXFragment
|
||||||
import hep.dataforge.fx.fragments.FragmentWindow
|
import hep.dataforge.fx.fragments.FragmentWindow
|
||||||
import hep.dataforge.values.Value
|
import hep.dataforge.values.Value
|
||||||
|
import javafx.application.Platform
|
||||||
import javafx.beans.binding.ObjectBinding
|
import javafx.beans.binding.ObjectBinding
|
||||||
import javafx.beans.property.BooleanProperty
|
import javafx.beans.property.BooleanProperty
|
||||||
import javafx.beans.value.ObservableValue
|
import javafx.beans.value.ObservableValue
|
||||||
@ -46,8 +47,8 @@ abstract class DeviceViewConnection<D : Device> : DeviceConnection<D>(), DeviceL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getBooleanStateBinding(state: String): ObservableValue<Boolean>{
|
fun getBooleanStateBinding(state: String): ObservableValue<Boolean> {
|
||||||
return getStateBinding(state).booleanBinding{it!!.booleanValue()}
|
return getStateBinding(state).booleanBinding { it!!.booleanValue() }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -65,7 +66,8 @@ abstract class DeviceViewConnection<D : Device> : DeviceConnection<D>(), DeviceL
|
|||||||
}
|
}
|
||||||
property.addListener { observable, oldValue, newValue ->
|
property.addListener { observable, oldValue, newValue ->
|
||||||
if (isOpen && oldValue != newValue) {
|
if (isOpen && oldValue != newValue) {
|
||||||
device.setState(state, newValue)
|
val result = device.setState(state, newValue).get().booleanValue();
|
||||||
|
Platform.runLater { property.set(result) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user