Search in sources :

Example 21 with TextPlagiarismResult

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);
}
Also used : TextPlagiarismResult(de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult) ProgrammingExercise(de.tum.in.www1.artemis.domain.ProgrammingExercise) ProgrammingLanguage(de.tum.in.www1.artemis.domain.enumeration.ProgrammingLanguage) ProgrammingLanguageFeature(de.tum.in.www1.artemis.service.programming.ProgrammingLanguageFeature) FeatureToggle(de.tum.in.www1.artemis.service.feature.FeatureToggle) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize)

Example 22 with TextPlagiarismResult

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);
}
Also used : User(de.tum.in.www1.artemis.domain.User) WithMockUser(org.springframework.security.test.context.support.WithMockUser) TextSubmissionElement(de.tum.in.www1.artemis.domain.plagiarism.text.TextSubmissionElement) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 23 with TextPlagiarismResult

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));
}
Also used : Post(de.tum.in.www1.artemis.domain.metis.Post) TextPlagiarismResult(de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult) PlagiarismCase(de.tum.in.www1.artemis.domain.plagiarism.PlagiarismCase) TextPlagiarismResult(de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult) MimeMessage(javax.mail.internet.MimeMessage) PlagiarismSubmission(de.tum.in.www1.artemis.domain.plagiarism.PlagiarismSubmission) TextSubmissionElement(de.tum.in.www1.artemis.domain.plagiarism.text.TextSubmissionElement) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 24 with TextPlagiarismResult

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);
}
Also used : User(de.tum.in.www1.artemis.domain.User) WithMockUser(org.springframework.security.test.context.support.WithMockUser) TextSubmissionElement(de.tum.in.www1.artemis.domain.plagiarism.text.TextSubmissionElement) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 25 with TextPlagiarismResult

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);
}
Also used : ProgrammingExercise(de.tum.in.www1.artemis.domain.ProgrammingExercise) FeatureToggle(de.tum.in.www1.artemis.service.feature.FeatureToggle) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize)

Aggregations

TextPlagiarismResult (de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult)31 TextSubmissionElement (de.tum.in.www1.artemis.domain.plagiarism.text.TextSubmissionElement)25 PlagiarismComparison (de.tum.in.www1.artemis.domain.plagiarism.PlagiarismComparison)23 WithMockUser (org.springframework.security.test.context.support.WithMockUser)23 PlagiarismSubmission (de.tum.in.www1.artemis.domain.plagiarism.PlagiarismSubmission)22 Course (de.tum.in.www1.artemis.domain.Course)21 TextExercise (de.tum.in.www1.artemis.domain.TextExercise)21 Test (org.junit.jupiter.api.Test)21 PlagiarismComparisonStatusDTO (de.tum.in.www1.artemis.web.rest.dto.PlagiarismComparisonStatusDTO)6 ProgrammingExercise (de.tum.in.www1.artemis.domain.ProgrammingExercise)4 Post (de.tum.in.www1.artemis.domain.metis.Post)4 PlagiarismCase (de.tum.in.www1.artemis.domain.plagiarism.PlagiarismCase)4 FeatureToggle (de.tum.in.www1.artemis.service.feature.FeatureToggle)4 BeforeEach (org.junit.jupiter.api.BeforeEach)4 PreAuthorize (org.springframework.security.access.prepost.PreAuthorize)4 JPlag (de.jplag.JPlag)2 JPlagResult (de.jplag.JPlagResult)2 JPlagOptions (de.jplag.options.JPlagOptions)2 TextSubmission (de.tum.in.www1.artemis.domain.TextSubmission)2 User (de.tum.in.www1.artemis.domain.User)2