package de.onehundretthings.android.ui.base.view.adapter;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

/**
 * @author Michael Ruf
 * @since 2015-08-08
 */
public abstract class HolderPagerAdapter<ItemType> extends ArrayAdapter<ItemType> {

    private static final String TAG = "HolderPagerAdapter";

    private int itemLayoutRes;

    public HolderPagerAdapter(Context context, int itemLayoutRes) {
        super(context, 0);
        this.itemLayoutRes = itemLayoutRes;
    }

    @SuppressWarnings("unchecked")
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder<ItemType> holder = null;

        if (convertView != null && convertView.getTag() instanceof ViewHolder) {
            try {
                holder = (ViewHolder<ItemType>) convertView.getTag();
            } catch (ClassCastException e) {
                Log.e(TAG, Log.getStackTraceString(e));
            }
        }

        if (holder == null) {
            convertView = LayoutInflater.from(getContext())
                    .inflate(getItemLayoutRes(position), parent, false);
            holder = constructHolder(convertView);
        }

        holder.apply(getItem(position), position);
        return convertView;
    }

    @SuppressWarnings("UnusedParameters")
    protected int getItemLayoutRes(int position) {
        return itemLayoutRes;
    }

    protected abstract ViewHolder<ItemType> constructHolder(View view);

    public interface ViewHolder<ItemType> {

        void apply(ItemType item, int position);
    }
}
@@ -50,19 +50,17 @@
 adapter;
-%0D%0A%0D
+%0A
 %0Aimport 
@@ -83,17 +83,16 @@
 Context;
-%0D
 %0Aimport 
@@ -108,17 +108,16 @@
 til.Log;
-%0D
 %0Aimport 
@@ -144,17 +144,16 @@
 nflater;
-%0D
 %0Aimport 
@@ -170,17 +170,16 @@
 ew.View;
-%0D
 %0Aimport 
@@ -201,17 +201,16 @@
 ewGroup;
-%0D
 %0Aimport 
@@ -241,16 +241,13 @@
 ter;
-%0D%0A%0D
+%0A
 %0A/**
-%0D
 %0A * 
@@ -265,17 +265,16 @@
 hael Ruf
-%0D
 %0A * @sin
@@ -290,14 +290,12 @@
 8-08
-%0D
 %0A */
-%0D
 %0Apub
@@ -370,27 +370,25 @@
 %3CItemType%3E %7B
-%0D%0A%0D
+%0A
 %0A    private
@@ -435,19 +435,17 @@
 dapter%22;
-%0D%0A%0D
+%0A
 %0A    pri
@@ -467,19 +467,17 @@
 youtRes;
-%0D%0A%0D
+%0A
 %0A    pub
@@ -536,17 +536,16 @@
 utRes) %7B
-%0D
 %0A       
@@ -563,17 +563,16 @@
 ext, 0);
-%0D
 %0A       
@@ -603,34 +603,31 @@
 emLayoutRes;
-%0D
 %0A    %7D
-%0D%0A%0D
+%0A
 %0A    @Suppre
@@ -649,17 +649,16 @@
 hecked%22)
-%0D
 %0A    @Ov
@@ -663,17 +663,16 @@
 Override
-%0D
 %0A    pub
@@ -739,17 +739,16 @@
 arent) %7B
-%0D
 %0A       
@@ -783,19 +783,17 @@
  = null;
-%0D%0A%0D
+%0A
 %0A       
@@ -865,17 +865,16 @@
 older) %7B
-%0D
 %0A       
@@ -883,17 +883,16 @@
    try %7B
-%0D
 %0A       
@@ -953,17 +953,16 @@
 etTag();
-%0D
 %0A       
@@ -998,17 +998,16 @@
 ion e) %7B
-%0D
 %0A       
@@ -1054,17 +1054,16 @@
 ing(e));
-%0D
 %0A       
@@ -1068,17 +1068,16 @@
        %7D
-%0D
 %0A       
@@ -1070,35 +1070,33 @@
      %7D%0A        %7D
-%0D%0A%0D
+%0A
 %0A        if (hol
@@ -1109,17 +1109,16 @@
  null) %7B
-%0D
 %0A       
@@ -1169,17 +1169,16 @@
 ntext())
-%0D
 %0A       
@@ -1242,17 +1242,16 @@
  false);
-%0D
 %0A       
@@ -1293,17 +1293,16 @@
 rtView);
-%0D
 %0A       
@@ -1299,27 +1299,25 @@
 );%0A        %7D
-%0D%0A%0D
+%0A
 %0A        hol
@@ -1351,25 +1351,24 @@
 , position);
-%0D
 %0A        ret
@@ -1383,26 +1383,23 @@
 ertView;
-%0D
 %0A    %7D
-%0D%0A%0D
+%0A
 %0A    @Su
@@ -1432,17 +1432,16 @@
 meters%22)
-%0D
 %0A    pro
@@ -1483,17 +1483,16 @@
 ition) %7B
-%0D
 %0A       
@@ -1517,18 +1517,15 @@
 Res;
-%0D
 %0A    %7D
-%0D%0A%0D
+%0A
 %0A   
@@ -1592,19 +1592,17 @@
 w view);
-%0D%0A%0D
+%0A
 %0A    pub
@@ -1641,11 +1641,9 @@
 e%3E %7B
-%0D%0A%0D
+%0A
 %0A   
@@ -1691,14 +1691,12 @@
 on);
-%0D
 %0A    %7D
-%0D
 %0A%7D

Change package; set line ending to LF