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.openapi.editor.Document;
6 import com.intellij.util.xmlb.annotations.Transient;
7 import org.jetbrains.annotations.NotNull;
8 import org.jetbrains.annotations.Nullable;
11 * Implementation of windows which user should type in
14 public class AnswerPlaceholder {
16 @Expose private String hint = "";
18 @SerializedName("possible_answer")
19 @Expose private String possibleAnswer = "";
21 @SerializedName("offset")
23 private int myOffset = -1;
25 @Expose private int length = -1;
27 private int myIndex = -1;
28 private String myTaskText;
29 private MyInitialState myInitialState;
30 private StudyStatus myStatus = StudyStatus.Unchecked;
31 private boolean mySelected = false;
32 private boolean myUseLength = true;
36 private TaskFile myTaskFile;
38 public AnswerPlaceholder() {
41 public void initAnswerPlaceholder(final TaskFile file, boolean isRestarted) {
43 setInitialState(new MyInitialState(myOffset, length));
44 myStatus = file.getTask().getStatus();
50 public int getIndex() {
54 public void setIndex(int index) {
59 * in actions {@link AnswerPlaceholder#getRealLength()} should be used
61 public int getLength() {
65 public void setLength(int length) {
69 public String getHint() {
73 public void setHint(@Nullable final String hint) {
77 public String getPossibleAnswer() {
78 return possibleAnswer;
81 public void setPossibleAnswer(String possibleAnswer) {
82 this.possibleAnswer = possibleAnswer;
85 public MyInitialState getInitialState() {
86 return myInitialState;
89 public void setInitialState(MyInitialState initialState) {
90 myInitialState = initialState;
93 public String getTaskText() {
97 public void setTaskText(String taskText) {
98 myTaskText = taskText;
102 public TaskFile getTaskFile() {
107 public void setTaskFile(TaskFile taskFile) {
108 myTaskFile = taskFile;
111 public int getPossibleAnswerLength() {
112 return possibleAnswer.length();
115 public boolean isValid(@NotNull final Document document) {
116 return isValid(document, length);
119 public boolean isValid(@NotNull final Document document, int length) {
120 return myOffset >= 0 && myOffset + length <= document.getTextLength();
124 * Returns window to its initial state
126 public void reset() {
127 myOffset = myInitialState.getOffset();
128 length = myInitialState.getLength();
130 possibleAnswer = myTaskText;
134 public StudyStatus getStatus() {
138 public void setStatus(StudyStatus status) {
142 public boolean getSelected() {
146 public void setSelected(boolean selected) {
147 mySelected = selected;
151 setInitialState(new MyInitialState(myOffset, myTaskText.length()));
154 public boolean getUseLength() {
159 * @return length or possible answer length
161 public int getRealLength() {
162 return myUseLength ? getLength() : getPossibleAnswerLength();
165 public void setUseLength(boolean useLength) {
166 myUseLength = useLength;
169 public int getOffset() {
173 public void setOffset(int offset) {
177 public static class MyInitialState {
178 private int length = -1;
179 private int offset = -1;
181 public MyInitialState() {
184 public MyInitialState(int initialOffset, int length) {
185 this.offset = initialOffset;
186 this.length = length;
189 public int getLength() {
193 public void setLength(int length) {
194 this.length = length;
197 public int getOffset() {
201 public void setOffset(int offset) {
202 this.offset = offset;