aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/moazs/App2MzsService.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/App2MzsService.java')
-rw-r--r--src/main/java/at/gv/egiz/moazs/App2MzsService.java89
1 files changed, 61 insertions, 28 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/App2MzsService.java b/src/main/java/at/gv/egiz/moazs/App2MzsService.java
index f8c00fc..8626c24 100644
--- a/src/main/java/at/gv/egiz/moazs/App2MzsService.java
+++ b/src/main/java/at/gv/egiz/moazs/App2MzsService.java
@@ -1,18 +1,21 @@
package at.gv.egiz.moazs;
+import at.gv.e_government.reference.namespace.zustellung.msg.phase2._20181206_.DeliveryRequestStatusType;
+import at.gv.e_government.reference.namespace.zustellung.msg.phase2._20181206_.ObjectFactory;
import at.gv.e_government.reference.namespace.zustellung.mzs.app2mzs.App2MzsPortType;
-import at.gv.e_government.reference.namespace.zustellung.mzs.app2mzs_.*;
+import at.gv.e_government.reference.namespace.zustellung.mzs.app2mzs_.DeliveryRequestType;
+import at.gv.egiz.moazs.pipeline.DeliveryPipeline;
+import at.gv.egiz.moazs.repository.DeliveryRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.jws.WebParam;
-import java.math.BigInteger;
-import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import static java.text.MessageFormat.format;
import static java.util.concurrent.CompletableFuture.supplyAsync;
@Service
@@ -20,63 +23,93 @@ public class App2MzsService implements App2MzsPortType {
private static final Logger logger = LoggerFactory.getLogger(App2MzsService.class);
- //TODO move timeout to config
- private final int timeoutForAnwser = 10;
- private final String MZSTNS = "http://reference.e-government.gv.at/namespace/zustellung/mzs/app2mzs#";
+ //TODO move timeout and namespaces to config
+ private static final int TIMEOUT_FOR_ANWSER = 10;
+ private static final String MZSTNS = "http://reference.e-government.gv.at/namespace/zustellung/mzs/app2mzs#";
- @Autowired
- private DeliveryRequestHandler deliveryRequestHandler;
+ private final DeliveryRepository repository;
+ private final DeliveryPipeline pipeline;
+ private final Mzs2AppClient appClient;
+ private final ObjectFactory objectFactory = new ObjectFactory();
- @Autowired
- private Mzs2AppClient appClient;
-
- @Autowired
- private ObjectFactory objectFactory;
+ public App2MzsService(@Autowired DeliveryRepository repository, @Autowired DeliveryPipeline pipeline, @Autowired Mzs2AppClient appClient) {
+ this.repository = repository;
+ this.pipeline = pipeline;
+ this.appClient = appClient;
+ }
@Override
- public DeliveryResponseType app2Mzs(
+ public DeliveryRequestStatusType app2Mzs(
@WebParam(partName = "DeliveryRequest",
name = "DeliveryRequest",
targetNamespace = MZSTNS)
DeliveryRequestType deliveryRequest) {
- var future = supplyAsync(() -> deliveryRequestHandler.apply(deliveryRequest));
+ final var appDeliveryID = deliveryRequest.getMetaData().getAppDeliveryID();
+
+ var future = supplyAsync(() -> process(deliveryRequest));
try {
- return future.get(timeoutForAnwser, TimeUnit.SECONDS);
+ return future.get(TIMEOUT_FOR_ANWSER, TimeUnit.SECONDS);
} catch (TimeoutException e) {
future.thenAccept(appClient::sendNotification);
- logger.warn("Answer Timed Out", e);
- return generatePartialSuccessResponse(deliveryRequest);
+ logger.info("Answer Timed Out", e);
+ return generatePartialSuccessResponse(appDeliveryID, "Your request timed out; Wait until X for receiving a notification.");
} catch (Exception e ) {
logger.error("Could not deliver request.", e);
- return generateErrorResponse();
+ final var message = format("An error occured while delivering request: {}", e.getMessage());
+ return generateErrorResponse(appDeliveryID, message);
}
}
- private DeliveryResponseType generatePartialSuccessResponse(DeliveryRequestType deliveryRequest) {
+ private DeliveryRequestStatusType generatePartialSuccessResponse(String appDeliveryId, String message) {
- var partialSuccess = objectFactory.createPartialSuccessType();
- partialSuccess.setAppDeliveryID(deliveryRequest.getMetaData().getAppDeliveryID());
+ var partialSuccess = objectFactory.createDeliveryAnswerType();
+ partialSuccess.setAppDeliveryID(appDeliveryId);
- var response = objectFactory.createDeliveryResponseType();
+ var response = objectFactory.createDeliveryRequestStatusType();
response.setPartialSuccess(partialSuccess);
+ response.setSignature(null);
+
return response;
}
- private DeliveryResponseType generateErrorResponse() {
+ private DeliveryRequestStatusType generateErrorResponse(String appDeliveryId, String message) {
- var error = objectFactory.createErrorType();
- error.setText("Error Occurred");
- error.setCode(BigInteger.valueOf(500));
+ var error = objectFactory.createDeliveryRequestStatusTypeError();
+ error.setAppDeliveryID(appDeliveryId);
- var response = objectFactory.createDeliveryResponseType();
+ var info = objectFactory.createErrorInfoType();
+ info.setCode("500");
+ info.setText(message);
+ error.setErrorInfo(info);
+
+ var response = objectFactory.createDeliveryRequestStatusType();
response.setError(error);
+ response.setSignature(null);
return response;
}
+ private DeliveryRequestStatusType process(DeliveryRequestType deliveryRequest) throws RuntimeException {
+
+ var appDeliveryID = deliveryRequest.getMetaData().getAppDeliveryID();
+ logger.info("Receive request with appDeliveryID = {}.", appDeliveryID);
+
+ repository.add(deliveryRequest);
+ pipeline.processRequest(appDeliveryID);
+
+ var status = repository.getDeliveryRequestStatus(appDeliveryID);
+
+ if (status.isEmpty()) {
+ throw new RuntimeException(format("Could not get a response for request with appDeliveryId = {}", appDeliveryID));
+ }
+
+ return status.get();
+
+ }
+
} \ No newline at end of file