From b227bd357a8ec40a8fca2f587eeeeebccfeecdcc Mon Sep 17 00:00:00 2001 From: bnitsch Date: Tue, 6 Aug 2024 09:28:49 +0200 Subject: [PATCH] changes --- .../observation/QuestionObservation.java | 36 ++++++++++--------- .../service/ElasticDataService.java | 4 +-- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/studymanager-observation/src/main/java/io/redlink/more/studymanager/component/observation/QuestionObservation.java b/studymanager-observation/src/main/java/io/redlink/more/studymanager/component/observation/QuestionObservation.java index ca6436f6..03034340 100644 --- a/studymanager-observation/src/main/java/io/redlink/more/studymanager/component/observation/QuestionObservation.java +++ b/studymanager-observation/src/main/java/io/redlink/more/studymanager/component/observation/QuestionObservation.java @@ -120,48 +120,52 @@ public DataView getView(String viewName, Integer studyGroupId, Integer participa return new DataView( dataView, dataView.chartType(), - addMissingAnswerOptions(viewName, dataViewData) + addMissingAnswerOptions(dataView, dataViewData) ); } - private DataViewData addMissingAnswerOptions(String viewName, DataViewData dataViewData) { + private DataViewData addMissingAnswerOptions(DataViewInfoType dataView, DataViewData dataViewData) { ArrayList allPossibleAnswerOptions = (ArrayList) this.properties.get("answers"); + List labels = new ArrayList<>(dataViewData.labels()); + List rows = new ArrayList<>(dataViewData.rows()); - switch (viewName) { - case "response_distribution": + switch (dataView) { + case response_distribution: if (allPossibleAnswerOptions.size() == dataViewData.labels().size() || dataViewData.labels().isEmpty()) { return dataViewData; } for (String item : allPossibleAnswerOptions) { - if (!dataViewData.labels().contains(item)) { - dataViewData.labels().add(item); - dataViewData.rows().get(0).values().add(0.0); + if (!labels.contains(item)) { + labels.add(item); + if (!rows.isEmpty()) { + rows.get(0).values().add(0.0); + } } } break; - case "answers_by_group": + case answers_by_group: if (allPossibleAnswerOptions.size() == dataViewData.rows().size() || dataViewData.rows().isEmpty()) { return dataViewData; } for (String item : allPossibleAnswerOptions) { - if (dataViewData.rows().stream().noneMatch(v -> v.label().equals(item))) { + if (rows.stream().noneMatch(v -> v.label().equals(item))) { ArrayList values = Stream.generate(() -> (Double) null) - .limit(dataViewData.labels().size()).collect(Collectors.toCollection(ArrayList::new)); + .limit(labels.size()).collect(Collectors.toCollection(ArrayList::new)); - dataViewData.rows().add(new DataViewRow(item, values)); + rows.add(new DataViewRow(item, values)); } } break; - case "group_by_answers": + case group_by_answers: if (allPossibleAnswerOptions.size() == dataViewData.labels().size() || dataViewData.labels().isEmpty()) { return dataViewData; } for (String item : allPossibleAnswerOptions) { - if (!dataViewData.labels().contains(item)) { - dataViewData.labels().add(item); - for (DataViewRow row : dataViewData.rows()) { + if (!labels.contains(item)) { + labels.add(item); + for (DataViewRow row : rows) { row.values().add(0.0); } } @@ -169,6 +173,6 @@ private DataViewData addMissingAnswerOptions(String viewName, DataViewData dataV break; } - return dataViewData; + return new DataViewData(labels, rows); } } diff --git a/studymanager/src/main/java/io/redlink/more/studymanager/service/ElasticDataService.java b/studymanager/src/main/java/io/redlink/more/studymanager/service/ElasticDataService.java index 2cc7688b..1818deef 100644 --- a/studymanager/src/main/java/io/redlink/more/studymanager/service/ElasticDataService.java +++ b/studymanager/src/main/java/io/redlink/more/studymanager/service/ElasticDataService.java @@ -190,13 +190,13 @@ private DataViewData processDataPreviewResponse(ViewConfig viewConfig, SearchRes final Function rowTitleResolver = createTitleResolver(viewConfig.rowAggregation(), studyId); return new DataViewData( - labels, + List.copyOf(labels), rowMap.entrySet().stream() .map(e -> new DataViewRow( rowTitleResolver.apply(e.getKey()), e.getValue() )) - .collect(Collectors.toCollection(ArrayList::new)) + .toList() ); }