Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit ff4957c

Browse files
author
Martin Wahnschaffe
authored
Merge pull request SORMAS-Foundation#3634 from hzi-braunschweig/bugfix-3622-archived-campaigns-cause-errors
SORMAS-Foundation#3622 - Fixed bugs when there are no active campaigns in the database
2 parents 62a4332 + cd18723 commit ff4957c

4 files changed

Lines changed: 103 additions & 79 deletions

File tree

sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/CampaignFacadeEjb.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public CampaignReferenceDto getLastStartedCampaign() {
132132
final CriteriaQuery<Campaign> query = cb.createQuery(Campaign.class);
133133
final Root<Campaign> from = query.from(Campaign.class);
134134
query.select(from);
135-
query.where(cb.lessThanOrEqualTo(from.get(Campaign.START_DATE), new Date()));
135+
query.where(cb.and(campaignService.createActiveCampaignsFilter(cb, from), cb.lessThanOrEqualTo(from.get(Campaign.START_DATE), new Date())));
136136
query.orderBy(cb.desc(from.get(Campaign.START_DATE)));
137137

138138
final TypedQuery<Campaign> q = em.createQuery(query);

sormas-backend/src/main/java/de/symeda/sormas/backend/campaign/CampaignService.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public List<String> getAllActiveUuids() {
8181

8282
if (getCurrentUser() != null) {
8383
Predicate userFilter = createUserFilter(cb, cq, from);
84-
filter = AbstractAdoService.and(cb, cb.isFalse(from.get(Campaign.ARCHIVED)), userFilter);
84+
filter = AbstractAdoService.and(cb, createActiveCampaignsFilter(cb, from), userFilter);
8585
}
8686

8787
cq.where(filter);
@@ -119,9 +119,13 @@ public List<Campaign> getAllActive() {
119119
CriteriaBuilder cb = em.getCriteriaBuilder();
120120
CriteriaQuery<Campaign> cq = cb.createQuery(getElementClass());
121121
Root<Campaign> from = cq.from(getElementClass());
122-
cq.where(cb.isFalse(from.get(Campaign.DELETED)));
122+
cq.where(createActiveCampaignsFilter(cb, from));
123123
cq.orderBy(cb.desc(from.get(AbstractDomainObject.CHANGE_DATE)));
124124

125125
return em.createQuery(cq).getResultList();
126126
}
127+
128+
public Predicate createActiveCampaignsFilter(CriteriaBuilder cb, Root<Campaign> root) {
129+
return cb.and(cb.isFalse(root.get(Campaign.ARCHIVED)), cb.isFalse(root.get(Campaign.DELETED)));
130+
}
127131
}

sormas-ui/src/main/java/de/symeda/sormas/ui/campaign/campaigndata/CampaignDataView.java

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -210,35 +210,46 @@ public CampaignDataView() {
210210
criteria.setCampaignFormMeta(null);
211211
filterForm.setValue(criteria);
212212
});
213+
214+
if (campaignCombo.getValue() == null) {
215+
importCampaignButton.setEnabled(false);
216+
newFormButton.setEnabled(false);
217+
}
218+
213219
addComponent(mainLayout);
214220
}
215221

