Skip to content
Snippets Groups Projects
Select Git revision
  • 77bc50b28631418f4641187cefb16f912d690ecb
  • main default protected
  • KOP-3064-Test-Nachrichten-Fuer-Enaio-DMS
  • KOP-3139-ozgcloud-Abhaengigkeit-entfernen
  • OZG-8085-ci-components-poc
  • KOP-3126-Reproduce-Bug
  • 0.2.2
  • 0.2.1
  • 0.2.0
9 results

XtaClientITCase.java

Blame
  • XtaClient.java 3.63 KiB
    package de.ozgcloud.xta.client;
    
    import jakarta.validation.constraints.NotBlank;
    
    import de.ozgcloud.xta.client.config.XtaClientConfig;
    import de.ozgcloud.xta.client.core.WrappedXtaService;
    import de.ozgcloud.xta.client.model.XtaIdentifier;
    import de.ozgcloud.xta.client.model.XtaMessageMetaDataListing;
    import de.ozgcloud.xta.client.model.XtaMessageAndTransportReport;
    import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
    import genv3.de.xoev.transport.xta.x211.PermissionDeniedException;
    import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException;
    import lombok.AccessLevel;
    import lombok.Builder;
    import lombok.Getter;
    import lombok.RequiredArgsConstructor;
    
    @RequiredArgsConstructor(access = AccessLevel.MODULE)
    @Builder(access = AccessLevel.MODULE)
    @Getter(AccessLevel.MODULE)
    public class XtaClient {
    
    	private final WrappedXtaService service;
    	private final XtaClientConfig config;
    
    	/**
    	 * Fetch metadata of pending messages sent to the {@code xtaIdentifier}. The returned listing contains at most
    	 * {@link de.ozgcloud.xta.client.config.XtaClientConfig#getMaxListItems() maxListItems} messages. Use the {@code requestId} to
    	 * {@link #close(String, String) close} pending messages. To fetch the next messages, use {@link #getNextMessagesMetadata(String)}. Note that
    	 * {@code xtaIdentifier} has to be configured as a
    	 * {@link de.ozgcloud.xta.client.config.XtaClientConfig#getClientIdentifiers() clientIdentifiers}.
    	 *
    	 * @param clientIdentifier the client identifier value to fetch messages for
    	 * @return the listing result with metadata of messages
    	 */
    	public XtaMessageMetaDataListing getMessagesMetadata(@NotBlank String clientIdentifier)
    			throws XTAWSTechnicalProblemException, PermissionDeniedException {
    		var identifier = deriveIdentifier(clientIdentifier);
    		service.checkAccountActive(identifier);
    		return getStatusList(identifier);
    	}
    
    	/**
    	 * Fetch metadata of pending messages sent to the {@code xtaIdentifier}. This method skips checks but otherwise behaves exactly as
    	 * {@link #getMessagesMetadata(String)}.
    	 */
    	public XtaMessageMetaDataListing getNextMessagesMetadata(@NotBlank String clientIdentifier)
    			throws XTAWSTechnicalProblemException, PermissionDeniedException {
    		return getStatusList(deriveIdentifier(clientIdentifier));
    	}
    
    	private XtaMessageMetaDataListing getStatusList(XtaIdentifier clientIdentifier) throws XTAWSTechnicalProblemException, PermissionDeniedException {
    		return service.getStatusList(clientIdentifier, config.getMaxListItems());
    	}
    
    	/**
    	 * Fetch the message content, close the message, and then fetch the transport report
    	 * for the given {@code messageId} and reader identifier {@code clientIdentifier}.
    	 * @param clientIdentifier Identifier of the reading client
    	 * @param messageId Identifier of the message to fetch
    	 * @return The message and transport report
    	 */
    	public XtaMessageAndTransportReport getMessage(@NotBlank String clientIdentifier, @NotBlank String messageId)
    			throws XTAWSTechnicalProblemException, PermissionDeniedException, InvalidMessageIDException {
    		var identifier = deriveIdentifier(clientIdentifier);
    
    		var message = service.getMessage(messageId, identifier);
    		service.close(messageId, identifier);
    
    		var transportReport = service.getTransportReport(messageId, identifier);
    		return XtaMessageAndTransportReport.builder()
    				.message(message)
    				.transportReport(transportReport)
    				.build();
    	}
    
    
    	XtaIdentifier deriveIdentifier(String xtaIdentifier) {
    		return config.getClientIdentifiers().stream()
    				.filter(id -> id.value().equals(xtaIdentifier))
    				.findFirst()
    				.orElseThrow(() -> new IllegalArgumentException("Unknown identifier: " + xtaIdentifier));
    	}
    }