Добавлю. Может кому-то пригодится. В итоге сделал как-то так:
public class MyBrowseOptions implements ScreenOptions {
private Function<LoadContext<User>, List<User>> loadDelegate;
public Function<LoadContext<User>, List<User>> getLoadDelegate() {
return loadDelegate;
}
public void setLoadDelegate(Function<LoadContext<User>, List<User>> loadDelegate) {
this.loadDelegate = loadDelegate;
}
public MyBrowseOptions withLoadDelegate(final Function<LoadContext<User>, List<User>> loadDelegate) {
setLoadDelegate(loadDelegate);
return this;
}
}
Передаю в экран так:
screenBuilders.lookup(User.class, this)
.withOpenMode(OpenMode.DIALOG)
.withOptions(new MyBrowseOptions()
.withLoadDelegate(loadContext -> getUsers())
.show();
Соответственно в экране обрабатываю.
Юрий, как вы считаете, не будет ли лучше, если билдер будет принимать не один класс реализующий ScreenOptions
, а коллекцию? Сейчас получается, что для каждого экрана фактически нужно создавать свой класс опций. В случае же использовании коллекции можно будет фактически использовать ScreenOptions
с одной единственной опцией (поделить функционально) и комбинировать их для разных экранов.