From 2e7209982fcdb027beaa9325aee4f15fdfee3777 Mon Sep 17 00:00:00 2001 From: uhensler <urs.hensler@frentix.com> Date: Tue, 22 Jan 2019 08:18:22 +0100 Subject: [PATCH] OO-3819: Hide trend column if grouped by data collection --- .../modules/quality/analysis/GroupByKey.java | 45 ++++++ .../quality/analysis/ui/GroupByNameCache.java | 8 +- .../analysis/ui/HeatMapController.java | 128 +++++++++--------- .../quality/analysis/ui/HeatMapDataModel.java | 6 +- .../quality/analysis/ui/HeatMapRow.java | 9 +- 5 files changed, 124 insertions(+), 72 deletions(-) create mode 100644 src/main/java/org/olat/modules/quality/analysis/GroupByKey.java diff --git a/src/main/java/org/olat/modules/quality/analysis/GroupByKey.java b/src/main/java/org/olat/modules/quality/analysis/GroupByKey.java new file mode 100644 index 00000000000..fb5326521af --- /dev/null +++ b/src/main/java/org/olat/modules/quality/analysis/GroupByKey.java @@ -0,0 +1,45 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.modules.quality.analysis; + +/** + * + * Initial date: 21 Jan 2019<br> + * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com + * + */ +public class GroupByKey { + + private final GroupBy groupBy; + private final String key; + + public GroupByKey(GroupBy groupBy, String key) { + this.groupBy = groupBy; + this.key = key; + } + + public GroupBy getGroupBy() { + return groupBy; + } + + public String getKey() { + return key; + } +} diff --git a/src/main/java/org/olat/modules/quality/analysis/ui/GroupByNameCache.java b/src/main/java/org/olat/modules/quality/analysis/ui/GroupByNameCache.java index a1ca6b0179a..2b46875d109 100644 --- a/src/main/java/org/olat/modules/quality/analysis/ui/GroupByNameCache.java +++ b/src/main/java/org/olat/modules/quality/analysis/ui/GroupByNameCache.java @@ -35,6 +35,7 @@ import org.olat.modules.forms.ui.EvaluationFormFormatter; import org.olat.modules.quality.QualityDataCollection; import org.olat.modules.quality.analysis.AnalysisSearchParameter; import org.olat.modules.quality.analysis.GroupBy; +import org.olat.modules.quality.analysis.GroupByKey; import org.olat.modules.quality.analysis.QualityAnalysisService; import org.olat.modules.taxonomy.TaxonomyLevel; import org.olat.repository.RepositoryEntry; @@ -87,13 +88,16 @@ class GroupByNameCache { && !formEntryRef.getKey().equals(searchParams.getFormEntryRef().getKey()); } - String getName(GroupBy groupBy, String key) { + String getName(GroupByKey groupByKey) { + if (groupByKey == null) return null; + + GroupBy groupBy = groupByKey.getGroupBy(); Map<String, String> names = cache.get(groupBy); if (names == null) { names = load(groupBy); cache.put(groupBy, names); } - return names.get(key); + return names.get(groupByKey.getKey()); } private Map<String, String> load(GroupBy groupBy) { diff --git a/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapController.java b/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapController.java index 8cfabe90daf..26ee6639598 100644 --- a/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapController.java +++ b/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapController.java @@ -69,6 +69,7 @@ import org.olat.modules.quality.QualityService; import org.olat.modules.quality.analysis.AnalysisSearchParameter; import org.olat.modules.quality.analysis.AvailableAttributes; import org.olat.modules.quality.analysis.GroupBy; +import org.olat.modules.quality.analysis.GroupByKey; import org.olat.modules.quality.analysis.GroupedStatistic; import org.olat.modules.quality.analysis.GroupedStatistics; import org.olat.modules.quality.analysis.MultiGroupBy; @@ -279,10 +280,12 @@ public class HeatMapController extends FormBasicController implements Filterable columnIndex = addSliderColumns(columnsModel, columnIndex, maxCount); - DefaultFlexiColumnModel trendColumn = new DefaultFlexiColumnModel("heatmap.table.title.trend", columnIndex++, - CMD_TREND, new BooleanCellRenderer(new StaticFlexiCellRenderer("", CMD_TREND, "o_icon o_icon-lg o_icon_qual_ana_trend", null), null)); - trendColumn.setExportable(false); - columnsModel.addFlexiColumnModel(trendColumn); + if (!GroupBy.DATA_COLLECTION.equals(getLastGroupBy(multiGroupBy))) { + DefaultFlexiColumnModel trendColumn = new DefaultFlexiColumnModel("heatmap.table.title.trend", columnIndex++, + CMD_TREND, new BooleanCellRenderer(new StaticFlexiCellRenderer("", CMD_TREND, "o_icon o_icon-lg o_icon_qual_ana_trend", null), null)); + trendColumn.setExportable(false); + columnsModel.addFlexiColumnModel(trendColumn); + } dataModel = new HeatMapDataModel(columnsModel, getLocale()); if (tableEl != null) flc.remove(tableEl); @@ -364,6 +367,7 @@ public class HeatMapController extends FormBasicController implements Filterable } private void loadHeatMap() { + GroupBy lastGroupBy = getLastGroupBy(multiGroupBy); List<String> identifiers = sliders.stream().map(SliderWrapper::getIdentifier).collect(toList()); GroupedStatistics<GroupedStatistic> statistics = loadHeatMapStatistics(); Set<MultiKey> keys = statistics.getMultiKeys(); @@ -375,7 +379,7 @@ public class HeatMapController extends FormBasicController implements Filterable if (multiGroupBy.getGroupBy1() != null) { String groupName1 = translate("heatmap.not.specified"); if (multiKey.getKey1() != null) { - groupName1 = groupByNames.getName(multiGroupBy.getGroupBy1(), multiKey.getKey1()); + groupName1 = groupByNames.getName(new GroupByKey(multiGroupBy.getGroupBy1(), multiKey.getKey1())); if (groupName1 == null) { found = false; } @@ -385,7 +389,7 @@ public class HeatMapController extends FormBasicController implements Filterable if (multiGroupBy.getGroupBy2() != null) { String groupName2 = translate("heatmap.not.specified"); if (multiKey.getKey2() != null) { - groupName2 = groupByNames.getName(multiGroupBy.getGroupBy2(), multiKey.getKey2()); + groupName2 = groupByNames.getName(new GroupByKey(multiGroupBy.getGroupBy2(), multiKey.getKey2())); if (groupName2 == null) { found = false; } @@ -395,7 +399,7 @@ public class HeatMapController extends FormBasicController implements Filterable if (multiGroupBy.getGroupBy3() != null) { String groupName3 = translate("heatmap.not.specified"); if (multiKey.getKey3() != null) { - groupName3 = groupByNames.getName(multiGroupBy.getGroupBy3(), multiKey.getKey3()); + groupName3 = groupByNames.getName(new GroupByKey(multiGroupBy.getGroupBy3(), multiKey.getKey3())); if (groupName3 == null) { found = false; } @@ -410,7 +414,8 @@ public class HeatMapController extends FormBasicController implements Filterable GroupedStatistic rowStatistic = statistics.getStatistic(identifier, multiKey); rowStatistics.add(rowStatistic); } - HeatMapRow row = new HeatMapRow(multiKey, groupNames, rowStatistics); + boolean hideTrend = GroupBy.DATA_COLLECTION.equals(lastGroupBy) || MultiKey.none().equals(multiKey); + HeatMapRow row = new HeatMapRow(multiKey, groupNames, rowStatistics, !hideTrend); rows.add(row); } } @@ -534,29 +539,17 @@ public class HeatMapController extends FormBasicController implements Filterable } private AnalysisSearchParameter getTrendSearchParams(MultiKey multiKey) { - GroupBy groupBy = null; - String key = null; - if (multiGroupBy.getGroupBy3() != null) { - groupBy = multiGroupBy.getGroupBy3(); - key = multiKey.getKey3(); - } else if (multiGroupBy.getGroupBy2() != null) { - groupBy = multiGroupBy.getGroupBy2(); - key = multiKey.getKey2(); - } else if (multiGroupBy.getGroupBy1() != null) { - groupBy = multiGroupBy.getGroupBy1(); - key = multiKey.getKey1(); - } - if (groupBy == null || key == null) { - return null; - } - + GroupByKey groupByKey = getLastGroupByAndKey(multiGroupBy, multiKey); AnalysisSearchParameter trendSearchParams = searchParams.clone(); - ammendGroupBySearchParam(trendSearchParams, groupBy, key); + ammendGroupBySearchParam(trendSearchParams, groupByKey); return trendSearchParams; } - private void ammendGroupBySearchParam(AnalysisSearchParameter searchParams, GroupBy groupBy, String key) { - switch (groupBy) { + private void ammendGroupBySearchParam(AnalysisSearchParameter searchParams, GroupByKey groupByKey) { + if (groupByKey == null) return; + + String key = groupByKey.getKey(); + switch (groupByKey.getGroupBy()) { case TOPIC_IDENTITY: searchParams.setTopicIdentityRefs(singletonList(new IdentityRefImpl(toLongOrZero(key)))); break; @@ -592,53 +585,24 @@ public class HeatMapController extends FormBasicController implements Filterable break; case DATA_COLLECTION: default: - // return no values - searchParams.setSeriesIndexes(singletonList(-1)); } } private String getTrendTitle(MultiKey multiKey) { - GroupBy groupBy = null; - String key = null; - if (multiGroupBy.getGroupBy3() != null) { - groupBy = multiGroupBy.getGroupBy3(); - key = multiKey.getKey3(); - } else if (multiGroupBy.getGroupBy2() != null) { - groupBy = multiGroupBy.getGroupBy2(); - key = multiKey.getKey2(); - } else if (multiGroupBy.getGroupBy1() != null) { - groupBy = multiGroupBy.getGroupBy1(); - key = multiKey.getKey1(); - } - String name = null; - if (groupBy != null) { - name = groupByNames.getName(groupBy, key); - } + GroupByKey groupByKey = getLastGroupByAndKey(multiGroupBy, multiKey); + String name = groupByNames.getName(groupByKey); return name != null? name: translate("heatmap.not.specified"); } private void doShowDetails(UserRequest ureq, HeatMapRow row, int index) { - GroupBy groupBy = null; - String groupKey = null; - if (index == 1) { - groupBy = multiGroupBy.getGroupBy1(); - groupKey = row.getMultiKey().getKey1(); - } else if (index == 2) { - groupBy = multiGroupBy.getGroupBy2(); - groupKey = row.getMultiKey().getKey2(); - } else if (index == 3) { - groupBy = multiGroupBy.getGroupBy3(); - groupKey = row.getMultiKey().getKey3(); - } - - if (groupBy != null && StringHelper.containsNonWhitespace(groupKey)) { - doShowDetails(ureq, groupBy, groupKey); - } + GroupByKey groupByKey = getGroupByAndKey(multiGroupBy, row.getMultiKey(), index); + doShowDetails(ureq, groupByKey); } - private void doShowDetails(UserRequest ureq, GroupBy groupBy, String groupKey) { - if (GroupBy.DATA_COLLECTION.equals(groupBy)) { - Long key = Long.valueOf(groupKey); + private void doShowDetails(UserRequest ureq, GroupByKey groupByKey) { + if (groupByKey != null && GroupBy.DATA_COLLECTION.equals(groupByKey.getGroupBy()) + && StringHelper.containsNonWhitespace(groupByKey.getKey())) { + Long key = Long.valueOf(groupByKey.getKey()); QualityDataCollection dataCollection = qualityService.loadDataCollectionByKey(() -> key); detailCtrl = new DataCollectionReportController(ureq, getWindowControl(), dataCollection); listenTo(detailCtrl); @@ -646,6 +610,42 @@ public class HeatMapController extends FormBasicController implements Filterable stackPanel.pushController(dataCollection.getTitle(), detailCtrl); } } + + private GroupByKey getLastGroupByAndKey(MultiGroupBy mGroupBy, MultiKey mKey) { + GroupByKey groupByKey = null; + if (mGroupBy.getGroupBy3() != null) { + groupByKey = new GroupByKey(mGroupBy.getGroupBy3(), mKey.getKey3()); + } else if (mGroupBy.getGroupBy2() != null) { + groupByKey = new GroupByKey(mGroupBy.getGroupBy2(), mKey.getKey2()); + } else if (multiGroupBy.getGroupBy1() != null) { + groupByKey =new GroupByKey(mGroupBy.getGroupBy1(), mKey.getKey1()); + } + return groupByKey; + } + + private GroupBy getLastGroupBy(MultiGroupBy mGroupBy) { + GroupBy groupBy = null; + if (mGroupBy.getGroupBy3() != null) { + groupBy = mGroupBy.getGroupBy3(); + } else if (mGroupBy.getGroupBy2() != null) { + groupBy = mGroupBy.getGroupBy2(); + } else if (multiGroupBy.getGroupBy1() != null) { + groupBy = mGroupBy.getGroupBy1(); + } + return groupBy; + } + + private GroupByKey getGroupByAndKey(MultiGroupBy mGroupBy, MultiKey mKey, int index) { + GroupByKey groupByKey = null; + if (index == 3) { + groupByKey = new GroupByKey(mGroupBy.getGroupBy3(), mKey.getKey3()); + } else if (index == 2) { + groupByKey = new GroupByKey(mGroupBy.getGroupBy2(), mKey.getKey2()); + } else if (index == 1) { + groupByKey =new GroupByKey(mGroupBy.getGroupBy1(), mKey.getKey1()); + } + return groupByKey; + } @Override protected void formOK(UserRequest ureq) { diff --git a/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapDataModel.java b/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapDataModel.java index e0d918c4d7e..0e7594e4516 100644 --- a/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapDataModel.java +++ b/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapDataModel.java @@ -27,7 +27,6 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFle import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate; -import org.olat.modules.quality.analysis.MultiKey; /** * @@ -70,10 +69,7 @@ class HeatMapDataModel extends DefaultFlexiTableDataModel<HeatMapRow> // trend icon index -= row.getStatisticsSize(); if (index == 0) { - return MultiKey.none().equals(row.getMultiKey()) - ? Boolean.FALSE - : Boolean.TRUE; - + return Boolean.valueOf(row.isShowTrend()); } return null; } diff --git a/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapRow.java b/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapRow.java index 574a957db49..05fa7361d8e 100644 --- a/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapRow.java +++ b/src/main/java/org/olat/modules/quality/analysis/ui/HeatMapRow.java @@ -35,11 +35,14 @@ public class HeatMapRow { private final MultiKey multiKey; private final List<String> groupNames; private final List<GroupedStatistic> statistics; + private final boolean showTrend; - public HeatMapRow(MultiKey multiKey, List<String> groupNames, List<GroupedStatistic> statistics) { + public HeatMapRow(MultiKey multiKey, List<String> groupNames, List<GroupedStatistic> statistics, + boolean showTrend) { this.multiKey = multiKey; this.groupNames = groupNames; this.statistics = statistics; + this.showTrend = showTrend; } public MultiKey getMultiKey() { @@ -66,4 +69,8 @@ public class HeatMapRow { return statistics.get(index); } + public boolean isShowTrend() { + return showTrend; + } + } -- GitLab