82 lines
2.2 KiB
Java
82 lines
2.2 KiB
Java
package li.strolch.plc.gw.server.service;
|
|
|
|
import static li.strolch.plc.model.PlcConstants.*;
|
|
|
|
import li.strolch.model.StrolchValueType;
|
|
import li.strolch.persistence.api.StrolchTransaction;
|
|
import li.strolch.plc.gw.server.PlcGwServerHandler;
|
|
import li.strolch.plc.model.PlcAddressKey;
|
|
import li.strolch.plc.model.PlcAddressResponse;
|
|
import li.strolch.service.api.Command;
|
|
import li.strolch.utils.dbc.DBC;
|
|
|
|
public class SendPlcTelegramCommand extends Command {
|
|
|
|
private String plcId;
|
|
private String resource;
|
|
private String action;
|
|
private String valueTypeS;
|
|
private String valueS;
|
|
|
|
private PlcAddressResponse response;
|
|
|
|
public SendPlcTelegramCommand(StrolchTransaction tx) {
|
|
super(tx);
|
|
}
|
|
|
|
public void setPlcId(String plcId) {
|
|
this.plcId = plcId;
|
|
}
|
|
|
|
public void setResource(String resource) {
|
|
this.resource = resource;
|
|
}
|
|
|
|
public void setAction(String action) {
|
|
this.action = action;
|
|
}
|
|
|
|
public void setValueType(String valueType) {
|
|
this.valueTypeS = valueType;
|
|
}
|
|
|
|
public void setValue(String value) {
|
|
this.valueS = value;
|
|
}
|
|
|
|
public PlcAddressResponse getResponse() {
|
|
return this.response;
|
|
}
|
|
|
|
@Override
|
|
public void validate() {
|
|
DBC.PRE.assertNotEmpty(PARAM_PLC_ID + " must be set!", this.plcId);
|
|
DBC.PRE.assertNotEmpty(PARAM_RESOURCE + " must be set!", this.resource);
|
|
DBC.PRE.assertNotEmpty(PARAM_ACTION + " must be set!", this.action);
|
|
if (this.valueS != null) {
|
|
DBC.PRE.assertNotEmpty(PARAM_VALUE + " must either not be set, or a non-empty value", valueS);
|
|
DBC.PRE.assertNotEmpty(PARAM_VALUE_TYPE + " must be set when a value is given!", valueTypeS);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void doCommand() {
|
|
|
|
PlcGwServerHandler plcHandler = getComponent(PlcGwServerHandler.class);
|
|
if (!plcHandler.isPlcConnected(plcId))
|
|
throw new IllegalStateException("PLC " + this.plcId + " is not connected!");
|
|
|
|
PlcAddressKey addressKey = PlcAddressKey.keyFor(this.resource, this.action);
|
|
|
|
// sending without a value
|
|
if (this.valueS == null) {
|
|
this.response = plcHandler.sendMessageSync(addressKey, this.plcId);
|
|
return;
|
|
}
|
|
|
|
// sending with a value
|
|
StrolchValueType valueType = StrolchValueType.parse(this.valueTypeS);
|
|
this.response = plcHandler.sendMessageSync(addressKey, this.plcId, valueType.parseValue(valueS));
|
|
}
|
|
}
|