strolch-plc/plc-core/src/main/java/li/strolch/plc/core/service/SetPlcStateService.java

56 lines
1.6 KiB
Java

package li.strolch.plc.core.service;
import static li.strolch.plc.model.PlcConstants.PARAM_STATE;
import li.strolch.plc.core.PlcHandler;
import li.strolch.plc.core.PlcServiceInitializer;
import li.strolch.plc.model.PlcState;
import li.strolch.service.StringMapArgument;
import li.strolch.service.api.AbstractService;
import li.strolch.service.api.ServiceResult;
public class SetPlcStateService 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 {
PlcState newState = PlcState.valueOf(arg.map.get(PARAM_STATE));
PlcHandler plcHandler = getComponent(PlcHandler.class);
PlcServiceInitializer plcServiceInitializer = getComponent(PlcServiceInitializer.class);
switch (newState) {
case Stopped:
if (plcHandler.getPlcState() == PlcState.Stopped)
return ServiceResult.error("Already stopped");
plcServiceInitializer.stop();
plcHandler.stopPlc();
break;
case Started:
if (plcHandler.getPlcState() == PlcState.Started)
return ServiceResult.error("Already started");
plcHandler.startPlc();
plcServiceInitializer.start();
break;
case Configured:
if (!plcHandler.reconfigurePlc())
return ServiceResult.error(plcHandler.getPlcStateMsg());
break;
default:
throw new IllegalArgumentException("Can not switch to state " + newState);
}
return ServiceResult.success();
}
}