[New] Added SendPlcTelegramService
This commit is contained in:
parent
59391afe8d
commit
a492dbc368
|
@ -0,0 +1,71 @@
|
||||||
|
package li.strolch.plc.gw.server.service;
|
||||||
|
|
||||||
|
import static li.strolch.plc.model.PlcConstants.*;
|
||||||
|
|
||||||
|
import com.google.gson.JsonPrimitive;
|
||||||
|
import li.strolch.model.StrolchValueType;
|
||||||
|
import li.strolch.plc.gw.server.PlcGwServerHandler;
|
||||||
|
import li.strolch.plc.model.PlcAddressKey;
|
||||||
|
import li.strolch.plc.model.PlcAddressResponse;
|
||||||
|
import li.strolch.service.StringMapArgument;
|
||||||
|
import li.strolch.service.api.AbstractService;
|
||||||
|
import li.strolch.service.api.ServiceResult;
|
||||||
|
import li.strolch.utils.dbc.DBC;
|
||||||
|
|
||||||
|
public class SendPlcTelegramService extends AbstractService<StringMapArgument, ServiceResult> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ServiceResult getResultInstance() {
|
||||||
|
return new ServiceResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StringMapArgument getArgumentInstance() {
|
||||||
|
return new StringMapArgument();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ServiceResult internalDoService(StringMapArgument arg) throws Exception {
|
||||||
|
|
||||||
|
String plcId = arg.map.get(PARAM_PLC_ID);
|
||||||
|
String resource = arg.map.get(PARAM_RESOURCE);
|
||||||
|
String action = arg.map.get(PARAM_ACTION);
|
||||||
|
|
||||||
|
DBC.PRE.assertNotEmpty(PARAM_PLC_ID + " must be set!", plcId);
|
||||||
|
DBC.PRE.assertNotEmpty(PARAM_RESOURCE + " must be set!", resource);
|
||||||
|
DBC.PRE.assertNotEmpty(PARAM_ACTION + " must be set!", action);
|
||||||
|
|
||||||
|
PlcGwServerHandler plcHandler = getComponent(PlcGwServerHandler.class);
|
||||||
|
|
||||||
|
PlcAddressResponse response;
|
||||||
|
if (!arg.map.containsKey(PARAM_VALUE)) {
|
||||||
|
response = plcHandler.sendMessageSync(PlcAddressKey.keyFor(resource, action), plcId);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
String valueS = arg.map.get(PARAM_VALUE);
|
||||||
|
String valueTypeS = arg.map.get(PARAM_VALUE_TYPE);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
StrolchValueType valueType = StrolchValueType.parse(valueTypeS);
|
||||||
|
Object value = valueType.parseValue(valueS);
|
||||||
|
JsonPrimitive valueJ;
|
||||||
|
if (value instanceof String)
|
||||||
|
valueJ = new JsonPrimitive((String) value);
|
||||||
|
else if (value instanceof Number)
|
||||||
|
valueJ = new JsonPrimitive((Number) value);
|
||||||
|
else if (value instanceof Boolean)
|
||||||
|
valueJ = new JsonPrimitive((Boolean) value);
|
||||||
|
else
|
||||||
|
throw new IllegalArgumentException("Unhandled value type " + valueType);
|
||||||
|
|
||||||
|
response = plcHandler.sendMessageSync(PlcAddressKey.keyFor(resource, action), plcId, valueJ);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.isDone())
|
||||||
|
return ServiceResult.success();
|
||||||
|
|
||||||
|
return ServiceResult.error(response.getState() + ": " + response.getStateMsg());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue