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