/*
* The contents of this file are subject to the OpenMRS Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://license.openmrs.org
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/
package org.openmrs.mobile.bundle;
import android.os.Parcel;
import android.os.Parcelable;
import org.openmrs.mobile.models.Answer;
import org.openmrs.mobile.models.Encounter;
import org.openmrs.mobile.models.Observation;
import org.openmrs.mobile.models.Page;
import org.openmrs.mobile.models.Question;
import org.openmrs.mobile.models.Section;
import org.openmrs.mobile.utilities.InputField;
import org.openmrs.mobile.utilities.SelectOneField;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class FormFieldsWrapper implements Serializable, Parcelable {
private List<InputField> inputFields;
private List<SelectOneField> selectOneFields;
public FormFieldsWrapper() {}
public FormFieldsWrapper(List<InputField> inputFields, List<SelectOneField> selectOneFields) {
this.inputFields = inputFields;
this.selectOneFields = selectOneFields;
}
public List<InputField> getInputFields() {
return inputFields;
}
public void setInputFields(List<InputField> inputFields) {
this.inputFields = inputFields;
}
public List<SelectOneField> getSelectOneFields() {
return selectOneFields;
}
public void setSelectOneFields(List<SelectOneField> selectOneFields) {
this.selectOneFields = selectOneFields;
}
public static ArrayList<FormFieldsWrapper> create(Encounter encounter){
ArrayList<FormFieldsWrapper> formFieldsWrapperList = new ArrayList<>();
List<Page> pages = encounter.getForm().getPages();
for (Page page : pages) {
FormFieldsWrapper formFieldsWrapper = new FormFieldsWrapper();
List<InputField> inputFieldList = new LinkedList<>();
List<SelectOneField> selectOneFieldList = new LinkedList<>();
List<Section> sections = page.getSections();
for (Section section : sections) {
List<Question> questions = section.getQuestions();
for (Question questionGroup : questions) {
for (Question question : questionGroup.getQuestions()) {
if(question.getQuestionOptions().getRendering().equals("number")) {
String conceptUuid = question.getQuestionOptions().getConcept();
InputField inputField = new InputField(conceptUuid);
inputField.setValue(getValue(encounter.getObservations(), conceptUuid));
inputFieldList.add(inputField);
} else if (question.getQuestionOptions().getRendering().equals("select") || question.getQuestionOptions().getRendering().equals("radio")) {
String conceptUuid = question.getQuestionOptions().getConcept();
SelectOneField selectOneField =
new SelectOneField(question.getQuestionOptions().getAnswers(), conceptUuid);
Answer chosenAnswer = new Answer();
chosenAnswer.setConcept(conceptUuid);
chosenAnswer.setLabel(getValue(encounter.getObservations(), conceptUuid).toString());
selectOneField.setChosenAnswer(chosenAnswer);
selectOneFieldList.add(selectOneField);
}
}
}
}
formFieldsWrapper.setSelectOneFields(selectOneFieldList);
formFieldsWrapper.setInputFields(inputFieldList);
formFieldsWrapperList.add(formFieldsWrapper);
}
return formFieldsWrapperList;
}
private static Double getValue(List<Observation> observations, String conceptUuid) {
for (Observation observation : observations) {
if(observation.getConcept().getUuid().equals(conceptUuid)){
return Double.valueOf(observation.getDisplayValue());
}
}
return -1.0;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(this.inputFields);
dest.writeList(this.selectOneFields);
}
protected FormFieldsWrapper(Parcel in) {
this.inputFields = new ArrayList<InputField>();
in.readList(this.inputFields, InputField.class.getClassLoader());
this.selectOneFields = new ArrayList<SelectOneField>();
in.readList(this.selectOneFields, SelectOneField.class.getClassLoader());
}
public static final Creator<FormFieldsWrapper> CREATOR = new Creator<FormFieldsWrapper>() {
@Override
public FormFieldsWrapper createFromParcel(Parcel source) {
return new FormFieldsWrapper(source);
}
@Override
public FormFieldsWrapper[] newArray(int size) {
return new FormFieldsWrapper[size];
}
};
}