// Path: app/src/main/java/com/lucilu/rxdynamicsearch/data/pojo/Ad.java
// @AutoValue
// public abstract class Ad {
// 
//     public abstract String header();
// 
//     public static Ad createAd(@NonNull final String header) {
//         return new AutoValue_Ad(header);
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/data/pojo/Country.java
// public final class Country {
// 
//     @NonNull
//     @SerializedName("name")
//     private final String mName;
// 
//     @NonNull
//     @SerializedName("capital")
//     private final String mCapital;
// 
//     @NonNull
//     @SerializedName("region")
//     private final String mRegion;
// 
//     public Country(@NonNull final String name,
//                    @NonNull final String capital,
//                    @NonNull final String region) {
//         mName = get(name);
//         mCapital = get(capital);
//         mRegion = get(region);
//     }
// 
//     @NonNull
//     public String getName() {
//         return mName;
//     }
// 
//     @NonNull
//     public String getCapital() {
//         return mCapital;
//     }
// 
//     @NonNull
//     public String getRegion() {
//         return mRegion;
//     }
// 
//     @Override
//     public boolean equals(final Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         final Country country = (Country) o;
// 
//         if (!mName.equals(country.mName)) {
//             return false;
//         }
//         if (!mCapital.equals(country.mCapital)) {
//             return false;
//         }
//         return mRegion.equals(country.mRegion);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = mName.hashCode();
//         result = 31 * result + mCapital.hashCode();
//         result = 31 * result + mRegion.hashCode();
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "Country{" +
//                "mName='" + mName + '\'' +
//                ", mCapital='" + mCapital + '\'' +
//                ", mRegion='" + mRegion + '\'' +
//                '}';
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/base/IViewHolderBinder.java
// public interface IViewHolderBinder<T> {
// 
//     /**
//      * Populates the passed {@link ViewHolder} with the details of the passed model.
//      */
//     void bind(@NonNull final ViewHolder viewHolder, @NonNull final T model);
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/viewholder/AdViewHolder.java
// public class AdViewHolder extends SimpleViewHolder<Ad> {
// 
//     @NonNull
//     private final TextView headerTextView;
// 
//     public AdViewHolder(final View itemView) {
//         super(itemView);
// 
//         headerTextView = ViewUtils.find(itemView, R.id.item_textView_header);
//     }
// 
//     @Override
//     public void bind(@NonNull final Ad model) {
//         headerTextView.setText(model.header());
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/viewholder/CountryViewHolder.java
// public final class CountryViewHolder extends SimpleViewHolder<Country> {
// 
//     @NonNull
//     private final TextView mCountryName;
// 
//     @NonNull
//     private final TextView mCapital;
// 
//     public CountryViewHolder(@NonNull final View itemView) {
//         super(itemView);
// 
//         mCountryName = ViewUtils.find(itemView, R.id.item_textView_country);
//         mCapital = ViewUtils.find(itemView, R.id.item_textView_capital);
//     }
// 
//     @Override
//     public void bind(@NonNull final Country model) {
//         populateWith(model);
//     }
// 
//     private void populateWith(@NonNull final Country country) {
//         mCountryName.setText(country.getName());
//         mCapital.setText(country.getCapital());
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/viewmodel/pojo/DisplayableItem.java
// @AutoValue
// public abstract class DisplayableItem<T> {
// 
//     public abstract int type();
// 
//     @NonNull
//     public abstract T model();
// 
//     @SuppressWarnings("NullableProblems")
//     @AutoValue.Builder
//     public abstract static class Builder<T> {
// 
//         @NonNull
//         public abstract Builder<T> type(@NonNull int type);
// 
//         @NonNull
//         public abstract Builder<T> model(@NonNull T model);
// 
//         @NonNull
//         public abstract DisplayableItem<T> build();
//     }
// 
//     @NonNull
//     public static <T> Builder<T> builder() {
//         return new AutoValue_DisplayableItem.Builder<>();
//     }
// }


import com.lucilu.rxdynamicsearch.data.pojo.Ad;
import com.lucilu.rxdynamicsearch.data.pojo.Country;
import com.lucilu.rxdynamicsearch.ui.adapter.base.IViewHolderBinder;
import com.lucilu.rxdynamicsearch.ui.adapter.viewholder.AdViewHolder;
import com.lucilu.rxdynamicsearch.ui.adapter.viewholder.CountryViewHolder;
import com.lucilu.rxdynamicsearch.viewmodel.pojo.DisplayableItem;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView.ViewHolder;
import static com.lucilu.rxdynamicsearch.Constants.ListItem.AD;
import static com.lucilu.rxdynamicsearch.Constants.ListItem.COUNTRY;
package com.lucilu.rxdynamicsearch.ui.adapter;




public final class CountryListViewHolderBinder implements IViewHolderBinder<DisplayableItem> {

    public CountryListViewHolderBinder() {
    }

