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;
}
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);
}
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);
}
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);
}
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());
}
Aggregations