Select Git revision
XtaClientITCase.java
-
Jan Zickermann authoredJan Zickermann authored
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));
}
}