package org.adaptlab.chpir.android.survey; import java.util.List; import org.adaptlab.chpir.android.survey.Models.Grid; import org.adaptlab.chpir.android.survey.Models.Question; import org.adaptlab.chpir.android.survey.Models.Response; import org.adaptlab.chpir.android.survey.Models.Survey; import android.os.Bundle; import android.util.Log; import android.view.ViewGroup; import com.activeandroid.Model; public abstract class GridFragment extends QuestionFragment { public final static String EXTRA_GRID_ID = "org.adaptlab.chpir.android.survey.grid_id"; public final static String EXTRA_SURVEY_ID = "org.adaptlab.chpir.android.survey.survey_id"; protected void createQuestionComponent(ViewGroup questionComponent){}; private static final String TAG = "GridFragment"; private Grid mGrid; private Survey mSurvey; private List<Question> mQuestions; @Override public void onCreate(Bundle savedInstanceState) { if (savedInstanceState != null) { mGrid = Grid.findByRemoteId(savedInstanceState.getLong(EXTRA_GRID_ID)); mQuestions = mGrid.questions(); } else { mGrid = Grid.findByRemoteId(getArguments().getLong(EXTRA_GRID_ID)); mQuestions = mGrid.questions(); } init(); super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public void init() { long surveyId = getArguments().getLong(EXTRA_SURVEY_ID); if (surveyId != -1) { mSurvey = Model.load(Survey.class, surveyId); createResponses(); } } private void createResponses() { for (Question question : mGrid.questions()) { if (mSurvey.getResponseByQuestion(question) == null) { Response response = new Response(); response.setQuestion(question); response.setSurvey(mSurvey); response.save(); } } } @Override public void saveSpecialResponse(String specialResponse) { for (Question question : mGrid.questions()) { Response response = mSurvey.getResponseByQuestion(question); if (response != null) { response.setSpecialResponse(specialResponse); response.setDeviceUser(AuthUtils.getCurrentUser()); response.setResponse(""); response.save(); deserialize(response.getText()); if (AppUtil.DEBUG) Log.i(TAG, "Saved special response: " + response.getSpecialResponse() + " for question: " + question.getQuestionIdentifier()); } } } @Override public String getSpecialResponse() { if (mGrid == null && mSurvey == null) { return ""; } for (int k = 0; k < mGrid.questions().size(); k++) { Response response = mSurvey.getResponseByQuestion(mGrid.questions().get(k)); if (response != null && !response.getSpecialResponse().equals("")) { return response.getSpecialResponse(); } } return ""; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong(EXTRA_GRID_ID, mGrid.getRemoteId()); outState.putLong(EXTRA_SURVEY_ID, mSurvey.getId()); } protected List<Question> getQuestions() { return mQuestions; } protected Grid getGrid() { return mGrid; } protected Survey getSurvey() { return mSurvey; } }