package io.pivotal.arca.adapters; import android.database.Cursor; import android.util.SparseArray; import java.util.ArrayList; import java.util.Collection; import java.util.List; class BindingHelper { private final BindingTypes mBindingTypes = new BindingTypes(); private final Collection<Binding> mBindings; public BindingHelper(final Collection<Binding> bindings) { mBindings = bindings; } public List<Binding> getBindings(final int type, final Cursor cursor) { final List<Binding> bindings = mBindingTypes.get(type); if (bindings == null) { return setupBindingsOfType(type, cursor); } else { return bindings; } } private List<Binding> setupBindingsOfType(final int type, final Cursor cursor) { if (mBindings != null) { findBindingsOfType(type, cursor); } return getNonNullBindingsOfType(type); } private void findBindingsOfType(final int type, final Cursor cursor) { for (final Binding binding : mBindings) { if (binding.isType(type)) { binding.findColumnIndex(cursor); mBindingTypes.add(binding); } } } private List<Binding> getNonNullBindingsOfType(final int type) { final List<Binding> bindings = mBindingTypes.get(type); if (bindings == null) { return new ArrayList<Binding>(); } else { return bindings; } } private static final class BindingTypes extends SparseArray<List<Binding>> { public void add(final Binding binding) { final int type = binding.getType(); if (get(type) == null) { put(type, new ArrayList<Binding>()); } get(type).add(binding); } } }