    @Override
    public void bind(@NonNull final ViewHolder viewHolder,
                     @NonNull final DisplayableItem displayableItem) {
        switch (displayableItem.type()) {
            case COUNTRY:
                CountryViewHolder countryViewHolder = CountryViewHolder.class.cast(viewHolder);
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/data/pojo/Ad.java
// @AutoValue
// public abstract class Ad {
// 
//     public abstract String header();
// 
//     public static Ad createAd(@NonNull final String header) {
//         return new AutoValue_Ad(header);
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/data/pojo/Country.java
// public final class Country {
// 
//     @NonNull
//     @SerializedName("name")
//     private final String mName;
// 
//     @NonNull
//     @SerializedName("capital")
//     private final String mCapital;
// 
//     @NonNull
//     @SerializedName("region")
//     private final String mRegion;
// 
//     public Country(@NonNull final String name,
//                    @NonNull final String capital,
//                    @NonNull final String region) {
//         mName = get(name);
//         mCapital = get(capital);
//         mRegion = get(region);
//     }
// 
//     @NonNull
//     public String getName() {
//         return mName;
//     }
// 
//     @NonNull
//     public String getCapital() {
//         return mCapital;
//     }
// 
//     @NonNull
//     public String getRegion() {
//         return mRegion;
//     }
// 
//     @Override
//     public boolean equals(final Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
// 
//         final Country country = (Country) o;
// 
//         if (!mName.equals(country.mName)) {
//             return false;
//         }
//         if (!mCapital.equals(country.mCapital)) {
//             return false;
//         }
//         return mRegion.equals(country.mRegion);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = mName.hashCode();
//         result = 31 * result + mCapital.hashCode();
//         result = 31 * result + mRegion.hashCode();
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "Country{" +
//                "mName='" + mName + '\'' +
//                ", mCapital='" + mCapital + '\'' +
//                ", mRegion='" + mRegion + '\'' +
//                '}';
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/base/IViewHolderBinder.java
// public interface IViewHolderBinder<T> {
// 
//     /**
//      * Populates the passed {@link ViewHolder} with the details of the passed model.
//      */
//     void bind(@NonNull final ViewHolder viewHolder, @NonNull final T model);
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/viewholder/AdViewHolder.java
// public class AdViewHolder extends SimpleViewHolder<Ad> {
// 
//     @NonNull
//     private final TextView headerTextView;
// 
//     public AdViewHolder(final View itemView) {
//         super(itemView);
// 
//         headerTextView = ViewUtils.find(itemView, R.id.item_textView_header);
//     }
// 
//     @Override
//     public void bind(@NonNull final Ad model) {
//         headerTextView.setText(model.header());
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/viewholder/CountryViewHolder.java
// public final class CountryViewHolder extends SimpleViewHolder<Country> {
// 
//     @NonNull
//     private final TextView mCountryName;
// 
//     @NonNull
//     private final TextView mCapital;
// 
//     public CountryViewHolder(@NonNull final View itemView) {
//         super(itemView);
// 
//         mCountryName = ViewUtils.find(itemView, R.id.item_textView_country);
//         mCapital = ViewUtils.find(itemView, R.id.item_textView_capital);
//     }
// 
//     @Override
//     public void bind(@NonNull final Country model) {
//         populateWith(model);
//     }
// 
//     private void populateWith(@NonNull final Country country) {
//         mCountryName.setText(country.getName());
//         mCapital.setText(country.getCapital());
//     }
// }
// 
// Path: app/src/main/java/com/lucilu/rxdynamicsearch/viewmodel/pojo/DisplayableItem.java
// @AutoValue
// public abstract class DisplayableItem<T> {
// 
//     public abstract int type();
// 
//     @NonNull
//     public abstract T model();
// 
//     @SuppressWarnings("NullableProblems")
//     @AutoValue.Builder
//     public abstract static class Builder<T> {
// 
//         @NonNull
//         public abstract Builder<T> type(@NonNull int type);
// 
//         @NonNull
//         public abstract Builder<T> model(@NonNull T model);
// 
//         @NonNull
//         public abstract DisplayableItem<T> build();
//     }
// 
//     @NonNull
//     public static <T> Builder<T> builder() {
//         return new AutoValue_DisplayableItem.Builder<>();
//     }
// }


// Path: app/src/main/java/com/lucilu/rxdynamicsearch/ui/adapter/CountryListViewHolderBinder.java
import com.lucilu.rxdynamicsearch.data.pojo.Ad;
import com.lucilu.rxdynamicsearch.data.pojo.Country;
import com.lucilu.rxdynamicsearch.ui.adapter.base.IViewHolderBinder;
import com.lucilu.rxdynamicsearch.ui.adapter.viewholder.AdViewHolder;
import com.lucilu.rxdynamicsearch.ui.adapter.viewholder.CountryViewHolder;
import com.lucilu.rxdynamicsearch.viewmodel.pojo.DisplayableItem;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView.ViewHolder;
import static com.lucilu.rxdynamicsearch.Constants.ListItem.AD;
import static com.lucilu.rxdynamicsearch.Constants.ListItem.COUNTRY;

package com.lucilu.rxdynamicsearch.ui.adapter;




public final class CountryListViewHolderBinder implements IViewHolderBinder<DisplayableItem> {

    public CountryListViewHolderBinder() {
    }

    @Override
    public void bind(@NonNull final ViewHolder viewHolder,
                     @NonNull final DisplayableItem displayableItem) {
        switch (displayableItem.type()) {
            case COUNTRY:
                CountryViewHolder countryViewHolder = CountryViewHolder.class.cast(viewHolder);
                Country country = Country.class.cast(displayableItem.model());