1 package com.jetbrains.edu.learning.courseFormat;
3 import com.google.gson.annotations.Expose;
4 import com.google.gson.annotations.SerializedName;
5 import com.intellij.util.xmlb.annotations.Transient;
6 import org.jetbrains.annotations.NotNull;
7 import org.jetbrains.annotations.Nullable;
9 import java.util.ArrayList;
10 import java.util.List;
13 * Implementation of windows which user should type in
16 public class AnswerPlaceholder {
18 @SerializedName("hints")
19 @Expose private List<String> myHints = new ArrayList<String>();
21 @SerializedName("possible_answer")
22 @Expose private String possibleAnswer = "";
24 @SerializedName("offset")
25 @Expose private int myOffset = -1;
27 @Expose private int length = -1;
29 private int myIndex = -1;
30 private String myTaskText;
31 private MyInitialState myInitialState;
32 private StudyStatus myStatus = StudyStatus.Unchecked;
33 private boolean mySelected = false;
34 private boolean myUseLength = true;
37 @Transient private TaskFile myTaskFile;
39 public AnswerPlaceholder() {
42 public void initAnswerPlaceholder(final TaskFile file, boolean isRestarted) {
44 setInitialState(new MyInitialState(myOffset, length));
45 myStatus = file.getTask().getStatus();
51 public int getIndex() {
55 public void setIndex(int index) {
60 * in actions {@link AnswerPlaceholder#getRealLength()} should be used
62 public int getLength() {
66 public void setLength(int length) {
71 public List<String> getHints() {
75 public void setHints(@Nullable final List<String> hints) {
79 public String getPossibleAnswer() {
80 return possibleAnswer;
83 public void setPossibleAnswer(String possibleAnswer) {
84 this.possibleAnswer = possibleAnswer;
87 public MyInitialState getInitialState() {
88 return myInitialState;
91 public void setInitialState(MyInitialState initialState) {
92 myInitialState = initialState;
95 public String getTaskText() {
99 public void setTaskText(String taskText) {
100 myTaskText = taskText;
104 public TaskFile getTaskFile() {
109 public void setTaskFile(TaskFile taskFile) {
110 myTaskFile = taskFile;
113 public int getPossibleAnswerLength() {
114 return possibleAnswer.length();
118 * Returns window to its initial state
120 public void reset() {
121 myOffset = myInitialState.getOffset();
122 length = myInitialState.getLength();
124 possibleAnswer = myTaskText;
128 public StudyStatus getStatus() {
132 public void setStatus(StudyStatus status) {
136 public boolean getSelected() {
140 public void setSelected(boolean selected) {
141 mySelected = selected;
145 setInitialState(new MyInitialState(myOffset, myTaskText.length()));
148 public boolean getUseLength() {
153 * @return length or possible answer length
155 public int getRealLength() {
156 return myUseLength ? getLength() : getPossibleAnswerLength();
159 public void setUseLength(boolean useLength) {
160 myUseLength = useLength;
163 public int getOffset() {
167 public void setOffset(int offset) {
171 public static class MyInitialState {
172 private int length = -1;
173 private int offset = -1;
175 public MyInitialState() {
178 public MyInitialState(int initialOffset, int length) {
179 this.offset = initialOffset;
180 this.length = length;
183 public int getLength() {
187 public void setLength(int length) {
188 this.length = length;
191 public int getOffset() {
195 public void setOffset(int offset) {
196 this.offset = offset;