/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.ims.qti21;
import java.beans.Transient;
import java.util.Collection;
import org.olat.core.util.StringHelper;
import org.olat.ims.qti.process.AssessmentInstance;
import org.olat.ims.qti21.QTI21DeliveryOptions.ShowResultsOnFinish;
/**
*
* Initial date: 24 févr. 2017<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class QTI21AssessmentResultsOptions {
public static final String METADATA = "metadata";
public static final String SECTION_SUMMARY = "sectionsSummary";
public static final String QUESTION_SUMMARY = "questionSummary";
public static final String QUESTIONS = "questions";
public static final String USER_SOLUTIONS = "userSolutions";
public static final String CORRECT_SOLUTIONS = "correctSolutions";
private final boolean metadata;
private final boolean sectionSummary;
private final boolean questionSummary;
private final boolean questions;
private final boolean userSolutions;
private final boolean correctSolutions;
public QTI21AssessmentResultsOptions(boolean metadata, boolean sectionSummary,
boolean questionSummary, boolean questions,
boolean userSolutions, boolean correctSolutions) {
this.metadata = metadata;
this.sectionSummary = sectionSummary;
this.questionSummary = questionSummary;
this.questions = questions;
this.userSolutions = userSolutions;
this.correctSolutions = correctSolutions;
}
public boolean isMetadata() {
return metadata;
}
public boolean isSectionSummary() {
return sectionSummary;
}
public boolean isQuestionSummary() {
return questionSummary;
}
public boolean isQuestions() {
return questions;
}
public boolean isUserSolutions() {
return userSolutions;
}
public boolean isCorrectSolutions() {
return correctSolutions;
}
@Override
public QTI21AssessmentResultsOptions clone() {
return new QTI21AssessmentResultsOptions(metadata, sectionSummary, questionSummary, questions, userSolutions, correctSolutions);
}
@Transient
public boolean none() {
return !metadata && !sectionSummary && !questionSummary && !questions && !userSolutions && !correctSolutions;
}
@Transient
public static final QTI21AssessmentResultsOptions allOptions() {
return new QTI21AssessmentResultsOptions(true, true, true, true, true, true);
}
@Transient
public static final QTI21AssessmentResultsOptions noOptions() {
return new QTI21AssessmentResultsOptions(false, false, false, false, false, false);
}
@Transient
public static final QTI21AssessmentResultsOptions convert(ShowResultsOnFinish showResults) {
QTI21AssessmentResultsOptions options;
if(showResults == null) {
options = noOptions();
} else {
switch(showResults) {
case none: options = noOptions(); break;
case compact: options = new QTI21AssessmentResultsOptions(true, false, false, false, false, false); break;
case sections: options = new QTI21AssessmentResultsOptions(true, true, false, false, false, false); break;
case details: options = allOptions(); break;
default: options = noOptions();
}
}
return options;
}
public static QTI21AssessmentResultsOptions parseString(String value) {
if(StringHelper.containsNonWhitespace(value)) {
switch(value) {
case AssessmentInstance.QMD_ENTRY_SUMMARY_NONE: return noOptions();
case AssessmentInstance.QMD_ENTRY_SUMMARY_COMPACT: return new QTI21AssessmentResultsOptions(true, false, false, false, false, false);
case AssessmentInstance.QMD_ENTRY_SUMMARY_SECTION: return new QTI21AssessmentResultsOptions(true, true, false, false, false, false);
case AssessmentInstance.QMD_ENTRY_SUMMARY_DETAILED: return allOptions();
default: {
boolean metadata = value.contains(METADATA);
boolean sections = value.contains(SECTION_SUMMARY);
boolean questionSummary = value.contains(QUESTION_SUMMARY);
boolean questions = value.contains(QUESTIONS);
boolean userSolutions = value.contains(USER_SOLUTIONS);
boolean correctSolutions = value.contains(CORRECT_SOLUTIONS);
return new QTI21AssessmentResultsOptions(metadata, sections, questionSummary, questions, userSolutions, correctSolutions);
}
}
}
return noOptions();
}
public static String toString(Collection<String> selections) {
StringBuilder sb = new StringBuilder();
for(String selection:selections) {
if(sb.length() > 0) sb.append(",");
sb.append(selection);
}
return sb.toString();
}
}