package com.vijay.jsonwizard.interactors;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.util.Log;
import android.view.View;
import com.vijay.jsonwizard.constants.JsonFormConstants;
import com.vijay.jsonwizard.interfaces.CommonListener;
import com.vijay.jsonwizard.interfaces.FormWidgetFactory;
import com.vijay.jsonwizard.widgets.CheckBoxFactory;
import com.vijay.jsonwizard.widgets.EditTextFactory;
import com.vijay.jsonwizard.widgets.ImagePickerFactory;
import com.vijay.jsonwizard.widgets.LabelFactory;
import com.vijay.jsonwizard.widgets.RadioButtonFactory;
import com.vijay.jsonwizard.widgets.SpinnerFactory;
/**
* Created by vijay on 5/19/15.
*/
public class JsonFormInteractor {
private static final String TAG = "JsonFormInteractor";
private static final Map<String, FormWidgetFactory> map = new HashMap<>();
private static final JsonFormInteractor INSTANCE = new JsonFormInteractor();
private JsonFormInteractor() {
registerWidgets();
}
private void registerWidgets() {
map.put(JsonFormConstants.EDIT_TEXT, new EditTextFactory());
map.put(JsonFormConstants.LABEL, new LabelFactory());
map.put(JsonFormConstants.CHECK_BOX, new CheckBoxFactory());
map.put(JsonFormConstants.RADIO_BUTTON, new RadioButtonFactory());
map.put(JsonFormConstants.CHOOSE_IMAGE, new ImagePickerFactory());
map.put(JsonFormConstants.SPINNER, new SpinnerFactory());
}
public List<View> fetchFormElements(String stepName, Context context, JSONObject parentJson, CommonListener listener) {
Log.d(TAG, "fetchFormElements called");
List<View> viewsFromJson = new ArrayList<>(5);
try {
JSONArray fields = parentJson.getJSONArray("fields");
for (int i = 0; i < fields.length(); i++) {
JSONObject childJson = fields.getJSONObject(i);
try {
List<View> views = map.get(childJson.getString("type")).getViewsFromJson(stepName, context, childJson, listener);
if (views.size() > 0) {
viewsFromJson.addAll(views);
}
} catch (Exception e) {
Log.d(TAG,
"Exception occurred in making child view at index : " + i + " : Exception is : "
+ e.getMessage());
e.printStackTrace();
}
}
} catch (JSONException e) {
Log.d(TAG, "Json exception occurred : " + e.getMessage());
e.printStackTrace();
}
return viewsFromJson;
}
public static JsonFormInteractor getInstance() {
return INSTANCE;
}
}