package com.spbsu.crawl.bl.crawlSystemView; import com.spbsu.crawl.bl.events.StatusListener; import com.spbsu.crawl.data.impl.PlayerInfoMessage; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * Created by noxoomo on 17/07/16. */ public class StatusView extends Subscribable.Stub<StatusListener> implements Subscribable<StatusListener> { private final Updater updater = new Updater(); private Set<String> currentStatus = new HashSet<>(); public Updater updater() { return updater; } class Updater { void updateStatus(final List<PlayerInfoMessage.PlayerStatus> statuses) { final Set<String> newStatus = statuses.stream().map(PlayerInfoMessage.PlayerStatus::text).collect(Collectors.toSet()); currentStatus.forEach(oldStatus -> { if (!newStatus.contains(oldStatus)) { listeners().forEach(statusListener -> statusListener.removeStatus(oldStatus)); } }); newStatus.forEach(newStatusMessage -> { if (!currentStatus.contains(newStatusMessage)) { listeners().forEach(statusListener -> statusListener.addStatus(newStatusMessage)); } }); currentStatus = newStatus; } } }