/*
 * Copyright 2018-2024 adorsys GmbH & Co KG
 *
 * This program is free software: you can redistribute it and/or modify it
 * under the terms of the GNU Affero General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or (at
 * your option) any later version. This program is distributed in the hope that
 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see https://www.gnu.org/licenses/.
 *
 * This project is also available under a separate commercial license. You can
 * contact us at sales@adorsys.com.
 */

/**
 * NOTE: This class is auto generated by the swagger code generator program (3.0.0-SNAPSHOT).
 * https://github.com/swagger-api/swagger-codegen
 * Do not edit the class manually.
 */
package de.adorsys.psd2.api;

import com.fasterxml.jackson.databind.ObjectMapper;
import de.adorsys.psd2.model.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.Optional;
import java.util.UUID;
@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2022-05-06T13:00:42.214155+03:00[Europe/Kiev]")
@Validated
public interface SigningBasketApi {

    Logger log = LoggerFactory.getLogger(SigningBasketApi.class);

    default Optional<ObjectMapper> getObjectMapper() {
        return Optional.empty();
    }

    default Optional<HttpServletRequest> getRequest() {
        return Optional.empty();
    }

    default Optional<String> getAcceptHeader() {
        return getRequest().map(r -> r.getHeader("Accept"));
    }

    @Operation(summary = "Create a signing basket resource", description = "Create a signing basket resource for authorising several transactions with one SCA method.  The resource identifications of these transactions are contained in the payload of this access method ", security = {
        @SecurityRequirement(name = "BearerAuthOAuth")    }, tags={ "Signing Baskets Service (SBS)" })
    @ApiResponses(value = {
        @ApiResponse(responseCode = "201", description = "Created", content = @Content(mediaType = "application/json", schema = @Schema(implementation = SigningBasketResponse201.class))),

        @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error400NGSBS.class))),

        @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error401NGSBS.class))),

        @ApiResponse(responseCode = "403", description = "Forbidden", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error403NGSBS.class))),

        @ApiResponse(responseCode = "404", description = "Not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error404NGSBS.class))),

        @ApiResponse(responseCode = "405", description = "Method Not Allowed", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error405NGSBS.class))),

        @ApiResponse(responseCode = "406", description = "Not Acceptable"),

        @ApiResponse(responseCode = "408", description = "Request Timeout"),

        @ApiResponse(responseCode = "409", description = "Conflict", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error409NGSBS.class))),

        @ApiResponse(responseCode = "415", description = "Unsupported Media Type"),

        @ApiResponse(responseCode = "429", description = "Too Many Requests"),

        @ApiResponse(responseCode = "500", description = "Internal Server Error"),

        @ApiResponse(responseCode = "503", description = "Service Unavailable") })
    @RequestMapping(value = "/v1/signing-baskets",
        produces = { "application/json", "application/problem+json" },
        consumes = { "application/json" },
        method = RequestMethod.POST)
    default ResponseEntity<SigningBasketResponse201> _createSigningBasket(@Parameter(in = ParameterIn.HEADER, description = "ID of the request, unique to the call, as determined by the initiating party." ,required=true,schema=@Schema()) @RequestHeader(value="X-Request-ID", required=true) UUID xRequestID, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Address header field consists of the corresponding http request IP Address field between PSU and TPP. If not available, the TPP shall use the IP Address used by the TPP when submitting this request. " ,required=true,schema=@Schema()) @RequestHeader(value="PSU-IP-Address", required=true) String psUIPAddress, @Parameter(in = ParameterIn.HEADER, description = "Is contained if and only if the \"Signature\" element is contained in the header of the request." ,schema=@Schema()) @RequestHeader(value="Digest", required=false) String digest, @Parameter(in = ParameterIn.HEADER, description = "A signature of the request by the TPP on application level. This might be mandated by ASPSP. " ,schema=@Schema()) @RequestHeader(value="Signature", required=false) String signature, @Parameter(in = ParameterIn.HEADER, description = "The certificate used for signing the request, in base64 encoding.  Must be contained if a signature is contained. " ,schema=@Schema()) @RequestHeader(value="TPP-Signature-Certificate", required=false) byte[] tpPSignatureCertificate, @Parameter(in = ParameterIn.HEADER, description = "Client ID of the PSU in the ASPSP client interface.   Might be mandated in the ASPSP's documentation.  It might be contained even if an OAuth2 based authentication was performed in a pre-step or an OAuth2 based SCA was performed in an preceding AIS service in the same session. In this case the ASPSP might check whether PSU-ID and token match,  according to ASPSP documentation. " ,schema=@Schema()) @RequestHeader(value="PSU-ID", required=false) String PSU_ID, @Parameter(in = ParameterIn.HEADER, description = "Type of the PSU-ID, needed in scenarios where PSUs have several PSU-IDs as access possibility.  In this case, the mean and use are then defined in the ASPSP’s documentation. " ,schema=@Schema()) @RequestHeader(value="PSU-ID-Type", required=false) String psUIDType, @Parameter(in = ParameterIn.HEADER, description = "Might be mandated in the ASPSP's documentation. Only used in a corporate context. " ,schema=@Schema()) @RequestHeader(value="PSU-Corporate-ID", required=false) String psUCorporateID, @Parameter(in = ParameterIn.HEADER, description = "Might be mandated in the ASPSP's documentation. Only used in a corporate context. " ,schema=@Schema()) @RequestHeader(value="PSU-Corporate-ID-Type", required=false) String psUCorporateIDType, @Parameter(in = ParameterIn.HEADER, description = "This data element may be contained, if the payment initiation transaction is part of a session, i.e. combined AIS/PIS service. This then contains the consentId of the related AIS consent, which was performed prior to this payment initiation. " ,schema=@Schema()) @RequestHeader(value="Consent-ID", required=false) String consentID, @Parameter(in = ParameterIn.HEADER, description = "If it equals \"true\", the TPP prefers a redirect over an embedded SCA approach. If it equals \"false\", the TPP prefers not to be redirected for SCA. The ASPSP will then choose between the Embedded or the Decoupled SCA approach, depending on the parameter TPP-Decoupled-Preferred and the choice of the SCA procedure by the TPP/PSU. If the parameter is not used, the ASPSP will choose the SCA approach to be applied depending on the SCA method chosen by the TPP/PSU. " ,schema=@Schema()) @RequestHeader(value="TPP-Redirect-Preferred", required=false) Boolean tpPRedirectPreferred, @Parameter(in = ParameterIn.HEADER, description = "If it equals \"true\", the TPP prefers a decoupled SCA approach.  If it equals \"false\", the TPP prefers not to use the decoupled approach for SCA. The ASPSP will then choose between the embedded or the redirect SCA approach, depending on the choice of the SCA procedure by the TPP/PSU.  If the parameter is not used, the ASPSP will choose the SCA approach to be applied depending on the parameter TPP-Redirect-Preferred and the SCA method chosen by the TPP/PSU.  The parameter might be ignored by the ASPSP. If both parameters TPP-Redirect-Preferred and TPP-Decoupled-Preferred are present and true, the request is still not rejected, but it is up to the ASPSP, which approach will actually be used.  **Remark for Future:**  TPP-Redirect-Preferred and TPP-Decoupled-Preferred will be revised in future versions, maybe merged. Currently kept separate for downward compatibility. " ,schema=@Schema()) @RequestHeader(value="TPP-Decoupled-Preferred", required=false) Boolean tpPDecoupledPreferred, @Parameter(in = ParameterIn.HEADER, description = "URI of the TPP, where the transaction flow shall be redirected to after a Redirect.  Mandated for the Redirect SCA Approach, specifically  when TPP-Redirect-Preferred equals \"true\". It is recommended to always use this header field.  **Remark for Future:**  This field might be changed to mandatory in the next version of the specification. " ,schema=@Schema()) @RequestHeader(value="TPP-Redirect-URI", required=false) String tpPRedirectURI, @Parameter(in = ParameterIn.HEADER, description = "If this URI is contained, the TPP is asking to redirect the transaction flow to this address instead of the TPP-Redirect-URI in case of a negative result of the redirect SCA method. This might be ignored by the ASPSP. " ,schema=@Schema()) @RequestHeader(value="TPP-Nok-Redirect-URI", required=false) String tpPNokRedirectURI, @Parameter(in = ParameterIn.HEADER, description = "If it equals \"true\", the TPP prefers to start the authorisation process separately,  e.g. because of the usage of a signing basket.  This preference might be ignored by the ASPSP, if a signing basket is not supported as functionality.  If it equals \"false\" or if the parameter is not used, there is no preference of the TPP.  This especially indicates that the TPP assumes a direct authorisation of the transaction in the next step,  without using a signing basket. " ,schema=@Schema()) @RequestHeader(value="TPP-Explicit-Authorisation-Preferred", required=false) Boolean tpPExplicitAuthorisationPreferred, @Parameter(in = ParameterIn.HEADER, description = "URI for the Endpoint of the TPP-API to which the status of the payment initiation should be sent. This header field may by ignored by the ASPSP.  For security reasons, it shall be ensured that the TPP-Notification-URI as introduced above is secured by the TPP eIDAS QWAC used for identification of the TPP. The following applies:  URIs which are provided by TPPs in TPP-Notification-URI shall comply with the domain secured by the eIDAS QWAC certificate of the TPP in the field CN or SubjectAltName of the certificate. Please note that in case of example-TPP.com as certificate entry TPP- Notification-URI like www.example-TPP.com/xs2a-client/v1/ASPSPidentifcation/mytransaction- id/notifications or notifications.example-TPP.com/xs2a-client/v1/ASPSPidentifcation/mytransaction- id/notifications would be compliant.  Wildcard definitions shall be taken into account for compliance checks by the ASPSP.  ASPSPs may respond with ASPSP-Notification-Support set to false, if the provided URIs do not comply. " ,schema=@Schema()) @RequestHeader(value="TPP-Notification-URI", required=false) String tpPNotificationURI, @Parameter(in = ParameterIn.HEADER, description = "The string has the form   status=X1, ..., Xn  where Xi is one of the constants SCA, PROCESS, LAST and where constants are not repeated. The usage of the constants supports the of following semantics:    SCA: A notification on every change of the scaStatus attribute for all related authorisation processes is preferred by the TPP.    PROCESS: A notification on all changes of consentStatus or transactionStatus attributes is preferred by the TPP.   LAST: Only a notification on the last consentStatus or transactionStatus as available in the XS2A interface is preferred by the TPP.  This header field may be ignored, if the ASPSP does not support resource notification services for the related TPP. " ,schema=@Schema()) @RequestHeader(value="TPP-Notification-Content-Preferred", required=false) String tpPNotificationContentPreferred, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Port header field consists of the corresponding HTTP request IP Port field between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Port", required=false) String psUIPPort, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept", required=false) String psUAccept, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Charset", required=false) String psUAcceptCharset, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Encoding", required=false) String psUAcceptEncoding, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Language", required=false) String psUAcceptLanguage, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Agent header field of the HTTP request between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-User-Agent", required=false) String psUUserAgent, @Parameter(in = ParameterIn.HEADER, description = "HTTP method used at the PSU ? TPP interface, if available. Valid values are: * GET * POST * PUT * PATCH * DELETE " ,schema=@Schema(allowableValues={ "GET", "POST", "PUT", "PATCH", "DELETE" }
    )) @RequestHeader(value="PSU-Http-Method", required=false) String psUHttpMethod, @Parameter(in = ParameterIn.HEADER, description = "UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID needs to be unaltered until removal from device. " ,schema=@Schema()) @RequestHeader(value="PSU-Device-ID", required=false) UUID psUDeviceID, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Geo Location of the corresponding http request between PSU and TPP if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Geo-Location", required=false) String psUGeoLocation, @Parameter(in = ParameterIn.DEFAULT, description = "Request body for a confirmation of an establishing signing basket request. ", schema=@Schema()) @Valid @RequestBody SigningBasket body) {
        return createSigningBasket(xRequestID, psUIPAddress, body, digest, signature, tpPSignatureCertificate, PSU_ID, psUIDType, psUCorporateID, psUCorporateIDType, consentID, tpPRedirectPreferred, tpPDecoupledPreferred, tpPRedirectURI, tpPNokRedirectURI, tpPExplicitAuthorisationPreferred, tpPNotificationURI, tpPNotificationContentPreferred, psUIPPort, psUAccept, psUAcceptCharset, psUAcceptEncoding, psUAcceptLanguage, psUUserAgent, psUHttpMethod, psUDeviceID, psUGeoLocation);
    }

    // Override this method
    default ResponseEntity<SigningBasketResponse201> createSigningBasket(UUID xRequestID,String psUIPAddress,SigningBasket body,String digest,String signature,byte[] tpPSignatureCertificate,String PSU_ID,String psUIDType,String psUCorporateID,String psUCorporateIDType,String consentID,Boolean tpPRedirectPreferred,Boolean tpPDecoupledPreferred,String tpPRedirectURI,String tpPNokRedirectURI,Boolean tpPExplicitAuthorisationPreferred,String tpPNotificationURI,String tpPNotificationContentPreferred,String psUIPPort,String psUAccept,String psUAcceptCharset,String psUAcceptEncoding,String psUAcceptLanguage,String psUUserAgent,String psUHttpMethod,UUID psUDeviceID,String psUGeoLocation) {
        if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
        } else {
            log.warn("ObjectMapper or HttpServletRequest not configured in default SigningBasketsServiceSbsApi interface so no example is generated");
        }
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }


    @Operation(summary = "Delete the signing basket", description = "Delete the signing basket structure as long as no (partial) authorisation has yet been applied.  The undlerying transactions are not affected by this deletion.  Remark: The signing basket as such is not deletable after a first (partial) authorisation has been applied.  Nevertheless, single transactions might be cancelled on an individual basis on the XS2A interface. ", security = {
        @SecurityRequirement(name = "BearerAuthOAuth")    }, tags={ "Signing Baskets Service (SBS)", "Common Services" })
    @ApiResponses(value = {
        @ApiResponse(responseCode = "204", description = "No Content"),

        @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error400NGSBS.class))),

        @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error401NGSBS.class))),

        @ApiResponse(responseCode = "403", description = "Forbidden", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error403NGSBS.class))),

        @ApiResponse(responseCode = "404", description = "Not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error404NGSBS.class))),

        @ApiResponse(responseCode = "405", description = "Method Not Allowed", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error405NGSBS.class))),

        @ApiResponse(responseCode = "406", description = "Not Acceptable"),

        @ApiResponse(responseCode = "408", description = "Request Timeout"),

        @ApiResponse(responseCode = "409", description = "Conflict", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error409NGSBS.class))),

        @ApiResponse(responseCode = "415", description = "Unsupported Media Type"),

        @ApiResponse(responseCode = "429", description = "Too Many Requests"),

        @ApiResponse(responseCode = "500", description = "Internal Server Error"),

        @ApiResponse(responseCode = "503", description = "Service Unavailable") })
    @RequestMapping(value = "/v1/signing-baskets/{basketId}",
        produces = { "application/json", "application/problem+json" },
        method = RequestMethod.DELETE)
    default ResponseEntity<Void> _deleteSigningBasket(@Parameter(in = ParameterIn.PATH, description = "This identification of the corresponding signing basket object. ", required=true, schema=@Schema()) @PathVariable("basketId") String basketId, @Parameter(in = ParameterIn.HEADER, description = "ID of the request, unique to the call, as determined by the initiating party." ,required=true,schema=@Schema()) @RequestHeader(value="X-Request-ID", required=true) UUID xRequestID, @Parameter(in = ParameterIn.HEADER, description = "Is contained if and only if the \"Signature\" element is contained in the header of the request." ,schema=@Schema()) @RequestHeader(value="Digest", required=false) String digest, @Parameter(in = ParameterIn.HEADER, description = "A signature of the request by the TPP on application level. This might be mandated by ASPSP. " ,schema=@Schema()) @RequestHeader(value="Signature", required=false) String signature, @Parameter(in = ParameterIn.HEADER, description = "The certificate used for signing the request, in base64 encoding.  Must be contained if a signature is contained. " ,schema=@Schema()) @RequestHeader(value="TPP-Signature-Certificate", required=false) byte[] tpPSignatureCertificate, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Address header field consists of the corresponding http request IP Address field between PSU and TPP. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Address", required=false) String psUIPAddress, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Port header field consists of the corresponding HTTP request IP Port field between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Port", required=false) String psUIPPort, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept", required=false) String psUAccept, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Charset", required=false) String psUAcceptCharset, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Encoding", required=false) String psUAcceptEncoding, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Language", required=false) String psUAcceptLanguage, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Agent header field of the HTTP request between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-User-Agent", required=false) String psUUserAgent, @Parameter(in = ParameterIn.HEADER, description = "HTTP method used at the PSU ? TPP interface, if available. Valid values are: * GET * POST * PUT * PATCH * DELETE " ,schema=@Schema(allowableValues={ "GET", "POST", "PUT", "PATCH", "DELETE" }
    )) @RequestHeader(value="PSU-Http-Method", required=false) String psUHttpMethod, @Parameter(in = ParameterIn.HEADER, description = "UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID needs to be unaltered until removal from device. " ,schema=@Schema()) @RequestHeader(value="PSU-Device-ID", required=false) UUID psUDeviceID, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Geo Location of the corresponding http request between PSU and TPP if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Geo-Location", required=false) String psUGeoLocation) {
        return deleteSigningBasket(basketId, xRequestID, digest, signature, tpPSignatureCertificate, psUIPAddress, psUIPPort, psUAccept, psUAcceptCharset, psUAcceptEncoding, psUAcceptLanguage, psUUserAgent, psUHttpMethod, psUDeviceID, psUGeoLocation);
    }

    // Override this method
    default ResponseEntity<Void> deleteSigningBasket(String basketId,UUID xRequestID,String digest,String signature,byte[] tpPSignatureCertificate,String psUIPAddress,String psUIPPort,String psUAccept,String psUAcceptCharset,String psUAcceptEncoding,String psUAcceptLanguage,String psUUserAgent,String psUHttpMethod,UUID psUDeviceID,String psUGeoLocation) {
        if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
        } else {
            log.warn("ObjectMapper or HttpServletRequest not configured in default SigningBasketsServiceSbsApi interface so no example is generated");
        }
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }


    @Operation(summary = "Returns the content of an signing basket object", description = "Returns the content of a signing basket object.", security = {
        @SecurityRequirement(name = "BearerAuthOAuth")    }, tags={ "Signing Baskets Service (SBS)" })
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "OK", content = @Content(mediaType = "application/json", schema = @Schema(implementation = SigningBasketResponse200.class))),

        @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error400NGSBS.class))),

        @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error401NGSBS.class))),

        @ApiResponse(responseCode = "403", description = "Forbidden", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error403NGSBS.class))),

        @ApiResponse(responseCode = "404", description = "Not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error404NGSBS.class))),

        @ApiResponse(responseCode = "405", description = "Method Not Allowed", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error405NGSBS.class))),

        @ApiResponse(responseCode = "406", description = "Not Acceptable"),

        @ApiResponse(responseCode = "408", description = "Request Timeout"),

        @ApiResponse(responseCode = "409", description = "Conflict", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error409NGSBS.class))),

        @ApiResponse(responseCode = "415", description = "Unsupported Media Type"),

        @ApiResponse(responseCode = "429", description = "Too Many Requests"),

        @ApiResponse(responseCode = "500", description = "Internal Server Error"),

        @ApiResponse(responseCode = "503", description = "Service Unavailable") })
    @RequestMapping(value = "/v1/signing-baskets/{basketId}",
        produces = { "application/json", "application/problem+json" },
        method = RequestMethod.GET)
    default ResponseEntity<SigningBasketResponse200> _getSigningBasket(@Parameter(in = ParameterIn.PATH, description = "This identification of the corresponding signing basket object. ", required=true, schema=@Schema()) @PathVariable("basketId") String basketId, @Parameter(in = ParameterIn.HEADER, description = "ID of the request, unique to the call, as determined by the initiating party." ,required=true,schema=@Schema()) @RequestHeader(value="X-Request-ID", required=true) UUID xRequestID, @Parameter(in = ParameterIn.HEADER, description = "Is contained if and only if the \"Signature\" element is contained in the header of the request." ,schema=@Schema()) @RequestHeader(value="Digest", required=false) String digest, @Parameter(in = ParameterIn.HEADER, description = "A signature of the request by the TPP on application level. This might be mandated by ASPSP. " ,schema=@Schema()) @RequestHeader(value="Signature", required=false) String signature, @Parameter(in = ParameterIn.HEADER, description = "The certificate used for signing the request, in base64 encoding.  Must be contained if a signature is contained. " ,schema=@Schema()) @RequestHeader(value="TPP-Signature-Certificate", required=false) byte[] tpPSignatureCertificate, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Address header field consists of the corresponding http request IP Address field between PSU and TPP. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Address", required=false) String psUIPAddress, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Port header field consists of the corresponding HTTP request IP Port field between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Port", required=false) String psUIPPort, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept", required=false) String psUAccept, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Charset", required=false) String psUAcceptCharset, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Encoding", required=false) String psUAcceptEncoding, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Language", required=false) String psUAcceptLanguage, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Agent header field of the HTTP request between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-User-Agent", required=false) String psUUserAgent, @Parameter(in = ParameterIn.HEADER, description = "HTTP method used at the PSU ? TPP interface, if available. Valid values are: * GET * POST * PUT * PATCH * DELETE " ,schema=@Schema(allowableValues={ "GET", "POST", "PUT", "PATCH", "DELETE" }
    )) @RequestHeader(value="PSU-Http-Method", required=false) String psUHttpMethod, @Parameter(in = ParameterIn.HEADER, description = "UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID needs to be unaltered until removal from device. " ,schema=@Schema()) @RequestHeader(value="PSU-Device-ID", required=false) UUID psUDeviceID, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Geo Location of the corresponding http request between PSU and TPP if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Geo-Location", required=false) String psUGeoLocation) {
        return getSigningBasket(basketId, xRequestID, digest, signature, tpPSignatureCertificate, psUIPAddress, psUIPPort, psUAccept, psUAcceptCharset, psUAcceptEncoding, psUAcceptLanguage, psUUserAgent, psUHttpMethod, psUDeviceID, psUGeoLocation);
    }

    // Override this method
    default ResponseEntity<SigningBasketResponse200> getSigningBasket(String basketId,UUID xRequestID,String digest,String signature,byte[] tpPSignatureCertificate,String psUIPAddress,String psUIPPort,String psUAccept,String psUAcceptCharset,String psUAcceptEncoding,String psUAcceptLanguage,String psUUserAgent,String psUHttpMethod,UUID psUDeviceID,String psUGeoLocation) {
        if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
        } else {
            log.warn("ObjectMapper or HttpServletRequest not configured in default SigningBasketsServiceSbsApi interface so no example is generated");
        }
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }


    @Operation(summary = "Get signing basket authorisation sub-resources request", description = "Read a list of all authorisation subresources IDs which have been created.  This function returns an array of hyperlinks to all generated authorisation sub-resources. ", security = {
        @SecurityRequirement(name = "BearerAuthOAuth")    }, tags={ "Signing Baskets Service (SBS)", "Common Services" })
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "OK", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Authorisations.class))),

        @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error400NGSBS.class))),

        @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error401NGSBS.class))),

        @ApiResponse(responseCode = "403", description = "Forbidden", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error403NGSBS.class))),

        @ApiResponse(responseCode = "404", description = "Not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error404NGSBS.class))),

        @ApiResponse(responseCode = "405", description = "Method Not Allowed", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error405NGSBS.class))),

        @ApiResponse(responseCode = "406", description = "Not Acceptable"),

        @ApiResponse(responseCode = "408", description = "Request Timeout"),

        @ApiResponse(responseCode = "409", description = "Conflict", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error409NGSBS.class))),

        @ApiResponse(responseCode = "415", description = "Unsupported Media Type"),

        @ApiResponse(responseCode = "429", description = "Too Many Requests"),

        @ApiResponse(responseCode = "500", description = "Internal Server Error"),

        @ApiResponse(responseCode = "503", description = "Service Unavailable") })
    @RequestMapping(value = "/v1/signing-baskets/{basketId}/authorisations",
        produces = { "application/json", "application/problem+json" },
        method = RequestMethod.GET)
    default ResponseEntity<Authorisations> _getSigningBasketAuthorisation(@Parameter(in = ParameterIn.PATH, description = "This identification of the corresponding signing basket object. ", required=true, schema=@Schema()) @PathVariable("basketId") String basketId, @Parameter(in = ParameterIn.HEADER, description = "ID of the request, unique to the call, as determined by the initiating party." ,required=true,schema=@Schema()) @RequestHeader(value="X-Request-ID", required=true) UUID xRequestID, @Parameter(in = ParameterIn.HEADER, description = "Is contained if and only if the \"Signature\" element is contained in the header of the request." ,schema=@Schema()) @RequestHeader(value="Digest", required=false) String digest, @Parameter(in = ParameterIn.HEADER, description = "A signature of the request by the TPP on application level. This might be mandated by ASPSP. " ,schema=@Schema()) @RequestHeader(value="Signature", required=false) String signature, @Parameter(in = ParameterIn.HEADER, description = "The certificate used for signing the request, in base64 encoding.  Must be contained if a signature is contained. " ,schema=@Schema()) @RequestHeader(value="TPP-Signature-Certificate", required=false) byte[] tpPSignatureCertificate, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Address header field consists of the corresponding http request IP Address field between PSU and TPP. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Address", required=false) String psUIPAddress, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Port header field consists of the corresponding HTTP request IP Port field between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Port", required=false) String psUIPPort, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept", required=false) String psUAccept, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Charset", required=false) String psUAcceptCharset, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Encoding", required=false) String psUAcceptEncoding, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Language", required=false) String psUAcceptLanguage, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Agent header field of the HTTP request between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-User-Agent", required=false) String psUUserAgent, @Parameter(in = ParameterIn.HEADER, description = "HTTP method used at the PSU ? TPP interface, if available. Valid values are: * GET * POST * PUT * PATCH * DELETE " ,schema=@Schema(allowableValues={ "GET", "POST", "PUT", "PATCH", "DELETE" }
    )) @RequestHeader(value="PSU-Http-Method", required=false) String psUHttpMethod, @Parameter(in = ParameterIn.HEADER, description = "UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID needs to be unaltered until removal from device. " ,schema=@Schema()) @RequestHeader(value="PSU-Device-ID", required=false) UUID psUDeviceID, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Geo Location of the corresponding http request between PSU and TPP if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Geo-Location", required=false) String psUGeoLocation) {
        return getSigningBasketAuthorisation(basketId, xRequestID, digest, signature, tpPSignatureCertificate, psUIPAddress, psUIPPort, psUAccept, psUAcceptCharset, psUAcceptEncoding, psUAcceptLanguage, psUUserAgent, psUHttpMethod, psUDeviceID, psUGeoLocation);
    }

    // Override this method
    default ResponseEntity<Authorisations> getSigningBasketAuthorisation(String basketId,UUID xRequestID,String digest,String signature,byte[] tpPSignatureCertificate,String psUIPAddress,String psUIPPort,String psUAccept,String psUAcceptCharset,String psUAcceptEncoding,String psUAcceptLanguage,String psUUserAgent,String psUHttpMethod,UUID psUDeviceID,String psUGeoLocation) {
        if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
        } else {
            log.warn("ObjectMapper or HttpServletRequest not configured in default SigningBasketsServiceSbsApi interface so no example is generated");
        }
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }


    @Operation(summary = "Read the SCA status of the signing basket authorisation", description = "This method returns the SCA status of a signing basket's authorisation sub-resource. ", security = {
        @SecurityRequirement(name = "BearerAuthOAuth")    }, tags={ "Signing Baskets Service (SBS)", "Common Services" })
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "OK", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ScaStatusResponse.class))),

        @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error400NGSBS.class))),

        @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error401NGSBS.class))),

        @ApiResponse(responseCode = "403", description = "Forbidden", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error403NGSBS.class))),

        @ApiResponse(responseCode = "404", description = "Not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error404NGSBS.class))),

        @ApiResponse(responseCode = "405", description = "Method Not Allowed", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error405NGSBS.class))),

        @ApiResponse(responseCode = "406", description = "Not Acceptable"),

        @ApiResponse(responseCode = "408", description = "Request Timeout"),

        @ApiResponse(responseCode = "409", description = "Conflict", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error409NGSBS.class))),

        @ApiResponse(responseCode = "415", description = "Unsupported Media Type"),

        @ApiResponse(responseCode = "429", description = "Too Many Requests"),

        @ApiResponse(responseCode = "500", description = "Internal Server Error"),

        @ApiResponse(responseCode = "503", description = "Service Unavailable") })
    @RequestMapping(value = "/v1/signing-baskets/{basketId}/authorisations/{authorisationId}",
        produces = { "application/json", "application/problem+json" },
        method = RequestMethod.GET)
    default ResponseEntity<ScaStatusResponse> _getSigningBasketScaStatus(@Parameter(in = ParameterIn.PATH, description = "This identification of the corresponding signing basket object. ", required=true, schema=@Schema()) @PathVariable("basketId") String basketId, @Parameter(in = ParameterIn.PATH, description = "Resource identification of the related SCA.", required=true, schema=@Schema()) @PathVariable("authorisationId") String authorisationId, @Parameter(in = ParameterIn.HEADER, description = "ID of the request, unique to the call, as determined by the initiating party." ,required=true,schema=@Schema()) @RequestHeader(value="X-Request-ID", required=true) UUID xRequestID, @Parameter(in = ParameterIn.HEADER, description = "Is contained if and only if the \"Signature\" element is contained in the header of the request." ,schema=@Schema()) @RequestHeader(value="Digest", required=false) String digest, @Parameter(in = ParameterIn.HEADER, description = "A signature of the request by the TPP on application level. This might be mandated by ASPSP. " ,schema=@Schema()) @RequestHeader(value="Signature", required=false) String signature, @Parameter(in = ParameterIn.HEADER, description = "The certificate used for signing the request, in base64 encoding.  Must be contained if a signature is contained. " ,schema=@Schema()) @RequestHeader(value="TPP-Signature-Certificate", required=false) byte[] tpPSignatureCertificate, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Address header field consists of the corresponding http request IP Address field between PSU and TPP. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Address", required=false) String psUIPAddress, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Port header field consists of the corresponding HTTP request IP Port field between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Port", required=false) String psUIPPort, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept", required=false) String psUAccept, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Charset", required=false) String psUAcceptCharset, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Encoding", required=false) String psUAcceptEncoding, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Language", required=false) String psUAcceptLanguage, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Agent header field of the HTTP request between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-User-Agent", required=false) String psUUserAgent, @Parameter(in = ParameterIn.HEADER, description = "HTTP method used at the PSU ? TPP interface, if available. Valid values are: * GET * POST * PUT * PATCH * DELETE " ,schema=@Schema(allowableValues={ "GET", "POST", "PUT", "PATCH", "DELETE" }
    )) @RequestHeader(value="PSU-Http-Method", required=false) String psUHttpMethod, @Parameter(in = ParameterIn.HEADER, description = "UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID needs to be unaltered until removal from device. " ,schema=@Schema()) @RequestHeader(value="PSU-Device-ID", required=false) UUID psUDeviceID, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Geo Location of the corresponding http request between PSU and TPP if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Geo-Location", required=false) String psUGeoLocation) {
        return getSigningBasketScaStatus(basketId, authorisationId, xRequestID, digest, signature, tpPSignatureCertificate, psUIPAddress, psUIPPort, psUAccept, psUAcceptCharset, psUAcceptEncoding, psUAcceptLanguage, psUUserAgent, psUHttpMethod, psUDeviceID, psUGeoLocation);
    }

    // Override this method
    default ResponseEntity<ScaStatusResponse> getSigningBasketScaStatus(String basketId,String authorisationId,UUID xRequestID,String digest,String signature,byte[] tpPSignatureCertificate,String psUIPAddress,String psUIPPort,String psUAccept,String psUAcceptCharset,String psUAcceptEncoding,String psUAcceptLanguage,String psUUserAgent,String psUHttpMethod,UUID psUDeviceID,String psUGeoLocation) {
        if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
        } else {
            log.warn("ObjectMapper or HttpServletRequest not configured in default SigningBasketsServiceSbsApi interface so no example is generated");
        }
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }


    @Operation(summary = "Read the status of the signing basket", description = "Returns the status of a signing basket object.  ", security = {
        @SecurityRequirement(name = "BearerAuthOAuth")    }, tags={ "Signing Baskets Service (SBS)", "Common Services" })
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "OK", content = @Content(mediaType = "application/json", schema = @Schema(implementation = SigningBasketStatusResponse200.class))),

        @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error400NGSBS.class))),

        @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error401NGSBS.class))),

        @ApiResponse(responseCode = "403", description = "Forbidden", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error403NGSBS.class))),

        @ApiResponse(responseCode = "404", description = "Not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error404NGSBS.class))),

        @ApiResponse(responseCode = "405", description = "Method Not Allowed", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error405NGSBS.class))),

        @ApiResponse(responseCode = "406", description = "Not Acceptable"),

        @ApiResponse(responseCode = "408", description = "Request Timeout"),

        @ApiResponse(responseCode = "409", description = "Conflict", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error409NGSBS.class))),

        @ApiResponse(responseCode = "415", description = "Unsupported Media Type"),

        @ApiResponse(responseCode = "429", description = "Too Many Requests"),

        @ApiResponse(responseCode = "500", description = "Internal Server Error"),

        @ApiResponse(responseCode = "503", description = "Service Unavailable") })
    @RequestMapping(value = "/v1/signing-baskets/{basketId}/status",
        produces = { "application/json", "application/problem+json" },
        method = RequestMethod.GET)
    default ResponseEntity<SigningBasketStatusResponse200> _getSigningBasketStatus(@Parameter(in = ParameterIn.PATH, description = "This identification of the corresponding signing basket object. ", required=true, schema=@Schema()) @PathVariable("basketId") String basketId, @Parameter(in = ParameterIn.HEADER, description = "ID of the request, unique to the call, as determined by the initiating party." ,required=true,schema=@Schema()) @RequestHeader(value="X-Request-ID", required=true) UUID xRequestID, @Parameter(in = ParameterIn.HEADER, description = "Is contained if and only if the \"Signature\" element is contained in the header of the request." ,schema=@Schema()) @RequestHeader(value="Digest", required=false) String digest, @Parameter(in = ParameterIn.HEADER, description = "A signature of the request by the TPP on application level. This might be mandated by ASPSP. " ,schema=@Schema()) @RequestHeader(value="Signature", required=false) String signature, @Parameter(in = ParameterIn.HEADER, description = "The certificate used for signing the request, in base64 encoding.  Must be contained if a signature is contained. " ,schema=@Schema()) @RequestHeader(value="TPP-Signature-Certificate", required=false) byte[] tpPSignatureCertificate, @Parameter(in = ParameterIn.HEADER, description = "Client ID of the PSU in the ASPSP client interface.   Might be mandated in the ASPSP's documentation.  It might be contained even if an OAuth2 based authentication was performed in a pre-step or an OAuth2 based SCA was performed in an preceding AIS service in the same session. In this case the ASPSP might check whether PSU-ID and token match,  according to ASPSP documentation. " ,schema=@Schema()) @RequestHeader(value="PSU-ID", required=false) String PSU_ID, @Parameter(in = ParameterIn.HEADER, description = "Type of the PSU-ID, needed in scenarios where PSUs have several PSU-IDs as access possibility.  In this case, the mean and use are then defined in the ASPSP’s documentation. " ,schema=@Schema()) @RequestHeader(value="PSU-ID-Type", required=false) String psUIDType, @Parameter(in = ParameterIn.HEADER, description = "Might be mandated in the ASPSP's documentation. Only used in a corporate context. " ,schema=@Schema()) @RequestHeader(value="PSU-Corporate-ID", required=false) String psUCorporateID, @Parameter(in = ParameterIn.HEADER, description = "Might be mandated in the ASPSP's documentation. Only used in a corporate context. " ,schema=@Schema()) @RequestHeader(value="PSU-Corporate-ID-Type", required=false) String psUCorporateIDType, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Address header field consists of the corresponding http request IP Address field between PSU and TPP. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Address", required=false) String psUIPAddress, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Port header field consists of the corresponding HTTP request IP Port field between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Port", required=false) String psUIPPort, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept", required=false) String psUAccept, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Charset", required=false) String psUAcceptCharset, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Encoding", required=false) String psUAcceptEncoding, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Language", required=false) String psUAcceptLanguage, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Agent header field of the HTTP request between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-User-Agent", required=false) String psUUserAgent, @Parameter(in = ParameterIn.HEADER, description = "HTTP method used at the PSU ? TPP interface, if available. Valid values are: * GET * POST * PUT * PATCH * DELETE " ,schema=@Schema(allowableValues={ "GET", "POST", "PUT", "PATCH", "DELETE" }
    )) @RequestHeader(value="PSU-Http-Method", required=false) String psUHttpMethod, @Parameter(in = ParameterIn.HEADER, description = "UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID needs to be unaltered until removal from device. " ,schema=@Schema()) @RequestHeader(value="PSU-Device-ID", required=false) UUID psUDeviceID, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Geo Location of the corresponding http request between PSU and TPP if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Geo-Location", required=false) String psUGeoLocation) {
        return getSigningBasketStatus(basketId, xRequestID, digest, signature, tpPSignatureCertificate, PSU_ID, psUIDType, psUCorporateID, psUCorporateIDType, psUIPAddress, psUIPPort, psUAccept, psUAcceptCharset, psUAcceptEncoding, psUAcceptLanguage, psUUserAgent, psUHttpMethod, psUDeviceID, psUGeoLocation);
    }

    // Override this method
    default ResponseEntity<SigningBasketStatusResponse200> getSigningBasketStatus(String basketId,UUID xRequestID,String digest,String signature,byte[] tpPSignatureCertificate,String PSU_ID,String psUIDType,String psUCorporateID,String psUCorporateIDType,String psUIPAddress,String psUIPPort,String psUAccept,String psUAcceptCharset,String psUAcceptEncoding,String psUAcceptLanguage,String psUUserAgent,String psUHttpMethod,UUID psUDeviceID,String psUGeoLocation) {
        if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
        } else {
            log.warn("ObjectMapper or HttpServletRequest not configured in default SigningBasketsServiceSbsApi interface so no example is generated");
        }
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }


    @Operation(summary = "Start the authorisation process for a signing basket", description = "Create an authorisation sub-resource and start the authorisation process of a signing basket.  The message might in addition transmit authentication and authorisation related data.  This method is iterated n times for a n times SCA authorisation in a  corporate context, each creating an own authorisation sub-endpoint for  the corresponding PSU authorising the signing-baskets.  The ASPSP might make the usage of this access method unnecessary in case  of only one SCA process needed, since the related authorisation resource  might be automatically created by the ASPSP after the submission of the  payment data with the first POST signing basket call.  The start authorisation process is a process which is needed for creating a new authorisation  or cancellation sub-resource.   This applies in the following scenarios:    * The ASPSP has indicated with a 'startAuthorisation' hyperlink in the preceding payment      initiation response that an explicit start of the authorisation process is needed by the TPP.      The 'startAuthorisation' hyperlink can transport more information about data which needs to be      uploaded by using the extended forms:     * 'startAuthorisationWithPsuIdentfication',      * 'startAuthorisationWithPsuAuthentication'      * 'startAuthorisationWithEncryptedPsuAuthentication'     * 'startAuthorisationWithAuthentciationMethodSelection'    * The related payment initiation cannot yet be executed since a multilevel SCA is mandated.   * The ASPSP has indicated with a 'startAuthorisation' hyperlink in the preceding      payment cancellation response that an explicit start of the authorisation process is needed by the TPP.     The 'startAuthorisation' hyperlink can transport more information about data which needs to be uploaded     by using the extended forms as indicated above.   * The related payment cancellation request cannot be applied yet since a multilevel SCA is mandate for      executing the cancellation.   * The signing basket needs to be authorised yet. ", security = {
        @SecurityRequirement(name = "BearerAuthOAuth")    }, tags={ "Signing Baskets Service (SBS)", "Common Services" })
    @ApiResponses(value = {
        @ApiResponse(responseCode = "201", description = "Created", content = @Content(mediaType = "application/json", schema = @Schema(implementation = StartScaprocessResponse.class))),

        @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error400NGSBS.class))),

        @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error401NGSBS.class))),

        @ApiResponse(responseCode = "403", description = "Forbidden", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error403NGSBS.class))),

        @ApiResponse(responseCode = "404", description = "Not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error404NGSBS.class))),

        @ApiResponse(responseCode = "405", description = "Method Not Allowed", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error405NGSBS.class))),

        @ApiResponse(responseCode = "406", description = "Not Acceptable"),

        @ApiResponse(responseCode = "408", description = "Request Timeout"),

        @ApiResponse(responseCode = "409", description = "Conflict", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error409NGSBS.class))),

        @ApiResponse(responseCode = "415", description = "Unsupported Media Type"),

        @ApiResponse(responseCode = "429", description = "Too Many Requests"),

        @ApiResponse(responseCode = "500", description = "Internal Server Error"),

        @ApiResponse(responseCode = "503", description = "Service Unavailable") })
    @RequestMapping(value = "/v1/signing-baskets/{basketId}/authorisations",
        produces = { "application/json", "application/problem+json" },
        consumes = { "application/json" },
        method = RequestMethod.POST)
    default ResponseEntity<StartScaprocessResponse> _startSigningBasketAuthorisation(@Parameter(in = ParameterIn.HEADER, description = "ID of the request, unique to the call, as determined by the initiating party." ,required=true,schema=@Schema()) @RequestHeader(value="X-Request-ID", required=true) UUID xRequestID, @Parameter(in = ParameterIn.PATH, description = "This identification of the corresponding signing basket object. ", required=true, schema=@Schema()) @PathVariable("basketId") String basketId, @Parameter(in = ParameterIn.HEADER, description = "Is contained if and only if the \"Signature\" element is contained in the header of the request." ,schema=@Schema()) @RequestHeader(value="Digest", required=false) String digest, @Parameter(in = ParameterIn.HEADER, description = "A signature of the request by the TPP on application level. This might be mandated by ASPSP. " ,schema=@Schema()) @RequestHeader(value="Signature", required=false) String signature, @Parameter(in = ParameterIn.HEADER, description = "The certificate used for signing the request, in base64 encoding.  Must be contained if a signature is contained. " ,schema=@Schema()) @RequestHeader(value="TPP-Signature-Certificate", required=false) byte[] tpPSignatureCertificate, @Parameter(in = ParameterIn.HEADER, description = "Client ID of the PSU in the ASPSP client interface.   Might be mandated in the ASPSP's documentation.  It might be contained even if an OAuth2 based authentication was performed in a pre-step or an OAuth2 based SCA was performed in an preceding AIS service in the same session. In this case the ASPSP might check whether PSU-ID and token match,  according to ASPSP documentation. " ,schema=@Schema()) @RequestHeader(value="PSU-ID", required=false) String PSU_ID, @Parameter(in = ParameterIn.HEADER, description = "Type of the PSU-ID, needed in scenarios where PSUs have several PSU-IDs as access possibility.  In this case, the mean and use are then defined in the ASPSP’s documentation. " ,schema=@Schema()) @RequestHeader(value="PSU-ID-Type", required=false) String psUIDType, @Parameter(in = ParameterIn.HEADER, description = "Might be mandated in the ASPSP's documentation. Only used in a corporate context. " ,schema=@Schema()) @RequestHeader(value="PSU-Corporate-ID", required=false) String psUCorporateID, @Parameter(in = ParameterIn.HEADER, description = "Might be mandated in the ASPSP's documentation. Only used in a corporate context. " ,schema=@Schema()) @RequestHeader(value="PSU-Corporate-ID-Type", required=false) String psUCorporateIDType, @Parameter(in = ParameterIn.HEADER, description = "If it equals \"true\", the TPP prefers a redirect over an embedded SCA approach. If it equals \"false\", the TPP prefers not to be redirected for SCA. The ASPSP will then choose between the Embedded or the Decoupled SCA approach, depending on the parameter TPP-Decoupled-Preferred and the choice of the SCA procedure by the TPP/PSU. If the parameter is not used, the ASPSP will choose the SCA approach to be applied depending on the SCA method chosen by the TPP/PSU. " ,schema=@Schema()) @RequestHeader(value="TPP-Redirect-Preferred", required=false) Boolean tpPRedirectPreferred, @Parameter(in = ParameterIn.HEADER, description = "If it equals \"true\", the TPP prefers a decoupled SCA approach.  If it equals \"false\", the TPP prefers not to use the decoupled approach for SCA. The ASPSP will then choose between the embedded or the redirect SCA approach, depending on the choice of the SCA procedure by the TPP/PSU.  If the parameter is not used, the ASPSP will choose the SCA approach to be applied depending on the parameter TPP-Redirect-Preferred and the SCA method chosen by the TPP/PSU.  The parameter might be ignored by the ASPSP. If both parameters TPP-Redirect-Preferred and TPP-Decoupled-Preferred are present and true, the request is still not rejected, but it is up to the ASPSP, which approach will actually be used.  **Remark for Future:**  TPP-Redirect-Preferred and TPP-Decoupled-Preferred will be revised in future versions, maybe merged. Currently kept separate for downward compatibility. " ,schema=@Schema()) @RequestHeader(value="TPP-Decoupled-Preferred", required=false) Boolean tpPDecoupledPreferred, @Parameter(in = ParameterIn.HEADER, description = "URI of the TPP, where the transaction flow shall be redirected to after a Redirect.  Mandated for the Redirect SCA Approach, specifically  when TPP-Redirect-Preferred equals \"true\". It is recommended to always use this header field.  **Remark for Future:**  This field might be changed to mandatory in the next version of the specification. " ,schema=@Schema()) @RequestHeader(value="TPP-Redirect-URI", required=false) String tpPRedirectURI, @Parameter(in = ParameterIn.HEADER, description = "If this URI is contained, the TPP is asking to redirect the transaction flow to this address instead of the TPP-Redirect-URI in case of a negative result of the redirect SCA method. This might be ignored by the ASPSP. " ,schema=@Schema()) @RequestHeader(value="TPP-Nok-Redirect-URI", required=false) String tpPNokRedirectURI, @Parameter(in = ParameterIn.HEADER, description = "URI for the Endpoint of the TPP-API to which the status of the payment initiation should be sent. This header field may by ignored by the ASPSP.  For security reasons, it shall be ensured that the TPP-Notification-URI as introduced above is secured by the TPP eIDAS QWAC used for identification of the TPP. The following applies:  URIs which are provided by TPPs in TPP-Notification-URI shall comply with the domain secured by the eIDAS QWAC certificate of the TPP in the field CN or SubjectAltName of the certificate. Please note that in case of example-TPP.com as certificate entry TPP- Notification-URI like www.example-TPP.com/xs2a-client/v1/ASPSPidentifcation/mytransaction- id/notifications or notifications.example-TPP.com/xs2a-client/v1/ASPSPidentifcation/mytransaction- id/notifications would be compliant.  Wildcard definitions shall be taken into account for compliance checks by the ASPSP.  ASPSPs may respond with ASPSP-Notification-Support set to false, if the provided URIs do not comply. " ,schema=@Schema()) @RequestHeader(value="TPP-Notification-URI", required=false) String tpPNotificationURI, @Parameter(in = ParameterIn.HEADER, description = "The string has the form   status=X1, ..., Xn  where Xi is one of the constants SCA, PROCESS, LAST and where constants are not repeated. The usage of the constants supports the of following semantics:    SCA: A notification on every change of the scaStatus attribute for all related authorisation processes is preferred by the TPP.    PROCESS: A notification on all changes of consentStatus or transactionStatus attributes is preferred by the TPP.   LAST: Only a notification on the last consentStatus or transactionStatus as available in the XS2A interface is preferred by the TPP.  This header field may be ignored, if the ASPSP does not support resource notification services for the related TPP. " ,schema=@Schema()) @RequestHeader(value="TPP-Notification-Content-Preferred", required=false) String tpPNotificationContentPreferred, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Address header field consists of the corresponding http request IP Address field between PSU and TPP. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Address", required=false) String psUIPAddress, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Port header field consists of the corresponding HTTP request IP Port field between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Port", required=false) String psUIPPort, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept", required=false) String psUAccept, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Charset", required=false) String psUAcceptCharset, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Encoding", required=false) String psUAcceptEncoding, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Language", required=false) String psUAcceptLanguage, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Agent header field of the HTTP request between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-User-Agent", required=false) String psUUserAgent, @Parameter(in = ParameterIn.HEADER, description = "HTTP method used at the PSU ? TPP interface, if available. Valid values are: * GET * POST * PUT * PATCH * DELETE " ,schema=@Schema(allowableValues={ "GET", "POST", "PUT", "PATCH", "DELETE" }
    )) @RequestHeader(value="PSU-Http-Method", required=false) String psUHttpMethod, @Parameter(in = ParameterIn.HEADER, description = "UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID needs to be unaltered until removal from device. " ,schema=@Schema()) @RequestHeader(value="PSU-Device-ID", required=false) UUID psUDeviceID, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Geo Location of the corresponding http request between PSU and TPP if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Geo-Location", required=false) String psUGeoLocation, @Parameter(in = ParameterIn.DEFAULT, description = "", schema=@Schema()) @Valid @RequestBody(required = false) Object body) {
        return startSigningBasketAuthorisation(xRequestID, basketId, body, digest, signature, tpPSignatureCertificate, PSU_ID, psUIDType, psUCorporateID, psUCorporateIDType, tpPRedirectPreferred, tpPDecoupledPreferred, tpPRedirectURI, tpPNokRedirectURI, tpPNotificationURI, tpPNotificationContentPreferred, psUIPAddress, psUIPPort, psUAccept, psUAcceptCharset, psUAcceptEncoding, psUAcceptLanguage, psUUserAgent, psUHttpMethod, psUDeviceID, psUGeoLocation);
    }

    // Override this method
    default ResponseEntity<StartScaprocessResponse> startSigningBasketAuthorisation(UUID xRequestID,String basketId,Object body,String digest,String signature,byte[] tpPSignatureCertificate,String PSU_ID,String psUIDType,String psUCorporateID,String psUCorporateIDType,Boolean tpPRedirectPreferred,Boolean tpPDecoupledPreferred,String tpPRedirectURI,String tpPNokRedirectURI,String tpPNotificationURI,String tpPNotificationContentPreferred,String psUIPAddress,String psUIPPort,String psUAccept,String psUAcceptCharset,String psUAcceptEncoding,String psUAcceptLanguage,String psUUserAgent,String psUHttpMethod,UUID psUDeviceID,String psUGeoLocation) {
        if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
        } else {
            log.warn("ObjectMapper or HttpServletRequest not configured in default SigningBasketsServiceSbsApi interface so no example is generated");
        }
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }


    @Operation(summary = "Update PSU data for signing basket", description = "This method update PSU data on the signing basket resource if needed.  It may authorise a igning basket within the embedded SCA approach where needed.  Independently from the SCA Approach it supports e.g. the selection of  the authentication method and a non-SCA PSU authentication.  This methods updates PSU data on the cancellation authorisation resource if needed.   There are several possible update PSU data requests in the context of a consent request if needed,  which depends on the SCA approach:  * Redirect SCA Approach:   A specific Update PSU data request is applicable for      * the selection of authentication methods, before choosing the actual SCA approach. * Decoupled SCA Approach:   A specific Update PSU data request is only applicable for   * adding the PSU Identification, if not provided yet in the payment initiation request or the account information consent request, or if no OAuth2 access token is used, or   * the selection of authentication methods. * Embedded SCA Approach:    The update PSU data request might be used    * to add credentials as a first factor authentication data of the PSU and   * to select the authentication method and   * transaction authorisation.  The SCA approach might depend on the chosen SCA method.  For that reason, the following possible update PSU data request can apply to all SCA approaches:  * Select an SCA method in case of several SCA methods are available for the customer.  There are the following request types on this access path:   * Update PSU identification   * Update PSU authentication   * Select PSU autorization Method      WARNING: This method needs a reduced header,      therefore many optional elements are not present.      Maybe in a later version the access path will change.   * Transaction Authorisation     WARNING: This method needs a reduced header,      therefore many optional elements are not present.      Maybe in a later version the access path will change. ", security = {
        @SecurityRequirement(name = "BearerAuthOAuth")    }, tags={ "Signing Baskets Service (SBS)", "Common Services" })
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "OK", content = @Content(mediaType = "application/json", schema = @Schema(implementation = InlineResponse2002.class))),

        @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error400NGSBS.class))),

        @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error401NGSBS.class))),

        @ApiResponse(responseCode = "403", description = "Forbidden", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error403NGSBS.class))),

        @ApiResponse(responseCode = "404", description = "Not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error404NGSBS.class))),

        @ApiResponse(responseCode = "405", description = "Method Not Allowed", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error405NGSBS.class))),

        @ApiResponse(responseCode = "406", description = "Not Acceptable"),

        @ApiResponse(responseCode = "408", description = "Request Timeout"),

        @ApiResponse(responseCode = "409", description = "Conflict", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error409NGSBS.class))),

        @ApiResponse(responseCode = "415", description = "Unsupported Media Type"),

        @ApiResponse(responseCode = "429", description = "Too Many Requests"),

        @ApiResponse(responseCode = "500", description = "Internal Server Error"),

        @ApiResponse(responseCode = "503", description = "Service Unavailable") })
    @RequestMapping(value = "/v1/signing-baskets/{basketId}/authorisations/{authorisationId}",
        produces = { "application/json", "application/problem+json" },
        consumes = { "application/json" },
        method = RequestMethod.PUT)
    default ResponseEntity<Object> _updateSigningBasketPsuData(@Parameter(in = ParameterIn.HEADER, description = "ID of the request, unique to the call, as determined by the initiating party." ,required=true,schema=@Schema()) @RequestHeader(value="X-Request-ID", required=true) UUID xRequestID, @Parameter(in = ParameterIn.PATH, description = "This identification of the corresponding signing basket object. ", required=true, schema=@Schema()) @PathVariable("basketId") String basketId, @Parameter(in = ParameterIn.PATH, description = "Resource identification of the related SCA.", required=true, schema=@Schema()) @PathVariable("authorisationId") String authorisationId, @Parameter(in = ParameterIn.HEADER, description = "Is contained if and only if the \"Signature\" element is contained in the header of the request." ,schema=@Schema()) @RequestHeader(value="Digest", required=false) String digest, @Parameter(in = ParameterIn.HEADER, description = "A signature of the request by the TPP on application level. This might be mandated by ASPSP. " ,schema=@Schema()) @RequestHeader(value="Signature", required=false) String signature, @Parameter(in = ParameterIn.HEADER, description = "The certificate used for signing the request, in base64 encoding.  Must be contained if a signature is contained. " ,schema=@Schema()) @RequestHeader(value="TPP-Signature-Certificate", required=false) byte[] tpPSignatureCertificate, @Parameter(in = ParameterIn.HEADER, description = "Client ID of the PSU in the ASPSP client interface.   Might be mandated in the ASPSP's documentation.  It might be contained even if an OAuth2 based authentication was performed in a pre-step or an OAuth2 based SCA was performed in an preceding AIS service in the same session. In this case the ASPSP might check whether PSU-ID and token match,  according to ASPSP documentation. " ,schema=@Schema()) @RequestHeader(value="PSU-ID", required=false) String PSU_ID, @Parameter(in = ParameterIn.HEADER, description = "Type of the PSU-ID, needed in scenarios where PSUs have several PSU-IDs as access possibility.  In this case, the mean and use are then defined in the ASPSP’s documentation. " ,schema=@Schema()) @RequestHeader(value="PSU-ID-Type", required=false) String psUIDType, @Parameter(in = ParameterIn.HEADER, description = "Might be mandated in the ASPSP's documentation. Only used in a corporate context. " ,schema=@Schema()) @RequestHeader(value="PSU-Corporate-ID", required=false) String psUCorporateID, @Parameter(in = ParameterIn.HEADER, description = "Might be mandated in the ASPSP's documentation. Only used in a corporate context. " ,schema=@Schema()) @RequestHeader(value="PSU-Corporate-ID-Type", required=false) String psUCorporateIDType, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Address header field consists of the corresponding http request IP Address field between PSU and TPP. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Address", required=false) String psUIPAddress, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Port header field consists of the corresponding HTTP request IP Port field between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-IP-Port", required=false) String psUIPPort, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept", required=false) String psUAccept, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Charset", required=false) String psUAcceptCharset, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Encoding", required=false) String psUAcceptEncoding, @Parameter(in = ParameterIn.HEADER, description = "The forwarded IP Accept header fields consist of the corresponding HTTP request Accept header fields between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Accept-Language", required=false) String psUAcceptLanguage, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Agent header field of the HTTP request between PSU and TPP, if available. " ,schema=@Schema()) @RequestHeader(value="PSU-User-Agent", required=false) String psUUserAgent, @Parameter(in = ParameterIn.HEADER, description = "HTTP method used at the PSU ? TPP interface, if available. Valid values are: * GET * POST * PUT * PATCH * DELETE " ,schema=@Schema(allowableValues={ "GET", "POST", "PUT", "PATCH", "DELETE" }
    )) @RequestHeader(value="PSU-Http-Method", required=false) String psUHttpMethod, @Parameter(in = ParameterIn.HEADER, description = "UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID needs to be unaltered until removal from device. " ,schema=@Schema()) @RequestHeader(value="PSU-Device-ID", required=false) UUID psUDeviceID, @Parameter(in = ParameterIn.HEADER, description = "The forwarded Geo Location of the corresponding http request between PSU and TPP if available. " ,schema=@Schema()) @RequestHeader(value="PSU-Geo-Location", required=false) String psUGeoLocation, @Parameter(in = ParameterIn.DEFAULT, description = "", schema=@Schema()) @Valid @RequestBody(required = false) Object body) {
        return updateSigningBasketPsuData(xRequestID, basketId, authorisationId, body, digest, signature, tpPSignatureCertificate, PSU_ID, psUIDType, psUCorporateID, psUCorporateIDType, psUIPAddress, psUIPPort, psUAccept, psUAcceptCharset, psUAcceptEncoding, psUAcceptLanguage, psUUserAgent, psUHttpMethod, psUDeviceID, psUGeoLocation);
    }

    // Override this method
    default ResponseEntity<Object> updateSigningBasketPsuData(UUID xRequestID,String basketId,String authorisationId,Object body,String digest,String signature,byte[] tpPSignatureCertificate,String PSU_ID,String psUIDType,String psUCorporateID,String psUCorporateIDType,String psUIPAddress,String psUIPPort,String psUAccept,String psUAcceptCharset,String psUAcceptEncoding,String psUAcceptLanguage,String psUUserAgent,String psUHttpMethod,UUID psUDeviceID,String psUGeoLocation) {
        if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
        } else {
            log.warn("ObjectMapper or HttpServletRequest not configured in default SigningBasketsServiceSbsApi interface so no example is generated");
        }
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }
}
