Search in sources :

Example 81 with ModelingExercise

use of de.tum.in.www1.artemis.domain.modeling.ModelingExercise in project Artemis by ls1intum.

the class CompassService method getSuggestionResult.

/**
 * Selects the feedback suggestion for each element in submission and creates a result from them
 * Returns null if no feedback can be selected or the submission has already a manual feedback
 *
 * @param modelingSubmission the submission to select feedbacks for
 * @param modelingExercise the modeling exercise to which the submission belongs
 * @return the semi-automatic result that has the feedbacks inside
 */
public Result getSuggestionResult(ModelingSubmission modelingSubmission, ModelingExercise modelingExercise) {
    Result result = getAutomaticResultForSubmission(modelingSubmission);
    if (result != null) {
        List<Feedback> feedbacksForSuggestion = new ArrayList<>();
        ModelClusterFactory clusterBuilder = new ModelClusterFactory();
        List<UMLElement> elements = clusterBuilder.getModelElements(modelingSubmission);
        List<ModelElement> modelElements = modelElementRepository.findByModelElementIdIn(elements.stream().map(UMLElement::getJSONElementID).collect(Collectors.toList()));
        List<Long> clusterIds = modelElements.stream().map(ModelElement::getCluster).map(ModelCluster::getId).collect(Collectors.toList());
        List<ModelCluster> modelClusters = modelClusterRepository.findAllByIdInWithEagerElements(clusterIds);
        List<String> references = modelClusters.stream().flatMap(modelCluster -> modelCluster.getModelElements().stream()).map(modelElement1 -> modelElement1.getModelElementType() + ":" + modelElement1.getModelElementId()).collect(Collectors.toList());
        List<Feedback> feedbacks = feedbackRepository.findByReferenceInAndResult_Submission_Participation_Exercise(references, modelingExercise);
        for (ModelElement modelElement : modelElements) {
            if (modelElement != null) {
                ModelCluster cluster = modelClusters.get(modelClusters.indexOf(modelElement.getCluster()));
                Set<ModelElement> similarElements = cluster.getModelElements();
                List<String> similarReferences = similarElements.stream().map(element -> element.getModelElementType() + ":" + element.getModelElementId()).toList();
                List<Feedback> similarFeedbacks = feedbacks.stream().filter(feedback -> similarReferences.contains(feedback.getReference())).collect(Collectors.toList());
                Feedback suggestedFeedback = FeedbackSelector.selectFeedback(modelElement, similarFeedbacks, result);
                if (suggestedFeedback != null) {
                    feedbacksForSuggestion.add(suggestedFeedback);
                }
            }
        }
        if (feedbacksForSuggestion.isEmpty()) {
            return null;
        }
        // Note, that a result is always initialized with an empty list -> no NPE here
        result.getFeedbacks().clear();
        result.getFeedbacks().addAll(feedbacksForSuggestion);
        result.setHasFeedback(false);
        result.setAssessmentType(AssessmentType.SEMI_AUTOMATIC);
    }
    return result;
}
Also used : java.util(java.util) Feedback(de.tum.in.www1.artemis.domain.Feedback) Logger(org.slf4j.Logger) FeedbackSelector(de.tum.in.www1.artemis.service.compass.controller.FeedbackSelector) de.tum.in.www1.artemis.repository(de.tum.in.www1.artemis.repository) TimeLogUtil(de.tum.in.www1.artemis.service.util.TimeLogUtil) LoggerFactory(org.slf4j.LoggerFactory) AssessmentType(de.tum.in.www1.artemis.domain.enumeration.AssessmentType) Collectors(java.util.stream.Collectors) UMLElement(de.tum.in.www1.artemis.service.compass.umlmodel.UMLElement) Result(de.tum.in.www1.artemis.domain.Result) ModelElement(de.tum.in.www1.artemis.domain.modeling.ModelElement) ModelClusterFactory(de.tum.in.www1.artemis.service.compass.controller.ModelClusterFactory) Service(org.springframework.stereotype.Service) ModelCluster(de.tum.in.www1.artemis.domain.modeling.ModelCluster) ModelingSubmission(de.tum.in.www1.artemis.domain.modeling.ModelingSubmission) StudentParticipation(de.tum.in.www1.artemis.domain.participation.StudentParticipation) ModelingExercise(de.tum.in.www1.artemis.domain.modeling.ModelingExercise) UMLElement(de.tum.in.www1.artemis.service.compass.umlmodel.UMLElement) ModelCluster(de.tum.in.www1.artemis.domain.modeling.ModelCluster) Result(de.tum.in.www1.artemis.domain.Result) ModelClusterFactory(de.tum.in.www1.artemis.service.compass.controller.ModelClusterFactory) ModelElement(de.tum.in.www1.artemis.domain.modeling.ModelElement) Feedback(de.tum.in.www1.artemis.domain.Feedback)

Example 82 with ModelingExercise

use of de.tum.in.www1.artemis.domain.modeling.ModelingExercise in project Artemis by ls1intum.

the class InstanceMessageReceiveService method processModelingExerciseInstantClustering.

public void processModelingExerciseInstantClustering(Long exerciseId) {
    log.info("Received schedule instant clustering for modeling exercise {}", exerciseId);
    ModelingExercise modelingExercise = modelingExerciseRepository.findByIdElseThrow(exerciseId);
    modelingExerciseScheduleService.scheduleExerciseForInstant(modelingExercise);
}
Also used : ModelingExercise(de.tum.in.www1.artemis.domain.modeling.ModelingExercise)

Example 83 with ModelingExercise

use of de.tum.in.www1.artemis.domain.modeling.ModelingExercise in project Artemis by ls1intum.

the class InstanceMessageReceiveService method processScheduleModelingExercise.

public void processScheduleModelingExercise(Long exerciseId) {
    log.info("Received schedule update for modeling exercise {}", exerciseId);
    ModelingExercise modelingExercise = modelingExerciseRepository.findByIdElseThrow(exerciseId);
    modelingExerciseScheduleService.updateScheduling(modelingExercise);
}
Also used : ModelingExercise(de.tum.in.www1.artemis.domain.modeling.ModelingExercise)

Example 84 with ModelingExercise

use of de.tum.in.www1.artemis.domain.modeling.ModelingExercise in project Artemis by ls1intum.

the class FileUploadSubmissionIntegrationTest method getFileUploadSubmissionWithoutAssessment_wrongExerciseType.

@Test
@WithMockUser(username = "tutor1", roles = "TA")
public void getFileUploadSubmissionWithoutAssessment_wrongExerciseType() throws Exception {
    Course course = database.addCourseWithOneModelingExercise();
    ModelingExercise modelingExercise = database.findModelingExerciseWithTitle(course.getExercises(), "ClassDiagram");
    request.get("/api/exercises/" + modelingExercise.getId() + "/file-upload-submission-without-assessment", HttpStatus.BAD_REQUEST, FileUploadSubmission.class);
}
Also used : ModelingExercise(de.tum.in.www1.artemis.domain.modeling.ModelingExercise) WithMockUser(org.springframework.security.test.context.support.WithMockUser) Test(org.junit.jupiter.api.Test)

Example 85 with ModelingExercise

use of de.tum.in.www1.artemis.domain.modeling.ModelingExercise in project Artemis by ls1intum.

the class ExampleSubmissionIntegrationTest method importExampleSubmissionWithModelingSubmission.

@Test
@WithMockUser(username = "instructor1", roles = "INSTRUCTOR")
public void importExampleSubmissionWithModelingSubmission() throws Exception {
    Submission submission = ModelFactory.generateModelingSubmission(validModel, true);
    submission = database.addModelingSubmission(modelingExercise, (ModelingSubmission) submission, "student1");
    database.addResultToSubmission(submission, AssessmentType.MANUAL);
    ExampleSubmission exampleSubmission = importExampleSubmission(modelingExercise.getId(), submission.getId(), HttpStatus.OK);
    assertThat(exampleSubmission.getId()).isNotNull();
    assertThat(((ModelingSubmission) exampleSubmission.getSubmission()).getModel()).isEqualTo(((ModelingSubmission) submission).getModel());
    assertThat(exampleSubmission.getSubmission().getLatestResult().getScore()).isEqualTo(submission.getLatestResult().getScore());
}
Also used : ModelingSubmission(de.tum.in.www1.artemis.domain.modeling.ModelingSubmission) ModelingSubmission(de.tum.in.www1.artemis.domain.modeling.ModelingSubmission) WithMockUser(org.springframework.security.test.context.support.WithMockUser) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

ModelingExercise (de.tum.in.www1.artemis.domain.modeling.ModelingExercise)196 WithMockUser (org.springframework.security.test.context.support.WithMockUser)132 Test (org.junit.jupiter.api.Test)126 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)96 ModelingSubmission (de.tum.in.www1.artemis.domain.modeling.ModelingSubmission)72 ModelingPlagiarismResult (de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingPlagiarismResult)28 ExerciseGroup (de.tum.in.www1.artemis.domain.exam.ExerciseGroup)26 StudentParticipation (de.tum.in.www1.artemis.domain.participation.StudentParticipation)20 AbstractSpringIntegrationBambooBitbucketJiraTest (de.tum.in.www1.artemis.AbstractSpringIntegrationBambooBitbucketJiraTest)16 TextPlagiarismResult (de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult)16 BeforeEach (org.junit.jupiter.api.BeforeEach)16 Course (de.tum.in.www1.artemis.domain.Course)14 PreAuthorize (org.springframework.security.access.prepost.PreAuthorize)14 ZonedDateTime (java.time.ZonedDateTime)12 Exam (de.tum.in.www1.artemis.domain.exam.Exam)10 QuizExercise (de.tum.in.www1.artemis.domain.quiz.QuizExercise)10 TeamAssignmentPayload (de.tum.in.www1.artemis.web.websocket.dto.TeamAssignmentPayload)9 JsonParser.parseString (com.google.gson.JsonParser.parseString)8 StudentExam (de.tum.in.www1.artemis.domain.exam.StudentExam)8 ModelCluster (de.tum.in.www1.artemis.domain.modeling.ModelCluster)8