package org.andork.event; import java.util.function.Consumer; public class RootChangeListener<M> implements HierarchicalBasicPropertyChangeListener { Consumer<M> consumer; /** * Creates a {@code RootChangeListener}. * * @param consumer * the {@link Consumer} to which this {@code RootChangeListener} * will pass the root model of any change events it receives. */ public RootChangeListener(Consumer<M> consumer) { super(); this.consumer = consumer; } @Override public void childrenChanged(Object source, ChangeType changeType, Object... children) { consumer.accept(getRootModel(source)); } private M getRootModel(Object source) { if (source instanceof SourcePath) { return getRootModel(((SourcePath) source).parent); } return (M) source; } @Override public void propertyChange(Object source, Object property, Object oldValue, Object newValue, int index) { consumer.accept(getRootModel(source)); } }