use of de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult in project Artemis by ls1intum.
the class ProgrammingExercisePlagiarismResource method checkPlagiarism.
/**
* GET /programming-exercises/{exerciseId}/check-plagiarism : Start the automated plagiarism detection for the given exercise and return its result.
*
* @param exerciseId The ID of the programming exercise for which the plagiarism check should be executed
* @param similarityThreshold ignore comparisons whose similarity is below this threshold (%)
* @param minimumScore consider only submissions whose score 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%).
* @throws ExitException is thrown if JPlag exits unexpectedly
* @throws IOException is thrown for file handling errors
*/
@GetMapping(CHECK_PLAGIARISM)
@PreAuthorize("hasRole('EDITOR')")
@FeatureToggle({ Feature.ProgrammingExercises, Feature.PlagiarismChecks })
public ResponseEntity<TextPlagiarismResult> checkPlagiarism(@PathVariable long exerciseId, @RequestParam float similarityThreshold, @RequestParam int minimumScore) throws ExitException, IOException {
ProgrammingExercise programmingExercise = programmingExerciseRepository.findByIdElseThrow(exerciseId);
authCheckService.checkHasAtLeastRoleForExerciseElseThrow(Role.EDITOR, programmingExercise, null);
ProgrammingLanguage language = programmingExercise.getProgrammingLanguage();
ProgrammingLanguageFeature programmingLanguageFeature = programmingLanguageFeatureService.get().getProgrammingLanguageFeatures(language);
if (!programmingLanguageFeature.isPlagiarismCheckSupported()) {
return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert(applicationName, true, ENTITY_NAME, "programmingLanguageNotSupported", "Artemis does not support plagiarism checks for the programming language " + language)).body(null);
}
long start = System.nanoTime();
log.info("Start programmingPlagiarismDetectionService.checkPlagiarism for exercise {}", exerciseId);
TextPlagiarismResult result = programmingPlagiarismDetectionService.checkPlagiarism(exerciseId, similarityThreshold, minimumScore);
log.info("Finished programmingExerciseExportService.checkPlagiarism call for {} comparisons in {}", result.getComparisons().size(), TimeLogUtil.formatDurationFrom(start));
for (var comparison : result.getComparisons()) {
comparison.setPlagiarismResult(null);
comparison.getSubmissionA().setPlagiarismComparison(null);
comparison.getSubmissionB().setPlagiarismComparison(null);
}
return ResponseEntity.ok(result);
}
use of de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult in project Artemis by ls1intum.
the class PlagiarismCaseIntegrationTest method initTestCase.
@BeforeEach
public void initTestCase() {
database.addUsers(3, 1, 1, 1);
course = database.addCourseWithOneFinishedTextExercise();
textExercise = textExerciseRepository.findByCourseIdWithCategories(course.getId()).get(0);
plagiarismCase1 = new PlagiarismCase();
plagiarismCase1.setExercise(textExercise);
User student1 = database.getUserByLogin("student1");
plagiarismCase1.setStudent(student1);
plagiarismCase1 = plagiarismCaseRepository.save(plagiarismCase1);
PlagiarismResult<TextSubmissionElement> textPlagiarismResult = database.createTextPlagiarismResultForExercise(textExercise);
PlagiarismComparison<TextSubmissionElement> plagiarismComparison = new PlagiarismComparison<>();
plagiarismComparison.setPlagiarismResult(textPlagiarismResult);
plagiarismComparison = plagiarismComparisonRepository.save(plagiarismComparison);
PlagiarismSubmission<TextSubmissionElement> plagiarismSubmission1 = new PlagiarismSubmission<>();
plagiarismSubmission1.setStudentLogin("student1");
plagiarismSubmission1.setPlagiarismCase(plagiarismCase1);
plagiarismSubmission1.setPlagiarismComparison(plagiarismComparison);
PlagiarismSubmission<TextSubmissionElement> plagiarismSubmission2 = new PlagiarismSubmission<>();
plagiarismSubmission2.setStudentLogin("student2");
plagiarismSubmission2.setPlagiarismCase(plagiarismCase1);
plagiarismSubmission2.setPlagiarismComparison(plagiarismComparison);
plagiarismComparison.setSubmissionA(plagiarismSubmission1);
plagiarismComparison.setSubmissionB(plagiarismSubmission2);
plagiarismComparisonRepository.save(plagiarismComparison);
plagiarismCase2 = new PlagiarismCase();
plagiarismCase2.setExercise(textExercise);
User student2 = database.getUserByLogin("student2");
plagiarismCase2.setStudent(student2);
plagiarismCase2 = plagiarismCaseRepository.save(plagiarismCase2);
plagiarismCase3 = new PlagiarismCase();
plagiarismCase3.setExercise(textExercise);
User student3 = database.getUserByLogin("student3");
plagiarismCase3.setStudent(student3);
plagiarismCase3 = plagiarismCaseRepository.save(plagiarismCase3);
}
use of de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult in project ArTEMiS by ls1intum.
the class SingleUserNotificationServiceTest method setUp.
/**
* Sets up all needed mocks and their wanted behavior
*/
@BeforeEach
public void setUp() {
SecurityUtils.setAuthorizationObject();
course = database.createCourse();
List<User> users = database.addUsers(3, 0, 0, 0);
user = users.get(0);
exercise = new TextExercise();
exercise.setCourse(course);
exercise.setMaxPoints(10D);
fileUploadExercise = new FileUploadExercise();
fileUploadExercise.setCourse(course);
Lecture lecture = new Lecture();
lecture.setCourse(course);
post = new Post();
post.setExercise(exercise);
post.setLecture(lecture);
post.setAuthor(user);
post.setCourse(course);
PlagiarismSubmission<TextSubmissionElement> plagiarismSubmission = new PlagiarismSubmission<>();
plagiarismSubmission.setStudentLogin(user.getLogin());
TextPlagiarismResult plagiarismResult = new TextPlagiarismResult();
plagiarismResult.setExercise(exercise);
plagiarismComparison = new PlagiarismComparison<>();
plagiarismComparison.setSubmissionA(plagiarismSubmission);
plagiarismComparison.setPlagiarismResult(plagiarismResult);
plagiarismCase = new PlagiarismCase();
plagiarismCase.setExercise(exercise);
result = new Result();
result.setScore(1D);
result.setCompletionDate(ZonedDateTime.now().minusMinutes(1));
doNothing().when(javaMailSender).send(any(MimeMessage.class));
}
use of de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult in project ArTEMiS by ls1intum.
the class PlagiarismCaseIntegrationTest method initTestCase.
@BeforeEach
public void initTestCase() {
database.addUsers(3, 1, 1, 1);
course = database.addCourseWithOneFinishedTextExercise();
textExercise = textExerciseRepository.findByCourseIdWithCategories(course.getId()).get(0);
plagiarismCase1 = new PlagiarismCase();
plagiarismCase1.setExercise(textExercise);
User student1 = database.getUserByLogin("student1");
plagiarismCase1.setStudent(student1);
plagiarismCase1 = plagiarismCaseRepository.save(plagiarismCase1);
PlagiarismResult<TextSubmissionElement> textPlagiarismResult = database.createTextPlagiarismResultForExercise(textExercise);
PlagiarismComparison<TextSubmissionElement> plagiarismComparison = new PlagiarismComparison<>();
plagiarismComparison.setPlagiarismResult(textPlagiarismResult);
plagiarismComparison = plagiarismComparisonRepository.save(plagiarismComparison);
PlagiarismSubmission<TextSubmissionElement> plagiarismSubmission1 = new PlagiarismSubmission<>();
plagiarismSubmission1.setStudentLogin("student1");
plagiarismSubmission1.setPlagiarismCase(plagiarismCase1);
plagiarismSubmission1.setPlagiarismComparison(plagiarismComparison);
PlagiarismSubmission<TextSubmissionElement> plagiarismSubmission2 = new PlagiarismSubmission<>();
plagiarismSubmission2.setStudentLogin("student2");
plagiarismSubmission2.setPlagiarismCase(plagiarismCase1);
plagiarismSubmission2.setPlagiarismComparison(plagiarismComparison);
plagiarismComparison.setSubmissionA(plagiarismSubmission1);
plagiarismComparison.setSubmissionB(plagiarismSubmission2);
plagiarismComparisonRepository.save(plagiarismComparison);
plagiarismCase2 = new PlagiarismCase();
plagiarismCase2.setExercise(textExercise);
User student2 = database.getUserByLogin("student2");
plagiarismCase2.setStudent(student2);
plagiarismCase2 = plagiarismCaseRepository.save(plagiarismCase2);
plagiarismCase3 = new PlagiarismCase();
plagiarismCase3.setExercise(textExercise);
User student3 = database.getUserByLogin("student3");
plagiarismCase3.setStudent(student3);
plagiarismCase3 = plagiarismCaseRepository.save(plagiarismCase3);
}
use of de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult in project Artemis by ls1intum.
the class ProgrammingExercisePlagiarismResource method getPlagiarismResult.
/**
* GET /programming-exercises/{exerciseId}/plagiarism-result : Return the latest plagiarism result or null, if no plagiarism was detected for this exercise yet.
*
* @param exerciseId ID of the programming 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(PLAGIARISM_RESULT)
@PreAuthorize("hasRole('EDITOR')")
@FeatureToggle(Feature.ProgrammingExercises)
public ResponseEntity<TextPlagiarismResult> getPlagiarismResult(@PathVariable long exerciseId) {
log.debug("REST request to get the latest plagiarism result for the programming exercise with id: {}", exerciseId);
ProgrammingExercise programmingExercise = programmingExerciseRepository.findByIdElseThrow(exerciseId);
authCheckService.checkHasAtLeastRoleForExerciseElseThrow(Role.EDITOR, programmingExercise, null);
var plagiarismResult = plagiarismResultRepository.findFirstByExerciseIdOrderByLastModifiedDateDescOrNull(programmingExercise.getId());
if (plagiarismResult != null) {
for (var comparison : plagiarismResult.getComparisons()) {
comparison.setPlagiarismResult(null);
comparison.getSubmissionA().setPlagiarismComparison(null);
comparison.getSubmissionB().setPlagiarismComparison(null);
}
}
return ResponseEntity.ok((TextPlagiarismResult) plagiarismResult);
}
Aggregations