use of org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder.TextEntry in project OpenOLAT by OpenOLAT.
the class CorrectResponsesUtil method getCorrectTextResponses.
public static final AbstractEntry getCorrectTextResponses(AssessmentItem assessmentItem, TextEntryInteraction interaction) {
ResponseDeclaration responseDeclaration = assessmentItem.getResponseDeclaration(interaction.getResponseIdentifier());
if (responseDeclaration.hasBaseType(BaseType.STRING) && responseDeclaration.hasCardinality(Cardinality.SINGLE)) {
TextEntry textEntry = new TextEntry(interaction);
FIBAssessmentItemBuilder.extractTextEntrySettingsFromResponseDeclaration(textEntry, responseDeclaration, new AtomicInteger(), new DoubleAdder());
return textEntry;
} else if (responseDeclaration.hasBaseType(BaseType.FLOAT) && responseDeclaration.hasCardinality(Cardinality.SINGLE)) {
NumericalEntry numericalEntry = new NumericalEntry(interaction);
FIBAssessmentItemBuilder.extractNumericalEntrySettings(assessmentItem, numericalEntry, responseDeclaration, new AtomicInteger(), new DoubleAdder());
return numericalEntry;
}
return null;
}
use of org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder.TextEntry in project OpenOLAT by OpenOLAT.
the class TextEntryInteractionsStatisticsController method getFIB.
private Series getFIB() {
List<AbstractTextEntryInteractionStatistics> processedAnswers = qtiStatisticsManager.getTextEntryInteractionsStatistic(itemRef.getIdentifier().toString(), assessmentItem, interactions, resourceResult.getSearchParams());
boolean survey = QTIType.survey.equals(resourceResult.getType());
int numOfParticipants = resourceResult.getQTIStatisticAssessment().getNumOfParticipants();
int i = 0;
String cssColor = survey ? "bar_default" : "bar_green";
String color = survey ? null : "green";
BarSeries d1 = new BarSeries(cssColor, color, null);
List<ResponseInfos> responseInfos = new ArrayList<>();
for (AbstractTextEntryInteractionStatistics entry : processedAnswers) {
String label = Integer.toString(++i);
String answerString = entry.getCorrectResponse();
d1.add(entry.getNumOfCorrect(), label, cssColor);
StringBuilder text = new StringBuilder();
text.append(answerString);
if (entry instanceof TextEntryInteractionStatistics) {
TextEntryInteractionStatistics textEntry = (TextEntryInteractionStatistics) entry;
if (textEntry.getAlternatives().size() > 1) {
text.append(" [");
for (int j = 1; j < textEntry.getAlternatives().size(); j++) {
if (j > 1)
text.append(", ");
text.append(textEntry.getAlternatives().get(j));
}
text.append("]");
}
}
Float score = entry.getPoints() == null ? null : entry.getPoints().floatValue();
responseInfos.add(new ResponseInfos(label, text.toString(), entry.getWrongAnswers(), score, true, survey, false));
}
List<BarSeries> serieList = Collections.singletonList(d1);
Series series = new Series(serieList, responseInfos, numOfParticipants, false);
series.setChartType(SeriesFactory.BAR_ANSWERED);
series.setItemCss("o_mi_qtifib");
return series;
}
use of org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder.TextEntry in project OpenOLAT by OpenOLAT.
the class FIBAssessmentItemBuilder method buildResponseAndOutcomeDeclarations.
@Override
protected void buildResponseAndOutcomeDeclarations() {
List<ResponseDeclaration> responseDeclarations = assessmentItem.getResponseDeclarations();
/*
<responseDeclaration identifier="RESPONSE_1" cardinality="single" baseType="string">
<correctResponse>
<value>
Gap
</value>
</correctResponse>
<mapping defaultValue="0">
<mapEntry mapKey="Gap" mappedValue="2" />
<mapEntry mapKey="gap1" mappedValue="2" />
<mapEntry mapKey="gap2" mappedValue="1" />
</mapping>
</responseDeclaration>
*/
for (Map.Entry<String, AbstractEntry> textEntryEntry : responseIdentifierToTextEntry.entrySet()) {
AbstractEntry entry = textEntryEntry.getValue();
if (entry instanceof TextEntry) {
TextEntry textEntry = (TextEntry) entry;
if (textEntry.getSolution() != null) {
Double score = -1.0d;
if (scoreEvaluation == ScoreEvaluation.perAnswer) {
score = textEntry.getScore();
}
ResponseDeclaration responseDeclaration = createTextEntryResponseDeclaration(assessmentItem, textEntry.getResponseIdentifier(), textEntry.getSolution(), score, textEntry.isCaseSensitive(), textEntry.getAlternatives());
responseDeclarations.add(responseDeclaration);
}
} else if (entry instanceof NumericalEntry) {
NumericalEntry textEntry = (NumericalEntry) entry;
if (textEntry.getSolution() != null) {
ResponseDeclaration responseDeclaration = createNumericalEntryResponseDeclaration(assessmentItem, textEntry.getResponseIdentifier(), textEntry.getSolution());
responseDeclarations.add(responseDeclaration);
}
}
}
}
use of org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder.TextEntry in project openolat by klemens.
the class FIBAssessmentItemBuilder method buildResponseAndOutcomeDeclarations.
@Override
protected void buildResponseAndOutcomeDeclarations() {
List<ResponseDeclaration> responseDeclarations = assessmentItem.getResponseDeclarations();
/*
<responseDeclaration identifier="RESPONSE_1" cardinality="single" baseType="string">
<correctResponse>
<value>
Gap
</value>
</correctResponse>
<mapping defaultValue="0">
<mapEntry mapKey="Gap" mappedValue="2" />
<mapEntry mapKey="gap1" mappedValue="2" />
<mapEntry mapKey="gap2" mappedValue="1" />
</mapping>
</responseDeclaration>
*/
for (Map.Entry<String, AbstractEntry> textEntryEntry : responseIdentifierToTextEntry.entrySet()) {
AbstractEntry entry = textEntryEntry.getValue();
if (entry instanceof TextEntry) {
TextEntry textEntry = (TextEntry) entry;
if (textEntry.getSolution() != null) {
Double score = -1.0d;
if (scoreEvaluation == ScoreEvaluation.perAnswer) {
score = textEntry.getScore();
}
ResponseDeclaration responseDeclaration = createTextEntryResponseDeclaration(assessmentItem, textEntry.getResponseIdentifier(), textEntry.getSolution(), score, textEntry.isCaseSensitive(), textEntry.getAlternatives());
responseDeclarations.add(responseDeclaration);
}
} else if (entry instanceof NumericalEntry) {
NumericalEntry textEntry = (NumericalEntry) entry;
if (textEntry.getSolution() != null) {
ResponseDeclaration responseDeclaration = createNumericalEntryResponseDeclaration(assessmentItem, textEntry.getResponseIdentifier(), textEntry.getSolution());
responseDeclarations.add(responseDeclaration);
}
}
}
}
use of org.olat.ims.qti21.model.xml.interactions.FIBAssessmentItemBuilder.TextEntry in project openolat by klemens.
the class FIBAssessmentItemBuilder method extractEntriesSettingsFromResponseDeclaration.
/**
* We loop around the textEntryInteraction, search the responseDeclaration. responseDeclaration
* of type string are gap text, of type float are numerical.
*/
public void extractEntriesSettingsFromResponseDeclaration() {
DoubleAdder mappedScore = new DoubleAdder();
AtomicInteger countAlternatives = new AtomicInteger(0);
responseIdentifierToTextEntry = new HashMap<>();
List<Interaction> interactions = assessmentItem.getItemBody().findInteractions();
for (Interaction interaction : interactions) {
if (interaction instanceof TextEntryInteraction && interaction.getResponseIdentifier() != null) {
AbstractEntry entry = null;
TextEntryInteraction textInteraction = (TextEntryInteraction) interaction;
ResponseDeclaration responseDeclaration = assessmentItem.getResponseDeclaration(interaction.getResponseIdentifier());
if (responseDeclaration != null) {
if (responseDeclaration.hasBaseType(BaseType.STRING) && responseDeclaration.hasCardinality(Cardinality.SINGLE)) {
TextEntry textEntry = new TextEntry(textInteraction);
extractTextEntrySettingsFromResponseDeclaration(textEntry, responseDeclaration, countAlternatives, mappedScore);
String marker = "responseIdentifier=\"" + interaction.getResponseIdentifier().toString() + "\"";
question = question.replace(marker, marker + " openolatType=\"string\"");
if (StringHelper.containsNonWhitespace(textEntry.getSolution())) {
question = question.replace(marker, marker + " data-qti-solution=\"" + escapeForDataQtiSolution(textEntry.getSolution()) + "\"");
}
entry = textEntry;
} else if (responseDeclaration.hasBaseType(BaseType.FLOAT) && responseDeclaration.hasCardinality(Cardinality.SINGLE)) {
NumericalEntry numericalEntry = new NumericalEntry(textInteraction);
entry = numericalEntry;
extractNumericalEntrySettings(assessmentItem, numericalEntry, responseDeclaration, countAlternatives, mappedScore);
String marker = "responseIdentifier=\"" + interaction.getResponseIdentifier().toString() + "\"";
question = question.replace(marker, marker + " openolatType=\"float\"");
if (numericalEntry.getSolution() != null) {
question = question.replace(marker, marker + " data-qti-solution=\"" + Double.toString(numericalEntry.getSolution()) + "\"");
}
}
}
if (entry != null) {
responseIdentifierToTextEntry.put(interaction.getResponseIdentifier().toString(), entry);
}
}
}
boolean hasMapping = Math.abs(mappedScore.doubleValue() - (-1.0 * countAlternatives.get())) > 0.0001;
scoreEvaluation = hasMapping ? ScoreEvaluation.perAnswer : ScoreEvaluation.allCorrectAnswers;
}
Aggregations