/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.control.server.plugin; import net.codjo.agent.DFService; import net.codjo.control.common.message.ControlJobRequest; import net.codjo.workflow.common.message.JobAudit; import net.codjo.workflow.common.message.JobException; import net.codjo.workflow.common.message.JobRequest; import net.codjo.workflow.common.protocol.JobProtocolParticipant; import net.codjo.workflow.server.api.JobAgent; /** * */ class ControlJobAgent extends JobAgent { ControlJobAgent(ControlerFactory controlerFactory) { this(controlerFactory, MODE.NOT_DELEGATE); } ControlJobAgent(ControlerFactory controlerFactory, MODE mode) { super(new ControlParticipant(controlerFactory), new DFService.AgentDescription( new DFService.ServiceDescription(ControlServerPlugin.CONTROL_REQUEST_TYPE, "control-service")), mode); } private static class ControlParticipant extends JobProtocolParticipant { private final ControlerFactory controlerFactory; private PostControlAudit postAudit; ControlParticipant(ControlerFactory controlerFactory) { this.controlerFactory = controlerFactory; } @Override protected void executeJob(JobRequest request) throws JobException { ControlJobRequest controlRequest = new ControlJobRequest(request); controlerFactory.init(getAgent(), getRequestMessage()); try { Controler controler = controlerFactory.createControler(); postAudit = controler.execute(controlRequest); } catch (QuarantineControlException exception) { postAudit = exception.getPostControlAudit(); throwJobException(exception); } catch (Exception exception) { throwJobException(exception); } } @Override protected void handlePOST(JobRequest request, JobException failure) { JobAudit audit = new JobAudit(JobAudit.Type.POST); if (failure != null) { audit.setError(new JobAudit.Anomaly(failure.getMessage(), failure)); } if (postAudit != null) { postAudit.fill(audit); } else { new PostControlAudit().fill(audit); } sendAudit(audit); } private void throwJobException(Exception cause) throws JobException { throw new JobException("Error lors des controls ' : " + cause.getLocalizedMessage(), cause); } } }