package org.sigmah.offline.js;
/*
* #%L
* Sigmah
* %%
* Copyright (C) 2010 - 2016 URD
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import java.util.ArrayList;
import java.util.List;
import org.sigmah.client.util.ClientUtils;
import org.sigmah.shared.dto.category.CategoryTypeDTO;
import org.sigmah.shared.dto.element.QuestionChoiceElementDTO;
import org.sigmah.shared.dto.element.QuestionElementDTO;
import org.sigmah.shared.dto.quality.QualityCriterionDTO;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
/**
*
* @author Raphaƫl Calabro (rcalabro@ideia.fr)
*/
public final class QuestionElementJS extends FlexibleElementJS {
protected QuestionElementJS() {
}
public static QuestionElementJS toJavaScript(QuestionElementDTO questionElementDTO) {
final QuestionElementJS questionElementJS = Values.createJavaScriptObject(QuestionElementJS.class);
questionElementJS.setChoices(questionElementDTO.getChoices());
questionElementJS.setMultiple(ClientUtils.isTrue(questionElementDTO.getMultiple()));
questionElementJS.setCategoryType(questionElementDTO.getCategoryType());
questionElementJS.setQualityCriterion(questionElementDTO.getQualityCriterion());
return questionElementJS;
}
public QuestionElementDTO toQuestionElementDTO() {
final QuestionElementDTO questionElementDTO = new QuestionElementDTO();
final JsArray<QuestionChoiceElementJS> choices = getChoices();
if(choices != null) {
final ArrayList<QuestionChoiceElementDTO> dtos = new ArrayList<QuestionChoiceElementDTO>();
for(int index = 0; index < choices.length(); index++) {
final QuestionChoiceElementDTO questionChoiceElementDTO = choices.get(index).toDTO();
questionChoiceElementDTO.setParentQuestion(questionElementDTO);
dtos.add(questionChoiceElementDTO);
}
questionElementDTO.setChoices(dtos);
}
questionElementDTO.setMultiple(isMultiple());
if(getCategoryType() != null) {
questionElementDTO.setCategoryType(getCategoryType().toDTO());
}
if(getQualityCriterion() != null) {
questionElementDTO.setQualityCriterion(getQualityCriterion().toDTO());
}
return questionElementDTO;
}
public native JsArray<QuestionChoiceElementJS> getChoices() /*-{
return this.choices;
}-*/;
public void setChoices(List<QuestionChoiceElementDTO> choices) {
if(choices != null) {
final JsArray<QuestionChoiceElementJS> array = (JsArray<QuestionChoiceElementJS>) JavaScriptObject.createArray();
for(final QuestionChoiceElementDTO choice : choices) {
array.push(QuestionChoiceElementJS.toJavaScript(choice));
}
setChoices(array);
}
}
public native void setChoices(JsArray<QuestionChoiceElementJS> choices) /*-{
this.choices = choices;
}-*/;
public native boolean isMultiple() /*-{
return this.multiple;
}-*/;
public native void setMultiple(boolean multiple) /*-{
this.multiple = multiple;
}-*/;
public native CategoryTypeJS getCategoryType() /*-{
return this.categoryType;
}-*/;
public void setCategoryType(CategoryTypeDTO categoryType) {
if(categoryType != null) {
setCategoryType(CategoryTypeJS.toJavaScript(categoryType));
}
}
public native CategoryTypeJS setCategoryType(CategoryTypeJS categoryType) /*-{
this.categoryType = categoryType;
}-*/;
public native QualityCriterionJS getQualityCriterion() /*-{
return this.qualityCriterion;
}-*/;
public void setQualityCriterion(QualityCriterionDTO qualityCriterion) {
if(qualityCriterion != null) {
setQualityCriterion(QualityCriterionJS.toJavaScript(qualityCriterion));
}
}
public native void setQualityCriterion(QualityCriterionJS qualityCriterion) /*-{
this.qualityCriterion = qualityCriterion;
}-*/;
}