diff --git a/src/main/java/com/uci/adapter/app/config/AppConfiguration1.java b/src/main/java/com/uci/adapter/app/config/AppConfiguration1.java index 53ad805..442937c 100644 --- a/src/main/java/com/uci/adapter/app/config/AppConfiguration1.java +++ b/src/main/java/com/uci/adapter/app/config/AppConfiguration1.java @@ -1,9 +1,14 @@ package com.uci.adapter.app.config; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; import com.uci.utils.BotService; import com.uci.utils.CampaignService; import io.fusionauth.client.FusionAuthClient; + +import java.time.Duration; + import org.apache.http.auth.AuthScope; import org.apache.http.auth.Credentials; import org.apache.http.auth.UsernamePasswordCredentials; @@ -11,10 +16,13 @@ import org.apache.http.client.HttpClient; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.HttpClients; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.cache.CacheManager; +import org.springframework.cache.caffeine.CaffeineCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; @@ -67,6 +75,9 @@ public RestTemplate getJSONRestTemplate() { @Value("${fusionauth.key}") public String FUSIONAUTH_KEY; + + @Autowired + public Cache cache; @Bean public FusionAuthClient getFAClient() { @@ -75,10 +86,10 @@ public FusionAuthClient getFAClient() { @Bean public BotService getBotService() { - - WebClient webClient = WebClient.builder() + WebClient webClient = WebClient.builder() .baseUrl(CAMPAIGN_URL) .build(); - return new BotService(webClient, getFAClient()); + + return new BotService(webClient, getFAClient(), cache); } } diff --git a/src/main/java/com/uci/adapter/sunbird/web/SunbirdWebPortalAdapter.java b/src/main/java/com/uci/adapter/sunbird/web/SunbirdWebPortalAdapter.java index 06c5200..1061552 100644 --- a/src/main/java/com/uci/adapter/sunbird/web/SunbirdWebPortalAdapter.java +++ b/src/main/java/com/uci/adapter/sunbird/web/SunbirdWebPortalAdapter.java @@ -23,6 +23,7 @@ import java.sql.Timestamp; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.function.Function; @Slf4j @@ -50,6 +51,11 @@ public Mono convertMessageToXMsg(Object message) throws JAXBException, XMessage.MessageType messageType= XMessage.MessageType.TEXT; //Todo: How to get Button choices from normal text from.setUserID(webMessage.getFrom()); + + /* To use later in outbound reply message's message id & to */ + messageIdentifier.setChannelMessageId(webMessage.getMessageId()); + messageIdentifier.setReplyId(webMessage.getTo()); + XMessage x = XMessage.builder() .to(to) .from(from) @@ -68,6 +74,7 @@ public Mono convertMessageToXMsg(Object message) throws JAXBException, public Mono processOutBoundMessageF(XMessage xMsg) throws Exception { log.info("Sending message to transport socket :: " + xMsg.toXML()); OutboundMessage outboundMessage = getOutboundMessage(xMsg); + log.info("Sending final xmessage to transport socket :: " + xMsg.toXML()); // String url = PropertiesCache.getInstance().getProperty("SUNBIRD_OUTBOUND"); String url = "http://transport-socket.ngrok.samagra.io/botMsg/adapterOutbound"; return SunbirdWebService.getInstance(). @@ -113,10 +120,50 @@ public XMessage callOutBoundAPI(XMessage xMsg) throws Exception{ // return sc; // } - private OutboundMessage getOutboundMessage(XMessage xMsg) { - SunbirdMessage sunbirdMessage = SunbirdMessage.builder().title( - xMsg.getPayload().getText() + renderMessageChoices(xMsg.getPayload().getButtonChoices())).choices(xMsg.getPayload().getButtonChoices()).build(); - return OutboundMessage.builder().message(sunbirdMessage).build(); + private OutboundMessage getOutboundMessage(XMessage xMsg) throws JAXBException { + SunbirdMessage sunbirdMessage = SunbirdMessage.builder() + .title(getTextMessage(xMsg)) + .choices(this.getButtonChoices(xMsg)) + .build(); + return OutboundMessage.builder() + .message(sunbirdMessage) + .to(xMsg.getMessageId().getReplyId()) + .messageId(xMsg.getMessageId().getChannelMessageId()) + .build(); + } + + /** + * Get Simplified Text Message + * @param xMsg + * @return String + */ + private String getTextMessage(XMessage xMsg) { + XMessagePayload payload = xMsg.getPayload(); + String text = payload.getText().replace("__", ""); + text = text.replace("\n\n", ""); + payload.setText(text); + return text; + } + + /** + * Get Button Choices with calculated keys + * @param xMsg + * @return ArrayList of ButtonChoices + */ + private ArrayList getButtonChoices(XMessage xMsg) { + ArrayList choices = xMsg.getPayload().getButtonChoices(); + if(choices != null) { + choices.forEach(c -> { + String[] a = c.getText().split(" "); + if(a[0] != null && !a[0].isEmpty()) { + String key = a[0].toString(); + + c.setKey(key); + c.setText(c.getText().replaceFirst(key, "").trim()); + } + }); + } + return choices; } private String renderMessageChoices(ArrayList buttonChoices) { diff --git a/src/main/java/com/uci/adapter/sunbird/web/outbound/OutboundMessage.java b/src/main/java/com/uci/adapter/sunbird/web/outbound/OutboundMessage.java index 6d03e0b..fd2b75f 100644 --- a/src/main/java/com/uci/adapter/sunbird/web/outbound/OutboundMessage.java +++ b/src/main/java/com/uci/adapter/sunbird/web/outbound/OutboundMessage.java @@ -9,4 +9,6 @@ @Builder public class OutboundMessage { private SunbirdMessage message; + private String to; + private String messageId; } \ No newline at end of file