Newer
Older
/**
* <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.course.assessment;
import java.io.File;
import java.util.List;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.stack.BreadcrumbPanel;
import org.olat.core.gui.components.stack.TooledStackedPanel;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.id.Identity;
import org.olat.course.ICourse;

uhensler
committed
import org.olat.course.assessment.handler.AssessmentConfig;
import org.olat.course.assessment.ui.tool.AssessmentCourseNodeController;
import org.olat.course.config.CourseConfig;
import org.olat.course.nodes.CourseNode;
import org.olat.course.run.scoring.AccountingEvaluators;
import org.olat.course.run.scoring.AssessmentEvaluation;
import org.olat.course.run.scoring.ScoreCalculator;
import org.olat.course.run.scoring.ScoreEvaluation;
import org.olat.course.run.userview.UserCourseEnvironment;
import org.olat.group.BusinessGroup;
import org.olat.modules.assessment.AssessmentEntry;
import org.olat.modules.assessment.Role;
import org.olat.modules.assessment.model.AssessmentEntryStatus;
import org.olat.modules.assessment.model.AssessmentRunStatus;
import org.olat.modules.assessment.ui.AssessmentToolContainer;
import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
import org.olat.repository.RepositoryEntry;
/**
*
* Initial date: 20 Aug 2019<br>
*
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public interface CourseAssessmentService {

uhensler
committed
public AssessmentConfig getAssessmentConfig(CourseNode courseNode);
public AccountingEvaluators getEvaluators(CourseNode courseNode, CourseConfig courseConfig);
/**
* Returns the persisted AssessmentEntry of the user. Check
* AssessmentConfig.isEvaluationPersisted() before invoking this method.
*
* @param courseNode
* @param userCourseEnvironment
* @return
*/
public AssessmentEntry getAssessmentEntry(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment);
/**
* Returns the current, persisted AssessmentEvaluation of the user for a course
* node. The loaded values are modified according to the AssessmentConfig of the
* course node, e.g. if a user has a saved score but the the score is disabled
* in the config, the AssessmentEvaluation has a score of null.
*
* @param courseNode
* @param userCourseEnvironment
* @return
*/
public AssessmentEvaluation getPersistedAssessmentEvaluation(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment);
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/**
* Converts the assessmentEntry to an AssessmentEvaluation in respect of the
* AssessmentConfig. If the assessmentEntry is null, the method returns
* AssessmentEvaluation.EMPTY_EVAL.
*
* @param assessmentEntry
* @param assessmentConfig
*
* @return
*/
public AssessmentEvaluation toAssessmentEvaluation(AssessmentEntry assessmentEntry, AssessmentConfig assessmentConfig);
/**
* Converts the assessmentEntry to an AssessmentEvaluation in respect of the
* AssessmentConfig of the courseNode. If the assessmentEntry is null, the
* method returns AssessmentEvaluation.EMPTY_EVAL.
*
* @param assessmentEntry
* @param courseNode
*
* @return
*/
public AssessmentEvaluation toAssessmentEvaluation(AssessmentEntry assessmentEntry, CourseNode courseNode);
/**
* This method implementation must not cache any results!
*
* The user has no scoring results yet (e.g. made no test yet), then the
* ScoreEvaluation.NA has to be returned!
*
* @param courseNode
* @param userCourseEnvironment
* @return null, if this node cannot deliver any useful scoring info (this is
* not the case for a test never tried or manual scoring: those have
* default values 0.0f / false for score/passed; currently only the
* STNode returns null, if there are no scoring rules defined.
*/
public AssessmentEvaluation getAssessmentEvaluation(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment);
public void updateScoreEvaluation(CourseNode courseNode, ScoreEvaluation scoreEvaluation,
UserCourseEnvironment userCourseEnvironment, Identity coachingIdentity, boolean incrementAttempts, Role by);
/**
* Returns the ScoreCalculator if the course nod can calculate its score. Check
* AssessmentConfig.isEvaluationCalculated() before invoking this method.
*
* @param courseNode
* @return
*/
public ScoreCalculator getScoreCalculator(CourseNode courseNode);
/**
*
* @param courseNode
* @param userCourseEnvironment
* @return The completion of its current task before being committed and
* official.
*/
public Double getCurrentRunCompletion(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment);
public void updateCurrentCompletion(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment,
Double currentCompletion, AssessmentRunStatus status, Role by);
public void updateCompletion(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment,
Double completion, AssessmentEntryStatus status, Role by);
public void updateFullyAssessed(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment,
Boolean fullyAssessed, AssessmentEntryStatus status, Role by);
/**
* @param courseNode
* @param userCourseEnvironment
* @return the users attempts of the node
*/
public Integer getAttempts(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment);
/**
* Increments the users attempts for this node and this user.
*
* @param courseNode
* @param userCourseEnvironment
* @param doneBy
*/
public void incrementAttempts(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment, Role doneBy);
/**
* Updates the users attempts for this node and this user.
*
* @param courseNode
* @param userAttempts
* @param userCourseEnvironment
* @param coachingIdentity
* @param doneBy
*/
public void updateAttempts(CourseNode courseNode, Integer userAttempts,
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
UserCourseEnvironment userCourseEnvironment, Identity coachingIdentity, Role doneBy);
/**
* @param courseNode
* @param userCourseEnvironment
* @return the user comment for this user for this node, given by coach
*/
public String getUserComment(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment);
/**
* Updates the user comment for this node and this user. This comment is visible
* to the user.
*
* @param courseNode
* @param userComment
* @param userCourseEnvironment
* @param coachingIdentity
*/
public void updatedUserComment(CourseNode courseNode, String userComment,
UserCourseEnvironment userCourseEnvironment, Identity coachingIdentity);
/**
* @param courseNode
* @param userCourseEnvironment
* @return The coach comment for this user for this node (not visible to user)
*/
public String getCoachComment(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment);
/**
* Updates the coach comment for this node and this user. This comment is not
* visible to the user.
*
* @param courseNode
* @param coachComment
* @param userCourseEnvironment
*/
public void updateCoachComment(CourseNode courseNode, String coachComment,
UserCourseEnvironment userCourseEnvironment);
/**
* @param courseNode
* @param userCourseEnvironment The course environment of the assessed user.
* @return The list of assessment document associated with this user and course
* element.
*/
public List<File> getIndividualAssessmentDocuments(CourseNode courseNode,
UserCourseEnvironment userCourseEnvironment);
/**
* Add a document for the assessed user, if allowed.
*
* @param courseNode
* @param document The document
* @param userCourseEnvironment The course environment of the assessed user
* @param coachingIdentity The coach who upload the document
*/
public void addIndividualAssessmentDocument(CourseNode courseNode, File document, String filename,
UserCourseEnvironment userCourseEnvironment, Identity coachingIdentity);
/**
* Remove a document.
*
* @param courseNode
* @param document The document to remove
* @param userCourseEnvironment The course environment of the assessed user
* @param coachingIdentity The coach who delete the document
*/
public void removeIndividualAssessmentDocument(CourseNode courseNode, File document,
UserCourseEnvironment userCourseEnvironment, Identity coachingIdentity);
/**
*
* @param courseNode
* @param userCourseEnvironment The user course environment of the assessed
* identity
* @param identity The identity which do the action
* @param doneBy The role of the identity which do the action
*/
public void updateLastModifications(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment,
Identity identity, Role doneBy);
/**
* @param courseNode
* @param userCourseEnvironment
* @return the users log of this node
*/
public String getAuditLog(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment);
/**
* Save the users achieved ScoreEvaluation for this node. If there is already a
* score property available, it will be overwritten with the new value.
*
* @param courseNode The course element
* @param identity The identity who make the changes
* @param scoreEvaluation The updated score evaluation
* @param userCourseEnvironment The user course env. of the assessed identity
* @param incrementUserAttempts
*/
public void saveScoreEvaluation(CourseNode courseNode, Identity identity, ScoreEvaluation scoreEvaluation,
UserCourseEnvironment userCourseEnvironment, boolean incrementUserAttempts, Role by);
/**
* Returns a controller to edit the node specific details. Check
* AssessmentConfig.hasEditableDetails() before invoking this method.
*
* @param ureq
* @param wControl
* @param courseNode
* @param userCourseEnvironment
* @return a controller or null
*/
public Controller getDetailsEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel,
CourseNode courseNode, UserCourseEnvironment coachCourseEnv, UserCourseEnvironment assessedUserCourseEnvironment);
/**
*
* @return whether this node has a custom controller for the identity list.
*/
public boolean hasCustomIdentityList(CourseNode courseNode);
/**
* Returns the controller with the list of assessed identities for a specific
* course node. Check hasCustomIdentityList(CourseNode courseNode) before invoking
* this method.
*
* @param ureq
* @param wControl
* @param stackPanel
* @param courseNode
* @param courseEntry
* @param group
* @param coachCourseEnv
* @param toolContainer
* @param assessmentCallback
* @return
*/
public AssessmentCourseNodeController getIdentityListController(UserRequest ureq, WindowControl wControl,
TooledStackedPanel stackPanel, CourseNode courseNode, RepositoryEntry courseEntry, BusinessGroup group,
UserCourseEnvironment coachCourseEnv, AssessmentToolContainer toolContainer,
AssessmentToolSecurityCallback assessmentCallback);
/**
* Recalculates all AssessmentEvaluation of all users in the course.
*
* @param course
*/
public void evaluateAll(ICourse course);