Advertisement
Guest User

Untitled

a guest
Jul 7th, 2015
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.65 KB | None | 0 0
  1. package fr.norsys.api.ws.controller;
  2.  
  3. import fr.norsys.api.ws.dto.CompteursDto;
  4. import fr.norsys.api.ws.dto.DtoWithErrors;
  5. import fr.norsys.api.ws.extern.CongePayeService;
  6. import fr.norsys.api.ws.extern.RttService;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.javatuples.Pair;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.http.MediaType;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RestController;
  13. import org.springframework.web.context.request.async.DeferredResult;
  14. import rx.Observable;
  15.  
  16. import java.util.Arrays;
  17. import java.util.List;
  18. import java.util.function.Consumer;
  19.  
  20. @Slf4j
  21. @RestController
  22. @RequestMapping("/conges")
  23. public class CongesController {
  24.  
  25.     @Autowired
  26.     private CongePayeService congePayeService;
  27.  
  28.     @Autowired
  29.     private RttService rttService;
  30.  
  31.     @RequestMapping(value = "/compteurs", produces = MediaType.APPLICATION_JSON_VALUE)
  32.     public DeferredResult<CompteursDto> getTousLesCompteurs() {
  33.         log.info("Récupération des compteurs");
  34.  
  35.         CompteursDto compteursDto = new CompteursDto();
  36.  
  37.         return call(compteursDto,
  38.                 Arrays.asList(rttService.getCompteur(), congePayeService.getCompteur()),
  39.                 Arrays.<Consumer<Integer>>asList(compteursDto::setRtt, compteursDto::setCp));
  40.     }
  41.  
  42.     private <T> Observable<T> wrapObservable(Observable<T> observable, DtoWithErrors dto) {
  43.         return observable.onErrorResumeNext(throwable -> {
  44.             dto.getErrors().add(throwable.getMessage());
  45.             log.error("Error", throwable);
  46.             return Observable.just(null);
  47.         });
  48.     }
  49.  
  50.     private <T extends DtoWithErrors> DeferredResult<T> call(T dto, List<Observable<Integer>> observables, List<Consumer<Integer>> setters) {
  51.         DeferredResult<T> result = new DeferredResult<>();
  52.         Observable<Integer> concat = Observable.concat(Observable.from(observables.stream().map(o -> wrapObservable(o, dto)).collect(Collectors.toList())));
  53.         Observable<Pair<Integer, Consumer<Integer>>> observable = Observable.zip(concat, Observable.from(setters), (value, setter) -> new Pair<>(value, setter));
  54.         observable.subscribe(
  55.                 valueAndFunction -> valueAndFunction.getValue1().accept(valueAndFunction.getValue0()),
  56.                 e -> {
  57.                     log.error("Observable error", e);
  58.                     result.setErrorResult(e);
  59.                 },
  60.                 () -> {
  61.                     log.debug("Observable finished");
  62.                     result.setResult(dto);
  63.                 });
  64.         return result;
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement