Search in sources :

Example 6 with ModelingPlagiarismResult

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

Example 7 with ModelingPlagiarismResult

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();
}
Also used : ModelingPlagiarismResult(de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingPlagiarismResult) WithMockUser(org.springframework.security.test.context.support.WithMockUser) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 8 with ModelingPlagiarismResult

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

Example 9 with ModelingPlagiarismResult

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

Example 10 with ModelingPlagiarismResult

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());
}
Also used : ModelingPlagiarismResult(de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingPlagiarismResult) ModelingExercise(de.tum.in.www1.artemis.domain.modeling.ModelingExercise) WithMockUser(org.springframework.security.test.context.support.WithMockUser) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

ModelingPlagiarismResult (de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingPlagiarismResult)12 ModelingExercise (de.tum.in.www1.artemis.domain.modeling.ModelingExercise)6 ModelingSubmission (de.tum.in.www1.artemis.domain.modeling.ModelingSubmission)4 Test (org.junit.jupiter.api.Test)4 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)4 PreAuthorize (org.springframework.security.access.prepost.PreAuthorize)4 WithMockUser (org.springframework.security.test.context.support.WithMockUser)4 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2 JsonParser.parseString (com.google.gson.JsonParser.parseString)2 PlagiarismCheckState (de.tum.in.www1.artemis.domain.PlagiarismCheckState)2 Participation (de.tum.in.www1.artemis.domain.participation.Participation)2 PlagiarismComparison (de.tum.in.www1.artemis.domain.plagiarism.PlagiarismComparison)2 PlagiarismSubmission (de.tum.in.www1.artemis.domain.plagiarism.PlagiarismSubmission)2 ModelingSubmissionElement (de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingSubmissionElement)2 UMLDiagram (de.tum.in.www1.artemis.service.compass.umlmodel.UMLDiagram)2 UMLModelParser (de.tum.in.www1.artemis.service.compass.umlmodel.parsers.UMLModelParser)2 FeatureToggle (de.tum.in.www1.artemis.service.feature.FeatureToggle)2 IOException (java.io.IOException)2 java.util (java.util)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2