package in.vesely.eclub.yodaqa.restclient;
import android.os.Parcel;
import android.os.Parcelable;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* Created by vesely on 6/15/15.
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class YodaAnswersResponse implements Parcelable {
@JsonProperty("answers")
private List<YodaAnswerItem> answers;
@JsonProperty("sources")
private HashMap<String, YodaSource> sources;
@JsonProperty("snippets")
private HashMap<String, YodaSnippet> snippets;
@JsonProperty("finished")
private boolean finished;
@JsonProperty("gen_sources")
private int generatedSources;
@JsonProperty("gen_answers")
private int generatedAnswers;
@JsonProperty("answerSentence")
private String answerSentence;
private List<YodaAnswer> answersAll;
public YodaAnswersResponse() {
}
public List<YodaAnswerItem> getAnswers() {
return answers;
}
public void setAnswers(List<YodaAnswerItem> answers) {
this.answers = answers;
}
public HashMap<String, YodaSource> getSources() {
return sources;
}
public void setSources(HashMap<String, YodaSource> sources) {
this.sources = sources;
}
public boolean isFinished() {
return finished;
}
public void setFinished(boolean finished) {
this.finished = finished;
}
public int getGeneratedSources() {
return generatedSources;
}
public void setGeneratedSources(int generatedSources) {
this.generatedSources = generatedSources;
}
public int getGeneratedAnswers() {
return generatedAnswers;
}
public void setGeneratedAnswers(int generatedAnswers) {
this.generatedAnswers = generatedAnswers;
}
public HashMap<String, YodaSnippet> getSnippets() {
return snippets;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeTypedList(answers);
dest.writeInt(sources.size());
for (Map.Entry<String, YodaSource> entry : sources.entrySet()) {
dest.writeString(entry.getKey());
dest.writeParcelable(entry.getValue(), flags);
}
dest.writeInt(snippets.size());
for (Map.Entry<String, YodaSnippet> entry : snippets.entrySet()) {
dest.writeString(entry.getKey());
dest.writeParcelable(entry.getValue(), flags);
}
dest.writeByte(finished ? (byte) 1 : (byte) 0);
dest.writeInt(this.generatedSources);
dest.writeInt(this.generatedAnswers);
dest.writeByte(answerSentence == null ? (byte) 1 : (byte) 0);
if (answerSentence != null) {
dest.writeString(answerSentence);
}
}
protected YodaAnswersResponse(Parcel in) {
this.answers = in.createTypedArrayList(YodaAnswerItem.CREATOR);
this.sources = new HashMap<>();
this.snippets = new HashMap<>();
int size = in.readInt();
for (int i = 0; i < size; i++) {
String key = in.readString();
YodaSource value = in.readParcelable(YodaSource.class.getClassLoader());
sources.put(key, value);
}
size = in.readInt();
for (int i = 0; i < size; i++) {
String key = in.readString();
YodaSnippet value = in.readParcelable(YodaSource.class.getClassLoader());
snippets.put(key, value);
}
this.finished = in.readByte() != 0;
this.generatedSources = in.readInt();
this.generatedAnswers = in.readInt();
boolean isAbsent = in.readByte() != 0;
if (!isAbsent) {
this.answerSentence = in.readString();
}
}
public String getTextForSpokenAnswer() {
if (answerSentence != null) {
return answerSentence;
}
if (answers.size() > 0) {
return answers.get(0).getText();
}
return null;
}
public List<YodaAnswer> getAllAnswers() {
if (answersAll == null) {
answersAll = new LinkedList<>();
String answerSentence = getAnswerSentence();
if (answerSentence != null) {
answersAll.add(new YodaAnswer(answerSentence));
}
for (YodaAnswerItem a : getAnswers()) {
int snippetIDs[] = a.getSnippetIDs();
for (int snippetId : snippetIDs) {
YodaSnippet snippet = (snippets.get(String.valueOf(snippetId)));
int sourceID = snippet.getSourceID();
YodaSource source = sources.get(String.valueOf(sourceID));
a.addSnippet(new SnippetSourceContainer(snippet, source));
}
answersAll.add(a);
}
}
return answersAll;
}
public String getAnswerSentence() {
return answerSentence;
}
public void setAnswerSentence(String answerSentence) {
this.answerSentence = answerSentence;
}
public static final Creator<YodaAnswersResponse> CREATOR = new Creator<YodaAnswersResponse>() {
public YodaAnswersResponse createFromParcel(Parcel source) {
return new YodaAnswersResponse(source);
}
public YodaAnswersResponse[] newArray(int size) {
return new YodaAnswersResponse[size];
}
};
}