216222
private void createImportLayout(VerticalLayout importFormLayout) {
217223

218-
for (CampaignFormMetaReferenceDto campaignForm : FacadeProvider.getCampaignFormMetaFacade()
219-
.getCampaignFormMetasAsReferencesByCampaign(campaignCombo.getValue().getUuid())) {
220-
221-
Button campaignFormButton = ButtonHelper.createButton(campaignForm.toString(), e -> {
222-
try {
223-
Window popupWindow = VaadinUiUtil.showPopupWindow(new CampaignFormDataImportLayout(campaignForm, campaignCombo.getValue()));
224-
popupWindow.setCaption(I18nProperties.getString(Strings.headingImportCampaign));
225-
popupWindow.addCloseListener(c -> grid.reload());
226-
} catch (IOException ioException) {
227-
ioException.printStackTrace();
228-
}
229-
});
230-
campaignFormButton.setWidth(100, Unit.PERCENTAGE);
231-
importFormLayout.addComponent(campaignFormButton);
224+
if (campaignCombo.getValue() != null) {
225+
for (CampaignFormMetaReferenceDto campaignForm : FacadeProvider.getCampaignFormMetaFacade()
226+
.getCampaignFormMetasAsReferencesByCampaign(campaignCombo.getValue().getUuid())) {
227+
228+
Button campaignFormButton = ButtonHelper.createButton(campaignForm.toString(), e -> {
229+
try {
230+
Window popupWindow = VaadinUiUtil.showPopupWindow(new CampaignFormDataImportLayout(campaignForm, campaignCombo.getValue()));
231+
popupWindow.setCaption(I18nProperties.getString(Strings.headingImportCampaign));
232+
popupWindow.addCloseListener(c -> grid.reload());
233+
} catch (IOException ioException) {
234+
ioException.printStackTrace();
235+
}
236+
});
237+
campaignFormButton.setWidth(100, Unit.PERCENTAGE);
238+
importFormLayout.addComponent(campaignFormButton);
239+
}
232240
}
233241
}
234242

235243
private void createNewFormLayout(VerticalLayout newFormLayout) {
236-
for (CampaignFormMetaReferenceDto campaignForm : FacadeProvider.getCampaignFormMetaFacade()
237-
.getCampaignFormMetasAsReferencesByCampaign(campaignCombo.getValue().getUuid())) {
238-
Button campaignFormButton = ButtonHelper
239-
.createButton(campaignForm.toString(), e -> ControllerProvider.getCampaignController().createCampaignDataForm(criteria.getCampaign(), campaignForm));
240-
campaignFormButton.setWidth(100, Unit.PERCENTAGE);
241-
newFormLayout.addComponent(campaignFormButton);
244+
245+
if (campaignCombo.getValue() != null) {
246+
for (CampaignFormMetaReferenceDto campaignForm : FacadeProvider.getCampaignFormMetaFacade()
247+
.getCampaignFormMetasAsReferencesByCampaign(campaignCombo.getValue().getUuid())) {
248+
Button campaignFormButton = ButtonHelper
249+
.createButton(campaignForm.toString(), e -> ControllerProvider.getCampaignController().createCampaignDataForm(criteria.getCampaign(), campaignForm));
250+
campaignFormButton.setWidth(100, Unit.PERCENTAGE);
251+
newFormLayout.addComponent(campaignFormButton);
252+
}
242253
}
243254
}
244255

sormas-ui/src/main/java/de/symeda/sormas/ui/dashboard/campaigns/CampaignDashboardDataProvider.java

Lines changed: 65 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package de.symeda.sormas.ui.dashboard.campaigns;
22

3-
import static com.vaadin.ui.Notification.Type.ERROR_MESSAGE;
4-
53
import java.util.ArrayList;
4+
import java.util.Collections;
65
import java.util.Comparator;
76
import java.util.HashMap;
87
import java.util.List;
@@ -11,7 +10,8 @@
1110
import java.util.Optional;
1211
import java.util.stream.Collectors;
1312

14-
import com.vaadin.ui.Notification;
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
1515

1616
import de.symeda.sormas.api.FacadeProvider;
1717
import de.symeda.sormas.api.campaign.CampaignReferenceDto;
@@ -25,9 +25,6 @@
2525
import de.symeda.sormas.api.region.AreaReferenceDto;
2626
import de.symeda.sormas.api.region.DistrictReferenceDto;
2727
import de.symeda.sormas.api.region.RegionReferenceDto;
28-
import org.apache.commons.collections.CollectionUtils;
29-
import org.slf4j.Logger;
30-
import org.slf4j.LoggerFactory;
3128

3229
public class CampaignDashboardDataProvider {
3330

@@ -55,49 +52,53 @@ protected void refreshDiagramsData(String tabId, String subTabId) {
5552
campaignFormDataMap.clear();
5653
campaignFormTotalsMap.clear();
5754

58-
campaignDiagramDefinitionsMap.get(campaign).forEach(campaignDashboardDiagramDto -> {
59-
final CampaignDashboardElement campaignDashboardElement = campaignDashboardDiagramDto.getCampaignDashboardElement();
60-
if (campaignDashboardElement.getTabId().equals(tabId) && (subTabId == null || campaignDashboardElement.getSubTabId().equals(subTabId))) {
61-
List<CampaignDiagramDataDto> diagramData = FacadeProvider.getCampaignFormDataFacade()
62-
.getDiagramData(
63-
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries(),
64-
new CampaignDiagramCriteria(campaign, area, region, district));
65-
campaignFormDataMap.put(campaignDashboardDiagramDto, diagramData);
66-
List<CampaignDiagramSeries> campaignSeriesTotal =
67-
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal();
68-
69-
List<CampaignDiagramDataDto> percentageDiagramData = null;
70-
if (campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal() != null) {
71-
Optional populationGroup = campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getPopulationGroup())).findFirst();
72-
Optional formIdOptional = campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getFormId())).findFirst();
73-
{
74-
if (populationGroup.isPresent()) {
75-
percentageDiagramData = FacadeProvider.getCampaignFormDataFacade()
76-
.getDiagramDataByAgeGroup(
77-
(CampaignDiagramSeries) populationGroup.get(),
78-
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries().get(0),
79-
new CampaignDiagramCriteria(campaign, area, region, district));
80-
if (formIdOptional.isPresent()) {
81-
logger.warn(String.format(I18nProperties.getString(Strings.errorFormIdPopulationAgeGroup)));
55+
if (campaign != null) {
56+
campaignDiagramDefinitionsMap.get(campaign).forEach(campaignDashboardDiagramDto -> {
57+
final CampaignDashboardElement campaignDashboardElement = campaignDashboardDiagramDto.getCampaignDashboardElement();
58+
if (campaignDashboardElement.getTabId().equals(tabId)
59+
&& (subTabId == null || campaignDashboardElement.getSubTabId().equals(subTabId))) {
60+
List<CampaignDiagramDataDto> diagramData = FacadeProvider.getCampaignFormDataFacade()
61+
.getDiagramData(
62+
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries(),
63+
new CampaignDiagramCriteria(campaign, area, region, district));
64+
campaignFormDataMap.put(campaignDashboardDiagramDto, diagramData);
65+
List<CampaignDiagramSeries> campaignSeriesTotal =
66+
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal();
67+
68+
List<CampaignDiagramDataDto> percentageDiagramData = null;
69+
if (campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal() != null) {
70+
Optional populationGroup = campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getPopulationGroup())).findFirst();
71+
Optional formIdOptional = campaignSeriesTotal.stream().filter(e -> Objects.nonNull(e.getFormId())).findFirst();
72+
{
73+
if (populationGroup.isPresent()) {
74+
percentageDiagramData = FacadeProvider.getCampaignFormDataFacade()
75+
.getDiagramDataByAgeGroup(
76+
(CampaignDiagramSeries) populationGroup.get(),
77+
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignDiagramSeries().get(0),
78+
new CampaignDiagramCriteria(campaign, area, region, district));
79+
if (formIdOptional.isPresent()) {
80+
logger.warn(String.format(I18nProperties.getString(Strings.errorFormIdPopulationAgeGroup)));
81+
}
82+
} else {
83+
percentageDiagramData = FacadeProvider.getCampaignFormDataFacade()
84+
.getDiagramData(
85+
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal(),
86+
new CampaignDiagramCriteria(campaign, area, region, district));
8287
}
83-
} else {
84-
percentageDiagramData = FacadeProvider.getCampaignFormDataFacade()
85-
.getDiagramData(
86-
campaignDashboardDiagramDto.getCampaignDiagramDefinitionDto().getCampaignSeriesTotal(),
87-
new CampaignDiagramCriteria(campaign, area, region, district));
88-
}
89-
Map<CampaignDashboardTotalsReference, Double> percentageMap = new HashMap<>();
90-
for (CampaignDiagramDataDto data : percentageDiagramData) {
91-
CampaignDashboardTotalsReference totals = new CampaignDashboardTotalsReference(data.getGroupingKey(), data.getStack());
92-
Double value = percentageMap.getOrDefault(totals, 0D);
93-
value += data.getValueSum().doubleValue();
94-
percentageMap.put(totals, value);
88+
Map<CampaignDashboardTotalsReference, Double> percentageMap = new HashMap<>();
89+
for (CampaignDiagramDataDto data : percentageDiagramData) {
90+
CampaignDashboardTotalsReference totals =
91+
new CampaignDashboardTotalsReference(data.getGroupingKey(), data.getStack());
92+
Double value = percentageMap.getOrDefault(totals, 0D);
93+
value += data.getValueSum().doubleValue();
94+
percentageMap.put(totals, value);
95+
}
96+
campaignFormTotalsMap.put(campaignDashboardDiagramDto, percentageMap);
9597
}
96-
campaignFormTotalsMap.put(campaignDashboardDiagramDto, percentageMap);
9798
}
9899
}
99-
}
100-
});
100+
});
101+
}
101102
}
102103

103104
private void createCampaignDashboardDiagramDefinitionsMap() {
@@ -170,19 +171,27 @@ public Map<CampaignDashboardDiagramDto, Map<CampaignDashboardTotalsReference, Do
170171
}
171172

172173
public List<String> getTabIds() {
173-
return campaignDiagramDefinitionsMap.get(campaign)
174-
.stream()
175-
.map(cdd -> cdd.getCampaignDashboardElement().getTabId())
176-
.distinct()
177-
.collect(Collectors.toList());
174+
if (campaign != null) {
175+
return campaignDiagramDefinitionsMap.get(campaign)
176+
.stream()
177+
.map(cdd -> cdd.getCampaignDashboardElement().getTabId())
178+
.distinct()
179+
.collect(Collectors.toList());
180+
} else {
181+
return Collections.emptyList();
182+
}
178183
}
179184

180185
public List<String> getSubTabIds(String tabId) {
181-
return campaignDiagramDefinitionsMap.get(campaign)
182-
.stream()
183-
.filter(cdd -> cdd.getCampaignDashboardElement().getTabId().equals(tabId))
184-
.map(cdd -> cdd.getCampaignDashboardElement().getSubTabId())
185-
.distinct()
186-
.collect(Collectors.toList());
186+
if (campaign != null) {
187+
return campaignDiagramDefinitionsMap.get(campaign)
188+
.stream()
189+
.filter(cdd -> cdd.getCampaignDashboardElement().getTabId().equals(tabId))
190+
.map(cdd -> cdd.getCampaignDashboardElement().getSubTabId())
191+
.distinct()
192+
.collect(Collectors.toList());
193+
} else {
194+
return Collections.emptyList();
195+
}
187196
}
188197
}

0 commit comments

Comments
 (0)