package ctbrec.ui.menu; import lombok.extern.slf4j.Slf4j; import java.util.List; import ctbrec.Model; import ctbrec.recorder.Recorder; import ctbrec.ui.action.AbstractModelAction.Result; import ctbrec.ui.action.FollowAction; import ctbrec.ui.action.TriConsumer; import ctbrec.ui.action.UnfollowAction; import javafx.scene.Node; @Slf4j public class FollowUnfollowHandler { private Node source; private Recorder recorder; private TriConsumer callback; public FollowUnfollowHandler(Node source, Recorder recorder, TriConsumer callback) { this.source = source; this.recorder = recorder; this.callback = callback; } protected void follow(List selectedModels) { new FollowAction(source, selectedModels, recorder).execute().thenAccept(r -> { r.stream().filter(rs -> rs.getThrowable() == null).map(Result::getModel).forEach(m -> callback.accept(m, true, true)); r.stream().filter(rs -> rs.getThrowable() != null).map(Result::getModel).forEach(m -> callback.accept(m, true, false)); }).exceptionally(ex -> { log.error("Couldn't follow model", ex); return null; }); } protected void unfollow(List selectedModels) { new UnfollowAction(source, selectedModels, recorder).execute().thenAccept(r -> { r.stream().filter(rs -> rs.getThrowable() == null).map(Result::getModel).forEach(m -> callback.accept(m, false, true)); r.stream().filter(rs -> rs.getThrowable() != null).map(Result::getModel).forEach(m -> callback.accept(m, false, false)); }).exceptionally(ex -> { log.error("Couldn't unfollow model", ex); return null; }); } }