package com.freelib.multiitem.adapter;
import android.support.annotation.NonNull;
import android.view.ViewGroup;
import com.freelib.multiitem.adapter.holder.BaseViewHolder;
import com.freelib.multiitem.adapter.holder.InputHolderManager;
import com.freelib.multiitem.item.HiddenItemInput;
import com.freelib.multiitem.item.ItemInput;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by free46000 on 2017/4/11.
*/
public class InputItemAdapter extends BaseItemAdapter {
protected List<InputHolderManager> inputHolderManagers = new ArrayList<>();
protected List<HiddenItemInput> hiddenItemInputs = new ArrayList<>();
/**
* 添加隐藏域的Item,本Item用户不可见,{@link #getInputValueMap}时返回{key:value}
*
* @param key String
* @param value Object
* @see #addHiddenItem(HiddenItemInput...)
*/
public void addHiddenItem(@NonNull String key, Object value) {
addHiddenItem(new HiddenItemInput(key, value));
}
/**
* 添加隐藏域的Item,本Item用户不可见,{@link #getInputValueMap}时返回{key:value}
*
* @param hiddenItems String
*/
public void addHiddenItem(@NonNull HiddenItemInput... hiddenItems) {
if (hiddenItems.length == 0) {
return;
}
hiddenItemInputs.addAll(Arrays.asList(hiddenItems));
}
// public boolean isValueValidate()
/**
* 获取所有Input Item和隐藏域的表单内容并组装
*
* @return 表单内容json
* @see #getInputValueMap()
* @see InputHolderManager#getValueMap()
*/
public JSONObject getInputJson() {
return new JSONObject(getInputValueMap());
}
/**
* 获取所有Input Item和隐藏域的表单内容并组装
*
* @return 表单内容Map
* @see #getInputValueMap()
* @see InputHolderManager#getValueMap()
*/
public Map<String, Object> getInputValueMap() {
Map<String, Object> valueMap = new HashMap<>();
Map<String, Object> itemValueMap;
for (InputHolderManager inputHolderManager : inputHolderManagers) {
itemValueMap = inputHolderManager.getValueMap();
if (itemValueMap != null) {
valueMap.putAll(itemValueMap);
}
}
for (HiddenItemInput hiddenItem : hiddenItemInputs) {
valueMap.putAll(hiddenItem.getValueMap());
}
return valueMap;
}
@Override
public void clearData() {
super.clearData();
inputHolderManagers.clear();
}
@Override
protected void setItem(@NonNull List<? extends Object> dataItems) {
super.setItem(dataItems);
inputHolderManagers.clear();
fillInputHolderManagers(0, dataItems);
}
@Override
protected void addItem(int position, @NonNull List<? extends Object> items) {
super.addItem(position, items);
fillInputHolderManagers(position, items);
}
/**
* 查找ItemInput并填充InputHolderManager集合
*
* @param position int
* @param items add和set的数据源
*/
protected void fillInputHolderManagers(int position, @NonNull List<? extends Object> items) {
for (Object item : items) {
if (item instanceof ItemInput) {
inputHolderManagers.add(position++, ((ItemInput) item).getViewHolderManager());
}
}
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
BaseViewHolder viewHolder = super.onCreateViewHolder(parent, viewType);
if (viewHolder.viewHolderManager instanceof InputHolderManager) {
inputHolderManagers.add((InputHolderManager) viewHolder.viewHolderManager);
}
return viewHolder;
}
/**
* 表单内容是否在初始化后发生改变,常见的如用户手动改变表单Item的某项值
*
* @return true:已改变;false:未改变
* @see InputHolderManager#isValueChange()
*/
public boolean isValueChange() {
for (InputHolderManager inputHolderManager : inputHolderManagers) {
if (inputHolderManager.isValueChange()) {
return true;
}
}
return false;
}
/**
* 表单是否验证有效,如Item为空验证
*
* @return true:有效;false:无效
* @see InputHolderManager#isValueValid()
*/
public boolean isValueValid() {
for (InputHolderManager inputHolderManager : inputHolderManagers) {
if (!inputHolderManager.isValueValid()) {
return false;
}
}
return true;
}
}