/** * <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.ui; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiColumnDef; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.translator.Translator; import org.olat.core.util.Formatter; import org.olat.course.assessment.AssessmentHelper; import org.olat.ims.qti21.AssessmentTestSession; import org.olat.ims.qti21.ui.QTI21AssessmentDetailsController.AssessmentTestSessionComparator; /** * * Initial date: 21.05.2015<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ public class QTI21TestSessionTableModel extends DefaultFlexiTableDataModel<AssessmentTestSession> { private final Translator translator; private AssessmentTestSession lastSession; public QTI21TestSessionTableModel(FlexiTableColumnModel columnModel, Translator translator) { super(columnModel); this.translator = translator; } @Override public DefaultFlexiTableDataModel<AssessmentTestSession> createCopyWithEmptyList() { return new QTI21TestSessionTableModel(getTableColumnModel(), translator); } @Override public Object getValueAt(int row, int col) { AssessmentTestSession session = getObject(row); switch(TSCols.values()[col]) { case terminationTime: { Date endTime = session.getTerminationTime(); if(endTime == null) { endTime = session.getFinishTime(); } return endTime; } case lastModified: return session.getLastModified(); case duration: { if(session.getFinishTime() != null) { return Formatter.formatDuration(session.getDuration().longValue()); } return "<span class='o_ochre'>" + translator.translate("assessment.test.open") + "</span>"; } case test: return session.getTestEntry().getDisplayname(); case results: { if(session.getFinishTime() != null) { return AssessmentHelper.getRoundedScore(session.getScore()); } return "<span class='o_ochre'>" + translator.translate("assessment.test.notReleased") + "</span>"; } case open: { Date finished = session.getFinishTime(); return finished == null ? Boolean.FALSE : Boolean.TRUE; } case correction: { return (lastSession != null && lastSession.equals(session)); } default: return "ERROR"; } } @Override public void setObjects(List<AssessmentTestSession> objects) { super.setObjects(objects); List<AssessmentTestSession> sessions = new ArrayList<>(objects); Collections.sort(sessions, new AssessmentTestSessionComparator()); if(sessions.size() > 0) { lastSession = sessions.get(0); } } public enum TSCols implements FlexiColumnDef { terminationTime("table.header.terminationTime"), lastModified("table.header.lastModified"), duration("table.header.duration"), test("table.header.test"), results("table.header.results"), open("table.header.action"), correction("table.header.action"); private final String i18nKey; private TSCols(String i18nKey) { this.i18nKey = i18nKey; } @Override public String i18nHeaderKey() { return i18nKey; } } }