package eu.eudat.repository; import eu.eudat.file.transformer.interfaces.FileTransformerClient; import eu.eudat.file.transformer.interfaces.FileTransformerConfiguration; import eu.eudat.file.transformer.models.description.DescriptionFileTransformerModel; import eu.eudat.file.transformer.models.dmp.DmpFileTransformerModel; import eu.eudat.file.transformer.models.misc.FileEnvelope; import org.springframework.core.ParameterizedTypeReference; import org.springframework.web.reactive.function.client.WebClient; import javax.management.InvalidApplicationException; import java.io.IOException; public class TransformerRepository implements FileTransformerClient { private final WebClient transformerClient; public TransformerRepository(WebClient transformerClient) { this.transformerClient = transformerClient; } @Override public FileEnvelope exportDmp(DmpFileTransformerModel dmpFileTransformerModel) throws InvalidApplicationException, IOException { return transformerClient.post().uri("/export/dmp").bodyValue(dmpFileTransformerModel).exchangeToMono(mono -> mono.bodyToMono(FileEnvelope.class)).block(); } @Override public DmpFileTransformerModel importDmp(FileEnvelope fileEnvelope) { return transformerClient.post().uri("/import/dmp").bodyValue(fileEnvelope).exchangeToMono(mono -> mono.bodyToMono(DmpFileTransformerModel.class)).block(); } @Override public FileEnvelope exportDescription(DescriptionFileTransformerModel descriptionFileTransformerModel, String format) { return transformerClient.post().uri("/export/description", uriBuilder -> uriBuilder.queryParam("format", format).build()).bodyValue(descriptionFileTransformerModel).exchangeToMono(mono -> mono.bodyToMono(FileEnvelope.class)).block(); } @Override public DescriptionFileTransformerModel importDescription(FileEnvelope fileEnvelope) { return transformerClient.post().uri("/import/description").bodyValue(fileEnvelope).exchangeToMono(mono -> mono.bodyToMono(DescriptionFileTransformerModel.class)).block(); } @Override public FileTransformerConfiguration getConfiguration() { return transformerClient.get().uri("/formats").exchangeToMono(mono -> mono.bodyToMono(new ParameterizedTypeReference() {})).block(); } }