/*
* Copyright (C) 2010-2014 Stichting Akvo (Akvo Foundation)
*
* This file is part of Akvo FLOW.
*
* Akvo FLOW is free software: you can redistribute it and modify it under the terms of
* the GNU Affero General Public License (AGPL) as published by the Free Software Foundation,
* either version 3 of the License or any later version.
*
* Akvo FLOW 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 Affero General Public License included below for more details.
*
* The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>.
*/
package org.waterforpeople.mapping.domain;
import java.lang.reflect.Field;
import java.util.Date;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import org.akvo.flow.domain.DataUtils;
import org.apache.commons.lang.StringUtils;
import com.gallatinsystems.common.Constants;
import com.gallatinsystems.framework.domain.BaseDomain;
import com.google.appengine.api.datastore.Text;
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class QuestionAnswerStore extends BaseDomain {
private static final long serialVersionUID = 3726562582080475960L;
@Persistent
private Long arbitratyNumber;
@Persistent
private String questionID;
@Persistent
private String type;
@Persistent
private String value;
/**
* This property holds the value response value when exceeds 500 characters<br>
* See: https://developers
* .google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Text
*/
private Text valueText;
private Date collectionDate;
private Long surveyId;
private Long surveyInstanceId;
private String scoredValue;
private String strength;
private Integer iteration;
public String getStrength() {
return strength;
}
public void setStrength(String strength) {
this.strength = strength;
}
public String getScoredValue() {
return scoredValue;
}
public void setScoredValue(String scoredValue) {
this.scoredValue = scoredValue;
}
public Long getSurveyId() {
return surveyId;
}
public void setSurveyId(Long surveyId) {
this.surveyId = surveyId;
}
public Long getSurveyInstanceId() {
return surveyInstanceId;
}
public void setSurveyInstanceId(Long surveyInstanceId) {
this.surveyInstanceId = surveyInstanceId;
}
public Date getCollectionDate() {
return collectionDate;
}
public void setCollectionDate(Date collectionDate) {
this.collectionDate = collectionDate;
}
public Long getArbitratyNumber() {
return arbitratyNumber;
}
public void setArbitratyNumber(Long arbitratyNumber) {
this.arbitratyNumber = arbitratyNumber;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getValue() {
if (value != null) {
return value;
}
if (valueText != null) {
return valueText.getValue();
}
return null;
}
public void setValue(String value) {
// Explicitly set the non used property to null
// to avoid problems when reading the value
if (value != null && value.length() > Constants.MAX_LENGTH) {
this.value = null;
this.valueText = new Text(value);
} else {
this.valueText = null;
this.value = value;
}
}
public Long getQuestionIDLong() {
try {
return Long.valueOf(questionID);
} catch (NumberFormatException e) {
return null;
}
}
public String getQuestionID() {
return questionID;
}
public void setQuestionID(String questionID) {
this.questionID = questionID;
}
public void setIteration(Integer iteration) {
this.iteration = iteration;
}
public Integer getIteration() {
return iteration;
}
@Override
public String toString() {
StringBuilder result = new StringBuilder();
String newLine = System.getProperty("line.separator");
result.append(this.getClass().getName());
result.append(" Object {");
result.append(newLine);
// determine fields declared in this class only (no fields of
// superclass)
Field[] fields = this.getClass().getDeclaredFields();
// print field names paired with their values
for (Field field : fields) {
result.append(" ");
try {
result.append(field.getName());
result.append(": ");
// requires access to private field:
result.append(field.get(this));
} catch (IllegalAccessException ex) {
System.out.println(ex);
}
result.append(newLine);
}
result.append("}");
return result.toString();
}
public String getDatapointNameValue() {
if (type == null || value == null) {
return "";
}
String name;
switch (type) {
case "CASCADE":
name = StringUtils.join(DataUtils.cascadeResponseValues(value), " - ");
break;
case "OPTION":
case "OTHER":
name = StringUtils.join(DataUtils.optionResponsesTextArray(value), " - ");
break;
default:
name = value;
break;
}
name = name.replaceAll("\\s+", " ");// Trim line breaks, multiple spaces, etc
name = name.replaceAll("\\s*\\|\\s*", " - ");// Replace pipes with hyphens
return name.trim();
}
}