use of de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingPlagiarismResult in project Artemis by ls1intum.
the class ModelingExerciseResource method getPlagiarismResult.
/**
* GET modeling-exercises/{exerciseId}/plagiarism-result
* <p>
* Return the latest plagiarism result or null, if no plagiarism was detected for this exercise yet.
*
* @param exerciseId ID of the modeling exercise for which the plagiarism result should be
* returned
* @return The ResponseEntity with status 200 (Ok) or with status 400 (Bad Request) if the
* parameters are invalid
*/
@GetMapping("modeling-exercises/{exerciseId}/plagiarism-result")
@PreAuthorize("hasRole('EDITOR')")
public ResponseEntity<ModelingPlagiarismResult> getPlagiarismResult(@PathVariable long exerciseId) {
log.debug("REST request to get the latest plagiarism result for the modeling exercise with id: {}", exerciseId);
ModelingExercise modelingExercise = modelingExerciseRepository.findByIdWithStudentParticipationsSubmissionsResultsElseThrow(exerciseId);
authCheckService.checkHasAtLeastRoleForExerciseElseThrow(Role.EDITOR, modelingExercise, null);
var plagiarismResult = plagiarismResultRepository.findFirstByExerciseIdOrderByLastModifiedDateDescOrNull(modelingExercise.getId());
if (plagiarismResult != null) {
for (var comparison : plagiarismResult.getComparisons()) {
comparison.setPlagiarismResult(null);
comparison.getSubmissionA().setPlagiarismComparison(null);
comparison.getSubmissionB().setPlagiarismComparison(null);
}
}
return ResponseEntity.ok((ModelingPlagiarismResult) plagiarismResult);
}
use of de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingPlagiarismResult in project Artemis by ls1intum.
the class ModelingExerciseIntegrationTest method testGetPlagiarismResultWithoutExercise.
@Test
@WithMockUser(username = "instructor1", roles = "INSTRUCTOR")
public void testGetPlagiarismResultWithoutExercise() throws Exception {
ModelingPlagiarismResult result = request.get("/api/modeling-exercises/" + 1 + "/plagiarism-result", HttpStatus.NOT_FOUND, ModelingPlagiarismResult.class);
assertThat(result).isNull();
}
use of de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingPlagiarismResult in project ArTEMiS by ls1intum.
the class ModelingExerciseResource method getPlagiarismResult.
/**
* GET modeling-exercises/{exerciseId}/plagiarism-result
* <p>
* Return the latest plagiarism result or null, if no plagiarism was detected for this exercise yet.
*
* @param exerciseId ID of the modeling exercise for which the plagiarism result should be
* returned
* @return The ResponseEntity with status 200 (Ok) or with status 400 (Bad Request) if the
* parameters are invalid
*/
@GetMapping("modeling-exercises/{exerciseId}/plagiarism-result")
@PreAuthorize("hasRole('EDITOR')")
public ResponseEntity<ModelingPlagiarismResult> getPlagiarismResult(@PathVariable long exerciseId) {
log.debug("REST request to get the latest plagiarism result for the modeling exercise with id: {}", exerciseId);
ModelingExercise modelingExercise = modelingExerciseRepository.findByIdWithStudentParticipationsSubmissionsResultsElseThrow(exerciseId);
authCheckService.checkHasAtLeastRoleForExerciseElseThrow(Role.EDITOR, modelingExercise, null);
var plagiarismResult = plagiarismResultRepository.findFirstByExerciseIdOrderByLastModifiedDateDescOrNull(modelingExercise.getId());
if (plagiarismResult != null) {
for (var comparison : plagiarismResult.getComparisons()) {
comparison.setPlagiarismResult(null);
comparison.getSubmissionA().setPlagiarismComparison(null);
comparison.getSubmissionB().setPlagiarismComparison(null);
}
}
return ResponseEntity.ok((ModelingPlagiarismResult) plagiarismResult);
}
use of de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingPlagiarismResult in project ArTEMiS by ls1intum.
the class ModelingExerciseResource method checkPlagiarism.
/**
* GET modeling-exercises/{exerciseId}/check-plagiarism
* <p>
* Start the automated plagiarism detection for the given exercise and return its result.
*
* @param exerciseId for which all submission should be checked
* @param similarityThreshold ignore comparisons whose similarity is below this threshold (%)
* @param minimumScore consider only submissions whose score is greater or equal to this
* value
* @param minimumSize consider only submissions whose size is greater or equal to this
* value
* @return the ResponseEntity with status 200 (OK) and the list of at most 500 pair-wise submissions with a similarity above the given threshold (e.g. 50%).
*/
@GetMapping("modeling-exercises/{exerciseId}/check-plagiarism")
@FeatureToggle(Feature.PlagiarismChecks)
@PreAuthorize("hasRole('INSTRUCTOR')")
public ResponseEntity<ModelingPlagiarismResult> checkPlagiarism(@PathVariable long exerciseId, @RequestParam float similarityThreshold, @RequestParam int minimumScore, @RequestParam int minimumSize) {
var modelingExercise = modelingExerciseRepository.findByIdWithStudentParticipationsSubmissionsResultsElseThrow(exerciseId);
authCheckService.checkHasAtLeastRoleForExerciseElseThrow(Role.INSTRUCTOR, modelingExercise, null);
long start = System.nanoTime();
log.info("Start modelingPlagiarismDetectionService.checkPlagiarism for exercise {}", exerciseId);
ModelingPlagiarismResult result = modelingPlagiarismDetectionService.checkPlagiarism(modelingExercise, similarityThreshold / 100, minimumSize, minimumScore);
log.info("Finished modelingPlagiarismDetectionService.checkPlagiarism call for {} comparisons in {}", result.getComparisons().size(), TimeLogUtil.formatDurationFrom(start));
// TODO: limit the amount temporarily because of database issues
result.sortAndLimit(100);
log.info("Limited number of comparisons to {} to avoid performance issues when saving to database", result.getComparisons().size());
start = System.nanoTime();
plagiarismResultRepository.savePlagiarismResultAndRemovePrevious(result);
log.info("Finished plagiarismResultRepository.savePlagiarismResultAndRemovePrevious call in {}", TimeLogUtil.formatDurationFrom(start));
for (var comparison : result.getComparisons()) {
comparison.setPlagiarismResult(null);
}
return ResponseEntity.ok(result);
}
use of de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingPlagiarismResult in project ArTEMiS by ls1intum.
the class ModelingExerciseIntegrationTest method testGetPlagiarismResult.
@Test
@WithMockUser(username = "instructor1", roles = "INSTRUCTOR")
public void testGetPlagiarismResult() throws Exception {
final Course course = database.addCourseWithOneModelingExercise();
ModelingExercise modelingExercise = modelingExerciseRepository.findByCourseIdWithCategories(course.getId()).get(0);
ModelingPlagiarismResult expectedResult = database.createModelingPlagiarismResultForExercise(modelingExercise);
ModelingPlagiarismResult result = request.get("/api/modeling-exercises/" + modelingExercise.getId() + "/plagiarism-result", HttpStatus.OK, ModelingPlagiarismResult.class);
assertThat(result.getId()).isEqualTo(expectedResult.getId());
}
Aggregations