package at.gv.egiz.moazs.scheme; import at.gv.egiz.moazs.MoaZSException; import at.gv.zustellung.msg.xsd.DeliveryAnswerType; import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType; import at.gv.zustellung.msg.xsd.ErrorInfoType; import at.gv.zustellung.msg.xsd.ObjectFactory; import javax.xml.bind.JAXBElement; import static at.gv.egiz.moazs.util.NullCoalesce.coalesce; import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.Error.errorBuilder; import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.deliveryRequestStatusTypeBuilder; import static at.gv.zustellung.msg.xsd.ErrorInfoType.errorInfoTypeBuilder; public class RequestStatusResponse extends MsgResponse { private final DeliveryRequestStatusType status; private final DeliveryAnswerType answer; private static final String ID_SUFFIX = ".RS"; private static final ObjectFactory factory = new ObjectFactory(); public RequestStatusResponse(DeliveryRequestStatusType status) { this.status = status; this.answer = coalesce(status.getSuccess(), status.getPartialSuccess(), status.getError()).get(); super.id = createResponseId(answer.getAppDeliveryID(), ID_SUFFIX); } public static String getResponseID(String appDeliveryID) { return appDeliveryID + ID_SUFFIX; } @Override public DeliveryRequestStatusType getResponse() { return status; } @Override public JAXBElement getResponseAsJAXBElement() { return factory.createDeliveryRequestStatus(status); } @Override public String getAppDeliveryID() { return answer.getAppDeliveryID(); } @Override public String getZSDeliveryID() { return answer.getZSDeliveryID(); } @Override public DeliveryAnswerType getAnswer() { return this.answer; } @Override public MsgResponse generateError(MoaZSException exception) { return generateErrorFromException(exception); } public static MsgResponse generateErrorFromException(MoaZSException exception) { ErrorInfoType info = errorInfoTypeBuilder() .withText(exception.getMessage()) .withCode(exception.getErrorCode()) .build(); DeliveryRequestStatusType.Error error = errorBuilder() .withErrorInfo(info) .withAppDeliveryID(exception.getAppDeliveryID()) .withDeliverySystem(exception.getDeliverySystem()) .withGZ(exception.getGz()) .withPreAdviceNoteSent(exception.getPreAdviceNoteSent()) .withZSDeliveryID(exception.getZsDeliveryID()) .build(); var status = deliveryRequestStatusTypeBuilder() .withError(error) .withVersion(NameSpace.MSG_VERSION) .build(); return new RequestStatusResponse(status); } }