Advertisement
daimonkor

Untitled

Feb 20th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.52 KB | None | 0 0
  1. onnectableObservable<Wrapper<List<Object[]>>> connectable = NetworkManager.getOpenHABService().getFloorPlan1()
  2.                 .subscribeOn(Schedulers.io())
  3.                 .flatMap(plan -> Observable.fromArray(plan))
  4.                 .flatMap(planItem -> NetworkManager.getOpenHABService().getFloor(planItem.getId()).subscribeOn(Schedulers.computation()))
  5.                 .flatMap(floor -> {
  6.                     List<Observable<?>> list = new ArrayList<>();
  7.                     list.add(Observable.just(floor));
  8.                     if (floor.getHotspots() != null) {
  9.                         for (Hotspot hotspot : floor.getHotspots()) {
  10.                             list.add(NetworkManager.getOpenHABService().getItem(hotspot.getItemId()).subscribeOn(Schedulers.computation()));
  11.                         }
  12.                     }
  13.                     return Observable.zip(list, (sensors) -> sensors);
  14.                 })
  15.                 .toList()
  16.                 .toObservable()
  17.                 .map(sensors -> Wrapper.response(sensors))
  18.                 .observeOn(mainThread())
  19.                 .retry(2)
  20.                 .onErrorResumeNext(throwable -> {
  21.                     LogManager.LogEA(throwable);
  22.                     // If the server is unreachable, let the subscriber know.
  23.                     // The user may be able to do something about his connection.
  24.                     if (throwable instanceof UnknownHostException || throwable instanceof Throwable) {
  25.                         // Recoverable error - transmit error without breaking.
  26.                         return Observable.just(Wrapper.error(throwable));
  27.                     }
  28.                     // In case of an unrecoverable error, let it end.
  29.                     return Observable.error(throwable);
  30.                 })
  31.                 .repeatWhen(observable ->
  32.                         Observable.interval(10, TimeUnit.SECONDS)
  33.                                 .mergeWith(hook).takeWhile(e -> longPooling)
  34.                 )
  35.                 .replay(1);
  36.        
  37.         connectable.connect();
  38.         connectable.subscribe(e ->{
  39.             Map<Integer, Pair<OpenHABFloor, List<OpenHABItem>>> data = new HashMap<>();
  40.             int floorId = -1;
  41.             for(Object floor: e.response) {
  42.                 for (Object item : (Object[])floor) {
  43.                     if (item instanceof OpenHABFloor) {
  44.                         data.put(((OpenHABFloor) item).getId(), new Pair((OpenHABFloor) item, new ArrayList<OpenHABItem>()));
  45.                         floorId = ((OpenHABFloor) item).getId();
  46.                     } else if (item instanceof OpenHABItem) {
  47.                         Pair<OpenHABFloor, List<OpenHABItem>> pair = data.get(floorId);
  48.                         OpenHABItem currentItem = (OpenHABItem) item;
  49.                         if (currentItem.getName().contains("binary")) {
  50.                             currentItem.setItemType(OpenHABItem.ItemType.SENSOR);
  51.                         } else if (currentItem.getName().contains("temperature")) {
  52.                             currentItem.setItemType(OpenHABItem.ItemType.TEMPERATURE);
  53.                         } else if (currentItem.getName().contains("thermostat")) {
  54.                             currentItem.setItemType(OpenHABItem.ItemType.TERMOSTAT);
  55.                         }
  56.                         pair.second.add(currentItem);
  57.                     } else {
  58.                         LogManager.LogEA("invalid type", item);
  59.                     }
  60.                 }
  61.             }
  62.             LogManager.LogEA(data);
  63.         });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement