Advertisement
Guest User

Untitled

a guest
Aug 24th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.List;
  3. import java.util.concurrent.CompletableFuture;
  4. import java.util.stream.Stream;
  5.  
  6. import org.junit.Test;
  7. import org.slf4j.Logger;
  8. import org.springframework.web.client.AsyncRestTemplate;
  9.  
  10. import com.fasterxml.jackson.annotation.JsonUnwrapped;
  11. import lombok.AllArgsConstructor;
  12. import lombok.Builder;
  13. import lombok.Data;
  14. import lombok.Getter;
  15. import lombok.extern.slf4j.Slf4j;
  16.  
  17. @Slf4j
  18. public class LocalTest2 {
  19.  
  20. private Logger log = LOG;
  21.  
  22. AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate();
  23. UserMapper userMapper = new UserMapper();
  24. Connector accountConnector = new Connector();
  25. Connector cardConnector = new Connector();
  26. Connector pointConnector = new Connector();
  27.  
  28. @Test
  29. public void example2() {
  30. UserDetail user = get("user-1");
  31.  
  32. System.out.println(user);
  33. }
  34.  
  35. public UserDetail get(String id) {
  36. // validate();
  37.  
  38. try {
  39. return Stream.of(id)
  40. .map(userMapper::get)
  41. .map(user -> {
  42. final String externalId = user.getId();
  43. final CompletableFuture<Accounts> accountsFuture = accountConnector.getAccounts(externalId);
  44. final CompletableFuture<Cards> cardsFuture = cardConnector.getCards(externalId);
  45. final CompletableFuture<Point> pointFuture = pointConnector.getPoint(externalId);
  46.  
  47. return CompletableFuture.allOf(accountsFuture, cardsFuture, pointFuture)
  48. .thenApply(ignore -> UserDetail.builder()
  49. .user(user)
  50. .accounts(accountsFuture.join())
  51. .cards(cardsFuture.join())
  52. .point(pointFuture.join())
  53. .build())
  54. .exceptionally(err -> {
  55. throw new ConnectorException(err);
  56. });
  57. })
  58. .map(CompletableFuture::join)
  59. .findFirst()
  60. .orElse(null);
  61. } catch (InvalidException | ConnectorException e) {
  62. log.debug(e.getMessage(), e);
  63. throw e;
  64. } catch (Exception e) {
  65. log.error(e.getMessage(), e);
  66. throw e;
  67. }
  68. }
  69. }
  70.  
  71. class Connector {
  72. CompletableFuture<Accounts> getAccounts(String id) {
  73. return CompletableFuture.supplyAsync(() -> {
  74. return new Accounts(Arrays.asList(new Account()));
  75. });
  76. }
  77.  
  78. CompletableFuture<Cards> getCards(String id) {
  79. return CompletableFuture.supplyAsync(() -> {
  80. return new Cards(Arrays.asList(new Card()));
  81. });
  82. }
  83.  
  84. CompletableFuture<Point> getPoint(String id) {
  85. return CompletableFuture.supplyAsync(() -> {
  86. return new Point();
  87. });
  88. }
  89. }
  90.  
  91. class ConnectorException extends RuntimeException {
  92.  
  93. public ConnectorException(Throwable throwable) {
  94. super(throwable);
  95. }
  96.  
  97. }
  98.  
  99. class InvalidException extends RuntimeException {
  100.  
  101. }
  102.  
  103. class UserMapper {
  104. public User get(String id) {
  105. return new User();
  106. }
  107. }
  108.  
  109. @Data
  110. @Builder
  111. class UserDetail {
  112. @JsonUnwrapped
  113. private final User user;
  114. private final Accounts accounts;
  115. private final Cards cards;
  116. private final Point point;
  117. }
  118.  
  119. @Data
  120. class Account {
  121.  
  122. }
  123.  
  124. @Getter
  125. @AllArgsConstructor
  126. class Accounts {
  127. private List<Account> accounts;
  128. }
  129.  
  130. @Data
  131. class Card {
  132.  
  133. }
  134.  
  135. @Getter
  136. @AllArgsConstructor
  137. class Cards {
  138. private List<Card> accounts;
  139. }
  140.  
  141. @Data
  142. class Point {
  143.  
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement