package net.droidlabs.mvvm.recyclerview.adapter.binder; public class CompositeItemBinder<T> implements ItemBinder<T> { private final ConditionalDataBinder<T>[] conditionalDataBinders; public CompositeItemBinder(ConditionalDataBinder<T>... conditionalDataBinders) { this.conditionalDataBinders = conditionalDataBinders; } @Override public int getLayoutRes(T model) { for (int i = 0; i < conditionalDataBinders.length; i++) { ConditionalDataBinder<T> dataBinder = conditionalDataBinders[i]; if (dataBinder.canHandle(model)) { return dataBinder.getLayoutRes(model); } } throw new IllegalStateException(); } @Override public int getBindingVariable(T model) { for (int i = 0; i < conditionalDataBinders.length; i++) { ConditionalDataBinder<T> dataBinder = conditionalDataBinders[i]; if (dataBinder.canHandle(model)) { return dataBinder.getBindingVariable(model); } } throw new IllegalStateException(); } }