Skip to content

Commit ac4dd6c

Browse files
committed
Merge pull request sakaiproject#1295 from davnavarro/SAM-2656
SAM-2656 SamLite: required rationale in multiple choice questions and true/false questions
2 parents 5e69d0b + 433ab75 commit ac4dd6c

File tree

9 files changed

+63
-10
lines changed

9 files changed

+63
-10
lines changed

samigo/samigo-api/src/java/org/sakaiproject/tool/assessment/samlite/api/Question.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ public class Question {
3434
private String feedbackOK;
3535
private String feedbackNOK;
3636
private boolean randomize;
37-
37+
private boolean rationale;
38+
3839
public Question() {
3940
this.questionNumber = 0;
4041
this.questionPoints = "";
@@ -135,6 +136,14 @@ public int getQuestionType() {
135136
public void setQuestionType(int questionType) {
136137
this.questionType = questionType;
137138
}
139+
140+
public boolean isRationale() {
141+
return rationale;
142+
}
143+
144+
public void setRationale(boolean rationale) {
145+
this.rationale = rationale;
146+
}
138147

139148
public void postProcessing() {
140149
if (getQuestionType() == EXTENDED_MATCHING_ITEMS_QUESTION) {

samigo/samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/SamLite.properties

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ general_instructions_feedback=To add correct feedback you need to add a line lik
2222
example_mc_label=Multiple Choice
2323
example_mc_instructions=Each answer should begin with its appropriate letter, in alphabetical order. The correct answer should be prefixed with an asterisk (*).
2424
example_mc_instructions_1=Optionally, the key word \#randomize will create questions with randomized answers
25+
example_mc_instructions_2=Optionally, the key word \#rationale will create questions with required rationale
2526
example_mc_question_format1=Question 1 (10 points) (2.5 discount)
2627
example_mc_question_format2=Question (10 points) (2.5 discount)
2728
example_mc_question_format3=Question 1
@@ -33,10 +34,12 @@ example_mc_answer_b=b. Jefferson
3334
example_mc_answer_c=c. Lincoln
3435
example_mc_answer_d=d. Clinton
3536
example_mc_question_random=\#randomize
37+
example_mc_question_rationale=\#rationale
3638

3739
example_mcmc_label=Multiple Correct Answer
3840
example_mcmc_instructions=Each answer should begin with its appropriate letter, in alphabetical order. The correct answer should be prefixed with an asterisk (*).
3941
example_mcmc_instructions_1=Optionally, the key word \#randomize will create questions with randomized answers
42+
example_mcmc_instructions_2=Optionally, the key word \#rationale will create questions with required rationale
4043
example_mcmc_question_format1=Question 2 (15 points)
4144
example_mcmc_question_format2=Question (15 points)
4245
example_mcmc_question_format3=Question 2
@@ -47,6 +50,7 @@ example_mcmc_answer_a=*a. Bill Faulkner
4750
example_mcmc_answer_b=b. Ginny Woolf
4851
example_mcmc_answer_c=*c. Tom Eliot
4952
example_mcmc_question_random=\#randomize
53+
example_mcmc_question_rationale=\#rationale
5054

5155
example_fib_label=Fill in the Blank
5256
example_fib_instructions=The correct answer should be prefixed with an asterisk (*).

samigo/samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/SamLite_ca.properties

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ general_instructions_conclude=El text de la pregunta es pot posar a la mateixa l
2222
example_mc_label=Selecci\u00f3 m\u00faltiple
2323
example_mc_instructions=Cada resposta ha de comen\u00e7ar amb la lletra apropiada, en ordre alfab\u00e8tic. La resposta correcta ha de dur al davant un asterisc(*).
2424
example_mc_instructions_1=Opcionalment, la paraula clau \#aleatorizar crear\u00e0 preguntes amb les respostes aleatorizades
25+
example_mc_instructions_2=Opcionalment, la paraula clau \#raonament crear\u00E0 preguntes amb el raonament requerit
2526
example_mc_question_format1=Pregunta 1 (10 punts) (2.5 descompte)
2627
example_mc_question_format2=Pregunta (10 punts) (2.5 descompte)
2728
example_mc_question_format3=Pregunta 1
@@ -33,10 +34,12 @@ example_mc_answer_b=b. Jefferson
3334
example_mc_answer_c=c. Lincoln
3435
example_mc_answer_d=d. Clinton
3536
example_mc_question_random=\#aleatorizar
37+
example_mc_question_rationale=\#raonament
3638

3739
example_mcmc_label=Resposta correcta m\u00faltiple
3840
example_mcmc_instructions=Cada resposta ha de comen\u00e7ar amb la lletra apropiada, en ordre alfab\u00e8tic. La resposta correcta ha de dur al davant un asterisc (*).
3941
example_mcmc_instructions_1=Opcionalment, la paraula clau \#aleatorizar crear\u00e0 preguntes amb les respostes aleatorizades
42+
example_mcmc_instructions_2=Opcionalment, la paraula clau \#raonament crear\u00E0 preguntes amb el raonament requerit
4043
example_mcmc_question_format1=Pregunta 2 (15 punts)
4144
example_mcmc_question_format2=Pregunta (15 punts)
4245
example_mcmc_question_format3=Pregunta 2
@@ -47,6 +50,7 @@ example_mcmc_answer_a=*a. Bill Faulkner
4750
example_mcmc_answer_b=b. Ginny Woolf
4851
example_mcmc_answer_c=*c. Tom Eliot
4952
example_mcmc_question_random=\#aleatorizar
53+
example_mcmc_question_rationale=\#raonament
5054

5155
example_fib_label=Ompliu l'espai en blanc
5256
example_fib_instructions=La resposta correcta ha de dur al davant un asterisc (*).

samigo/samigo-app/src/java/org/sakaiproject/tool/assessment/bundle/SamLite_es.properties

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ general_instructions_feedback=Para a\u00f1adir comentarios en caso de respuesta
2222
example_mc_label=Selecci\u00f3n M\u00faltiple
2323
example_mc_instructions=Cada respuesta debe comenzar con su letra apropiada, en orden alfab\u00e9tico. La respuesta correcta debe ir precedida de un asterisco (*).
2424
example_mc_instructions_1=Opcionalmente, la palabra clave \#randomize crear\u00e1 preguntas con las respuestas ordenadas de forma aleatoria.
25+
example_mc_instructions_2=Opcionalmente, la palabra clave \#razonamiento crear\u00E1 preguntas con el razonamiento requerido.
2526
example_mc_question_format1=Pregunta 1 (10 puntos) (2.5 descuento)
2627
example_mc_question_format2=Pregunta (10 puntos) (2.5 descuento)
2728
example_mc_question_format3=Pregunta 1
@@ -33,10 +34,12 @@ example_mc_answer_b=b. Hernan Cort\u00e9s
3334
example_mc_answer_c=c. Carlo Magno
3435
example_mc_answer_d=d. Julio C\u00e9sar
3536
example_mc_question_random=\#randomize
37+
example_mc_question_rationale=\#razonamiento
3638

3739
example_mcmc_label=M\u00faltiple respuesta correcta
3840
example_mcmc_instructions=Cada respuesta debe comenzar por sus letra apropiada, en \norden alfab\u00e9tico. La respuestas correctas deben ir precedidas de un asterisco (*).
3941
example_mcmc_instructions_1=Opcionalmente, la palabra clave \#randomize crear\u00e1 preguntas con las respuestas ordenadas de forma aleatoria.
42+
example_mcmc_instructions_2=Opcionalmente, la palabra clave \#razonamiento crear\u00E1 preguntas con el razonamiento requerido
4043
example_mcmc_question_format1=Pregunta 2 (15 puntos)
4144
example_mcmc_question_format2=Pregunta (15 puntos)
4245
example_mcmc_question_format3=Pregunta 2
@@ -47,6 +50,7 @@ example_mcmc_answer_a=*a. Camilo Jos\u00e9 Cela
4750
example_mcmc_answer_b=b. William Shakespeare
4851
example_mcmc_answer_c=*c. Miguel de Unamuno
4952
example_mcmc_question_random=\#randomize
53+
example_mcmc_question_rationale=\#razonamiento
5054

5155
example_fib_label=Completar los espacios en blanco
5256
example_fib_instructions=La respuesta correcta debe ir precedida de un asterisco (*).

samigo/samigo-app/src/webapp/jsf/samlite/samLiteEntry.jsp

+12-5
Original file line numberDiff line numberDiff line change
@@ -136,15 +136,17 @@
136136
<div id="example_mc_question" class="inopPanel" style="display:none">
137137
<strong><h:outputText value="#{samLiteMessages.example_instruction_label}"/></strong>
138138
<h:outputText value="#{samLiteMessages.example_mc_instructions}"/><br/>
139-
<h:outputText value="#{samLiteMessages.example_mc_instructions_1}"/><p/>
139+
<h:outputText value="#{samLiteMessages.example_mc_instructions_1}"/><br/>
140+
<h:outputText value="#{samLiteMessages.example_mc_instructions_2}"/><p/>
140141
<strong><h:outputText value="#{samLiteMessages.example_example_label}"/></strong><br/>
141142
<h:outputText value="#{samLiteMessages.example_mc_question_format4}"/><br/>
142143
<h:outputText value="#{samLiteMessages.example_mc_question_text}"/><p/>
143144
<h:outputText value="#{samLiteMessages.example_mc_answer_a}"/><br/>
144145
<h:outputText value="#{samLiteMessages.example_mc_answer_b}"/><br/>
145146
<h:outputText value="#{samLiteMessages.example_mc_answer_c}"/><br/>
146147
<h:outputText value="#{samLiteMessages.example_mc_answer_d}"/><br/>
147-
<h:outputText value="#{samLiteMessages.example_mc_question_random}"/>
148+
<h:outputText value="#{samLiteMessages.example_mc_question_random}"/><br/>
149+
<h:outputText value="#{samLiteMessages.example_mc_question_rationale}"/>
148150
</div>
149151
</td>
150152
</tr>
@@ -154,14 +156,16 @@
154156
<div id="example_mcmc_question" class="inopPanel" style="display:none">
155157
<strong><h:outputText value="#{samLiteMessages.example_instruction_label}"/></strong>
156158
<h:outputText value="#{samLiteMessages.example_mcmc_instructions}"/><br/>
157-
<h:outputText value="#{samLiteMessages.example_mcmc_instructions_1}"/><p/>
159+
<h:outputText value="#{samLiteMessages.example_mcmc_instructions_1}"/><br/>
160+
<h:outputText value="#{samLiteMessages.example_mcmc_instructions_2}"/><p/>
158161
<strong><h:outputText value="#{samLiteMessages.example_example_label}"/></strong><br/>
159162
<h:outputText value="#{samLiteMessages.example_mcmc_question_format4}"/><br/>
160163
<h:outputText value="#{samLiteMessages.example_mcmc_question_text}"/><p/>
161164
<h:outputText value="#{samLiteMessages.example_mcmc_answer_a}"/><br/>
162165
<h:outputText value="#{samLiteMessages.example_mcmc_answer_b}"/><br/>
163166
<h:outputText value="#{samLiteMessages.example_mcmc_answer_c}"/><br/>
164167
<h:outputText value="#{samLiteMessages.example_mcmc_question_random}"/><br/>
168+
<h:outputText value="#{samLiteMessages.example_mcmc_question_rationale}"/><br/>
165169
</div>
166170
</td>
167171
</tr>
@@ -192,12 +196,15 @@
192196
<td align="left" valign="top">
193197
<a href="javascript:toggleLayer('example_tf_question');"><h:outputText value="#{samLiteMessages.example_tf_label}"/></a>
194198
<div id="example_tf_question" class="inopPanel" style="display:none">
195-
<strong><h:outputText value="#{samLiteMessages.example_instruction_label}"/></strong><h:outputText value="#{samLiteMessages.example_tf_instructions}"/><p/>
199+
<strong><h:outputText value="#{samLiteMessages.example_instruction_label}"/>
200+
</strong><h:outputText value="#{samLiteMessages.example_tf_instructions}"/><br/>
201+
<h:outputText value="#{samLiteMessages.example_mcmc_instructions_2}"/><p/>
196202
<strong><h:outputText value="#{samLiteMessages.example_example_label}"/></strong><br/>
197203
<h:outputText value="#{samLiteMessages.example_tf_question_format4}"/><br/>
198204
<h:outputText value="#{samLiteMessages.example_tf_question_text}"/><p/>
199205
<h:outputText value="#{samLiteMessages.example_tf_answer_a}"/><br/>
200-
<h:outputText value="#{samLiteMessages.example_tf_answer_b}"/>
206+
<h:outputText value="#{samLiteMessages.example_tf_answer_b}"/><br/>
207+
<h:outputText value="#{samLiteMessages.example_mcmc_question_rationale}"/><br/>
201208
</div>
202209
</td>
203210
</tr>

samigo/samlite-impl/src/java/org/sakaiproject/tool/assessment/bundle/SamLitePatternMessages.properties

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ question=Question
33
points=point(s?)
44
discount=discount(s?)
55
randomize=\#randomize
6+
rationale=\#rationale
67
save_answer=Save answer
78
true=True
89
false=False

samigo/samlite-impl/src/java/org/sakaiproject/tool/assessment/bundle/SamLitePatternMessages_ca.properties

+1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ save_answer=Desa la resposta
77
true=Veritat
88
false=Fals
99
randomize=\#aleatorizar
10+
rationale=\#raonament
1011

samigo/samlite-impl/src/java/org/sakaiproject/tool/assessment/bundle/SamLitePatternMessages_es.properties

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ question=Pregunta
33
points=Punto(s?)
44
discount=Descuento(s?)
55
randomize=\#randomize
6+
rationale=\#razonamiento
67
save_answer=Guardar la respuesta
78
true=Verdadero
89
false=Falso

samigo/samlite-impl/src/java/org/sakaiproject/tool/assessment/samlite/impl/SamLiteServiceImpl.java

+26-4
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public class SamLiteServiceImpl implements SamLiteService {
7979
private Pattern discountPattern;
8080
String realPatternString = "((\\+||\\-)?(\\d+((\\.|\\,)\\d+)?)((E|e)(\\-|\\+)?\\d+)?)";
8181
private Pattern randomizePattern;
82+
private Pattern rationalePattern;
8283

8384
private Pattern extendedMatchingCorrectAnswersPattern;
8485

@@ -192,7 +193,12 @@ public QuestionGroup parse(String name, String description, String data) {
192193
unnecessaryFalsePattern = Pattern.compile("^" + stFalse + "$");
193194
String txtRandomize = rb.getString("randomize", "#randomize");
194195
randomizePattern = Pattern.compile("^" + txtRandomize + "$", Pattern.CASE_INSENSITIVE);
195-
196+
String txtRationale = rb.getString("rationale", "#rationale");
197+
rationalePattern = Pattern.compile("^" + txtRationale + "$", Pattern.CASE_INSENSITIVE);
198+
199+
200+
201+
196202
QuestionGroup questionGroup = new QuestionGroup(name, description);
197203

198204
String cleanData = data;
@@ -274,6 +280,7 @@ private void parseLine(Question question, String line) {
274280
Matcher feedbackNOKMatcher = feedbackNOKPattern.matcher(line);
275281
boolean hasfeedbackNOK = feedbackNOKMatcher.find();
276282
boolean randomize = randomizePattern.matcher(line).find();
283+
boolean rationale = rationalePattern.matcher(line).find();
277284

278285
boolean isEMICorrectAnswer = extendedMatchingCorrectAnswersPattern.matcher(line).find();
279286

@@ -337,7 +344,21 @@ private void parseLine(Question question, String line) {
337344
question.getQuestionType() == Question.MULTIPLE_CHOICE_MULTIPLE_ANSWER_QUESTION) {
338345
question.setRandomize(randomize);
339346
}
340-
} else {
347+
348+
349+
} else if (rationale) {
350+
if (question.getQuestionType() == Question.MULTIPLE_CHOICE_QUESTION ||
351+
question.getQuestionType() == Question.MULTIPLE_CHOICE_MULTIPLE_ANSWER_QUESTION ||
352+
question.getQuestionType() == Question.TRUE_FALSE_QUESTION) {
353+
question.setRationale(rationale);
354+
}
355+
356+
357+
}
358+
359+
360+
361+
else {
341362
// If we didn't match anything, then assume it's just part of the question text
342363
question.append(line);
343364
}
@@ -728,6 +749,7 @@ private void processTrueFalseQuestion(SectionType section, Question question) {
728749

729750
buildMetaDataField(qtiMetaData, "qmd_itemtype", "True False");
730751
buildMetaDataField(qtiMetaData, "TEXT_FORMAT", "HTML");
752+
buildMetaDataField(qtiMetaData, "hasRationale", Boolean.valueOf(question.isRationale()).toString());
731753

732754
ItemrubricType itemRubric = item.addNewItemrubric();
733755
itemRubric.setView(ItemrubricType.View.ALL);
@@ -754,7 +776,7 @@ private void processMultipleChoiceQuestion(SectionType section, Question questio
754776

755777
buildMetaDataField(qtiMetaData, "qmd_itemtype", "Multiple Choice");
756778
buildMetaDataField(qtiMetaData, "TEXT_FORMAT", "HTML");
757-
buildMetaDataField(qtiMetaData, "hasRationale", "False");
779+
buildMetaDataField(qtiMetaData, "hasRationale", Boolean.valueOf(question.isRationale()).toString());
758780
buildMetaDataField(qtiMetaData, ItemMetaDataIfc.RANDOMIZE, Boolean.valueOf(question.isRandomize()).toString());
759781

760782
ItemrubricType itemRubric = item.addNewItemrubric();
@@ -786,7 +808,7 @@ private void processMultipleChoiceMultipleAnswerQuestion(SectionType section, Qu
786808

787809
buildMetaDataField(qtiMetaData, "qmd_itemtype", "Multiple Correct Answer");
788810
buildMetaDataField(qtiMetaData, "TEXT_FORMAT", "HTML");
789-
buildMetaDataField(qtiMetaData, "hasRationale", "False");
811+
buildMetaDataField(qtiMetaData, "hasRationale", Boolean.valueOf(question.isRationale()).toString());
790812
buildMetaDataField(qtiMetaData, ItemMetaDataIfc.RANDOMIZE, Boolean.valueOf(question.isRandomize()).toString());
791813

792814
ItemrubricType itemRubric = item.addNewItemrubric();

0 commit comments

Comments
 (0)