f06489c552c3ab960ad1ea24f59d5cf65e873729
[idea/community.git] / python / educational-core / student / src / com / jetbrains / edu / learning / courseFormat / AnswerPlaceholder.java
1 package com.jetbrains.edu.learning.courseFormat;
2
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;
8
9 import java.util.ArrayList;
10 import java.util.List;
11
12 /**
13  * Implementation of windows which user should type in
14  */
15
16 public class AnswerPlaceholder {
17
18   @SerializedName("hints")
19   @Expose private List<String> myHints = new ArrayList<String>();
20
21   @SerializedName("possible_answer")
22   @Expose private String possibleAnswer = "";
23
24   @SerializedName("offset")
25   @Expose private int myOffset = -1;
26
27   @Expose private int length = -1;
28
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;
35
36
37   @Transient private TaskFile myTaskFile;
38
39   public AnswerPlaceholder() {
40   }
41
42   public void initAnswerPlaceholder(final TaskFile file, boolean isRestarted) {
43     if (!isRestarted) {
44       setInitialState(new MyInitialState(myOffset, length));
45       myStatus = file.getTask().getStatus();
46     }
47
48     setTaskFile(file);
49   }
50
51   public int getIndex() {
52     return myIndex;
53   }
54
55   public void setIndex(int index) {
56     myIndex = index;
57   }
58
59   /**
60    * in actions {@link AnswerPlaceholder#getRealLength()} should be used
61    */
62   public int getLength() {
63     return length;
64   }
65
66   public void setLength(int length) {
67     this.length = length;
68   }
69
70   @NotNull
71   public List<String> getHints() {
72     return myHints;
73   }
74
75   public void setHints(@Nullable final List<String> hints) {
76     myHints = hints;
77   }
78
79   public String getPossibleAnswer() {
80     return possibleAnswer;
81   }
82
83   public void setPossibleAnswer(String possibleAnswer) {
84     this.possibleAnswer = possibleAnswer;
85   }
86
87   public MyInitialState getInitialState() {
88     return myInitialState;
89   }
90
91   public void setInitialState(MyInitialState initialState) {
92     myInitialState = initialState;
93   }
94
95   public String getTaskText() {
96     return myTaskText;
97   }
98
99   public void setTaskText(String taskText) {
100     myTaskText = taskText;
101   }
102
103   @Transient
104   public TaskFile getTaskFile() {
105     return myTaskFile;
106   }
107
108   @Transient
109   public void setTaskFile(TaskFile taskFile) {
110     myTaskFile = taskFile;
111   }
112
113   public int getPossibleAnswerLength() {
114     return possibleAnswer.length();
115   }
116
117   /**
118    * Returns window to its initial state
119    */
120   public void reset() {
121     myOffset = myInitialState.getOffset();
122     length = myInitialState.getLength();
123     if (!myUseLength) {
124       possibleAnswer = myTaskText;
125     }
126   }
127
128   public StudyStatus getStatus() {
129     return myStatus;
130   }
131
132   public void setStatus(StudyStatus status) {
133     myStatus = status;
134   }
135
136   public boolean getSelected() {
137     return mySelected;
138   }
139
140   public void setSelected(boolean selected) {
141     mySelected = selected;
142   }
143
144   public void init() {
145     setInitialState(new MyInitialState(myOffset, myTaskText.length()));
146   }
147
148   public boolean getUseLength() {
149     return myUseLength;
150   }
151
152   /**
153    * @return length or possible answer length
154    */
155   public int getRealLength() {
156     return myUseLength ? getLength() : getPossibleAnswerLength();
157   }
158
159   public void setUseLength(boolean useLength) {
160     myUseLength = useLength;
161   }
162
163   public int getOffset() {
164     return myOffset;
165   }
166
167   public void setOffset(int offset) {
168     myOffset = offset;
169   }
170
171   public static class MyInitialState {
172     private int length = -1;
173     private int offset = -1;
174
175     public MyInitialState() {
176     }
177
178     public MyInitialState(int initialOffset, int length) {
179       this.offset = initialOffset;
180       this.length = length;
181     }
182
183     public int getLength() {
184       return length;
185     }
186
187     public void setLength(int length) {
188       this.length = length;
189     }
190
191     public int getOffset() {
192       return offset;
193     }
194
195     public void setOffset(int offset) {
196       this.offset = offset;
197     }
198   }
199 }