diff options
Diffstat (limited to 'src/main/java')
7 files changed, 129 insertions, 15 deletions
| diff --git a/src/main/java/at/gv/egiz/moazs/MoaZSException.java b/src/main/java/at/gv/egiz/moazs/MoaZSException.java index ad211bd..11d9b4e 100644 --- a/src/main/java/at/gv/egiz/moazs/MoaZSException.java +++ b/src/main/java/at/gv/egiz/moazs/MoaZSException.java @@ -13,4 +13,8 @@ public class MoaZSException extends RuntimeException {          return new MoaZSException(String.format(formatString, objects));      } +    public static MoaZSException moaZSException(String message) { +        return new MoaZSException(String.format(message)); +    } +  } diff --git a/src/main/java/at/gv/egiz/moazs/mzs/MzsClient.java b/src/main/java/at/gv/egiz/moazs/mzs/MzsClient.java index 5785703..295d11a 100644 --- a/src/main/java/at/gv/egiz/moazs/mzs/MzsClient.java +++ b/src/main/java/at/gv/egiz/moazs/mzs/MzsClient.java @@ -1,12 +1,13 @@  package at.gv.egiz.moazs.mzs; +import at.gv.zustellung.app2mzs.xsd.DeliveryResponseType;  import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType;  import org.springframework.stereotype.Component;  @Component  public class MzsClient { -    public void sendNotification(DeliveryRequestStatusType status) { +    public void sendNotification(DeliveryResponseType responseType) {          throw new UnsupportedOperationException("Not implemented.");      } diff --git a/src/main/java/at/gv/egiz/moazs/mzs/MzsService.java b/src/main/java/at/gv/egiz/moazs/mzs/MzsService.java index 774f7f4..e031b0b 100644 --- a/src/main/java/at/gv/egiz/moazs/mzs/MzsService.java +++ b/src/main/java/at/gv/egiz/moazs/mzs/MzsService.java @@ -4,8 +4,13 @@ import at.gv.egiz.moazs.MoaZSException;  import at.gv.egiz.moazs.pipeline.DeliveryPipeline;  import at.gv.egiz.moazs.preprocess.DeliveryRequestAugmenter;  import at.gv.egiz.moazs.repository.DeliveryRepository; +import at.gv.egiz.moazs.scheme.Msg2MzsConverter; +import at.gv.egiz.moazs.scheme.Mzs2MsgConverter;  import at.gv.zustellung.app2mzs.xsd.App2MzsPortType;  import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType; +import at.gv.zustellung.app2mzs.xsd.DeliveryResponseType; +import at.gv.zustellung.app2mzs.xsd.PartialSuccessType; +import at.gv.zustellung.msg.xsd.DeliveryAnswerType;  import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType;  import org.apache.cxf.annotations.SchemaValidation;  import org.slf4j.Logger; @@ -18,8 +23,7 @@ import java.util.concurrent.TimeUnit;  import java.util.concurrent.TimeoutException;  import static at.gv.egiz.moazs.MoaZSException.moaZSException; -import static at.gv.zustellung.msg.xsd.DeliveryAnswerType.deliveryAnswerTypeBuilder; -import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.deliveryRequestStatusTypeBuilder; +import static at.gv.zustellung.app2mzs.xsd.PartialSuccessType.partialSuccessTypeBuilder;  import static java.lang.String.format;  import static java.util.concurrent.CompletableFuture.supplyAsync; @@ -37,18 +41,20 @@ public class MzsService implements App2MzsPortType {      private final DeliveryPipeline pipeline;      private final MzsClient appClient;      private final DeliveryRequestAugmenter augmenter; +    private final Msg2MzsConverter converter;      @Autowired      public MzsService(DeliveryRepository repository, DeliveryPipeline pipeline, MzsClient appClient, -                      DeliveryRequestAugmenter augmenter) { +                      DeliveryRequestAugmenter augmenter, Msg2MzsConverter converter) {          this.repository = repository;          this.pipeline = pipeline;          this.appClient = appClient;          this.augmenter = augmenter; +        this.converter = converter;      }      @Override -    public DeliveryRequestStatusType app2Mzs( +    public DeliveryResponseType app2Mzs(              @WebParam(partName = "DeliveryRequest",                        name = "DeliveryRequest")                      DeliveryRequestType deliveryRequest) { @@ -56,13 +62,15 @@ public class MzsService implements App2MzsPortType {          var appDeliveryID = deliveryRequest.getMetaData().getAppDeliveryID();          var future = supplyAsync(() -> augmenter.augment(deliveryRequest)) -                .thenApply(this::process); +                .thenApply(this::process) +                .thenApply(status -> converter.convert(status, repository.getSignedDeliveryRequestStatus(appDeliveryID)));          try {              return future.get(TIMEOUT_FOR_ANWSER, TimeUnit.SECONDS);          } catch (TimeoutException e) { -            future.thenAccept(appClient::sendNotification);              logger.info("Answer Timed Out", e); + +            future.thenAccept(appClient::sendNotification);              return generatePartialSuccessResponse(appDeliveryID);          } catch (Exception e ) { @@ -86,14 +94,14 @@ public class MzsService implements App2MzsPortType {      } -    private DeliveryRequestStatusType generatePartialSuccessResponse(String appDeliveryId) { +    private DeliveryResponseType generatePartialSuccessResponse(String appDeliveryId) { -        var answer = deliveryAnswerTypeBuilder() +        var partial = partialSuccessTypeBuilder()                  .withAppDeliveryID(appDeliveryId)                  .build(); -        return deliveryRequestStatusTypeBuilder() -                .withPartialSuccess(answer) +        return DeliveryResponseType.deliveryResponseTypeBuilder() +                .withPartialSuccess(partial)                  .build();      } diff --git a/src/main/java/at/gv/egiz/moazs/repository/DeliveryRepository.java b/src/main/java/at/gv/egiz/moazs/repository/DeliveryRepository.java index 228d55e..be61d1e 100644 --- a/src/main/java/at/gv/egiz/moazs/repository/DeliveryRepository.java +++ b/src/main/java/at/gv/egiz/moazs/repository/DeliveryRepository.java @@ -17,5 +17,9 @@ public interface DeliveryRepository {      Optional<DeliveryRequestStatusType> getDeliveryRequestStatus(String appDeliveryID); +    void addSignedDeliveryRequestStatus(byte[] bytes, String appDeliveryId); + +    Optional<byte[]> getSignedDeliveryRequestStatus(String appDeliveryID); +  } diff --git a/src/main/java/at/gv/egiz/moazs/repository/InMemoryDeliveryRepository.java b/src/main/java/at/gv/egiz/moazs/repository/InMemoryDeliveryRepository.java index 570296f..58ec92c 100644 --- a/src/main/java/at/gv/egiz/moazs/repository/InMemoryDeliveryRepository.java +++ b/src/main/java/at/gv/egiz/moazs/repository/InMemoryDeliveryRepository.java @@ -30,6 +30,10 @@ public class InMemoryDeliveryRepository implements DeliveryRepository {              .expireAfterWrite(30, TimeUnit.MINUTES)              .build(); +    private static final Cache<String, byte[]> signedStatusRepository = CacheBuilder.newBuilder() +            .expireAfterWrite(30, TimeUnit.MINUTES) +            .build(); +      @Override      public void add(DeliveryRequestType request) {          var key = request.getMetaData().getAppDeliveryID(); @@ -38,8 +42,7 @@ public class InMemoryDeliveryRepository implements DeliveryRepository {      @Override      public Optional<DeliveryRequestType> getDeliveryRequest(String appDeliveryID) { -        var deliveryRequestType = requestRepository.getIfPresent(appDeliveryID); -        return ofNullable(deliveryRequestType); +        return ofNullable(requestRepository.getIfPresent(appDeliveryID));      }      @Override @@ -51,7 +54,16 @@ public class InMemoryDeliveryRepository implements DeliveryRepository {      @Override      public Optional<DeliveryRequestStatusType> getDeliveryRequestStatus(String appDeliveryID) { -        var deliveryRequestType = statusRepository.getIfPresent(appDeliveryID); -        return ofNullable(deliveryRequestType); +        return ofNullable(statusRepository.getIfPresent(appDeliveryID)); +    } + +    @Override +    public void addSignedDeliveryRequestStatus(byte[] bytes, String appDeliveryId) { +        signedStatusRepository.put(appDeliveryId, bytes); +    } + +    @Override +    public Optional<byte[]> getSignedDeliveryRequestStatus(String appDeliveryID) { +        return ofNullable(signedStatusRepository.getIfPresent(appDeliveryID));      }  } diff --git a/src/main/java/at/gv/egiz/moazs/repository/RedisDeliveryRepository.java b/src/main/java/at/gv/egiz/moazs/repository/RedisDeliveryRepository.java index c24902d..4ffe85d 100644 --- a/src/main/java/at/gv/egiz/moazs/repository/RedisDeliveryRepository.java +++ b/src/main/java/at/gv/egiz/moazs/repository/RedisDeliveryRepository.java @@ -69,4 +69,14 @@ public class RedisDeliveryRepository implements DeliveryRepository {      public Optional<DeliveryRequestStatusType> getDeliveryRequestStatus(String appDeliveryID) {          throw new UnsupportedOperationException("Not Implemented Yet");      } + +    @Override +    public void addSignedDeliveryRequestStatus(byte[] bytes, String appDeliveryId) { +        throw new UnsupportedOperationException("Not Implemented Yet"); +    } + +    @Override +    public Optional<byte[]> getSignedDeliveryRequestStatus(String appDeliveryID) { +        return Optional.empty(); +    }  } diff --git a/src/main/java/at/gv/egiz/moazs/scheme/Msg2MzsConverter.java b/src/main/java/at/gv/egiz/moazs/scheme/Msg2MzsConverter.java new file mode 100644 index 0000000..67f3d13 --- /dev/null +++ b/src/main/java/at/gv/egiz/moazs/scheme/Msg2MzsConverter.java @@ -0,0 +1,75 @@ +package at.gv.egiz.moazs.scheme; + +import at.gv.zustellung.app2mzs.xsd.DeliveryResponseType; +import at.gv.zustellung.app2mzs.xsd.ErrorType; +import at.gv.zustellung.app2mzs.xsd.PartialSuccessType; +import at.gv.zustellung.app2mzs.xsd.SuccessType; +import at.gv.zustellung.msg.xsd.DeliveryAnswerType; +import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType; +import org.springframework.stereotype.Component; + +import java.math.BigInteger; +import java.util.Optional; + +import static at.gv.zustellung.app2mzs.xsd.DeliveryResponseType.deliveryResponseTypeBuilder; +import static at.gv.zustellung.app2mzs.xsd.ErrorType.errorTypeBuilder; +import static at.gv.zustellung.app2mzs.xsd.PartialSuccessType.partialSuccessTypeBuilder; +import static at.gv.zustellung.app2mzs.xsd.SuccessType.successTypeBuilder; + +@Component +public class Msg2MzsConverter { + +    public DeliveryResponseType convert(DeliveryRequestStatusType status, Optional<byte[]> signedStatus) { + +        var responseBuilder = deliveryResponseTypeBuilder(); + +        if (status.getError() != null) { +            responseBuilder.withError(convert(status.getError(), signedStatus)); +        } else if (status.getSuccess() != null) { +            responseBuilder.withSuccess(convert(status.getSuccess(), signedStatus)); +        } else { +            responseBuilder.withPartialSuccess(convert(status.getPartialSuccess(), signedStatus)); +        } + +        return responseBuilder.build(); +    } + +    private SuccessType convert(DeliveryRequestStatusType.Success success, Optional<byte[]> signedStatus) { +        return successTypeBuilder() +                .withAppDeliveryID(success.getAppDeliveryID()) +                .withDeliverySystem(success.getDeliverySystem()) +                .withGZ(success.getGZ()) +                .withZSDeliveryID(success.getZSDeliveryID()) +                .withSignedDeliveryRequestStatus(signedStatus.orElse(null)) +                .withRelayedViaERV(success.isRelayedViaERV()) +                .withDeliveryTimestamp(success.getDeliveryTimestamp()) +                .build(); +    } + +    private PartialSuccessType convert(DeliveryAnswerType answer, Optional<byte[]> signedStatus) { +        return partialSuccessTypeBuilder() +                .withAppDeliveryID(answer.getAppDeliveryID()) +                .withDeliverySystem(answer.getDeliverySystem()) +                .withGZ(answer.getGZ()) +                .withZSDeliveryID(answer.getZSDeliveryID()) +                .withSignedDeliveryRequestStatus(signedStatus.orElse(null)) +                .build(); +    } + +    private ErrorType convert(DeliveryRequestStatusType.Error error, Optional<byte[]> signedStatus) { +        var builder = errorTypeBuilder() +                .withAppDeliveryID(error.getAppDeliveryID()) +                .withDeliverySystem(error.getDeliverySystem()) +                .withGZ(error.getGZ()) +                .withZSDeliveryID(error.getZSDeliveryID()) +                .withSignedDeliveryRequestStatus(signedStatus.orElse(null)) +                .withPreAdviceNoteSent(error.getPreAdviceNoteSent()) +                .withCode(new BigInteger(error.getErrorInfo().getCode())); + +        if(error.getErrorInfo().getText() != null) builder.withText(error.getErrorInfo().getText()); + +        return builder.build(); +    } + + +} | 
