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

Commit dd80778

Browse files
BarnaBarthabarnabartha
andauthored
Feature 3150 campaign sync to mobile (SORMAS-Foundation#3256)
* SORMAS-Foundation#3150 - add REST endpoint allowing sync of campaign and campaign form meta * SORMAS-Foundation#3150 - add campaign and campaign form meta entities and daos to app * SORMAS-Foundation#3150 - add campaign form data entity + add sync logic for all campaign entities + add REST api needed for sync * SORMAS-Foundation#3150 - update database schema for campaign entities on mobile * SORMAS-Foundation#3150 - sync campaign data to mobile * SORMAS-Foundation#3150 - remove unused dtos * SORMAS-Foundation#3150 - remove unused methods * SORMAS-Foundation#3150 - address code review suggestions Co-authored-by: barnabartha <[email protected]>
1 parent 35cd389 commit dd80778

34 files changed

Lines changed: 1784 additions & 304 deletions

sormas-api/src/main/java/de/symeda/sormas/api/campaign/CampaignFacade.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package de.symeda.sormas.api.campaign;
22

3+
import java.util.Date;
34
import java.util.List;
45

56
import javax.ejb.Remote;
67

8+
import de.symeda.sormas.api.campaign.data.CampaignFormDataDto;
79
import de.symeda.sormas.api.campaign.diagram.CampaignDashboardElement;
810
import de.symeda.sormas.api.utils.SortProperty;
911

@@ -33,4 +35,10 @@ public interface CampaignFacade {
3335
CampaignReferenceDto getReferenceByUuid(String uuid);
3436

3537
boolean exists(String uuid);
38+
39+
List<CampaignDto> getAllAfter(Date campaignChangeDate);
40+
41+
List<CampaignDto> getByUuids(List<String> uuids);
42+
43+
List<String> getAllActiveUuids();
3644
}

sormas-api/src/main/java/de/symeda/sormas/api/campaign/data/CampaignFormDataFacade.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import de.symeda.sormas.api.utils.SortProperty;
2727

2828
import javax.ejb.Remote;
29+
30+
import java.util.Date;
2931
import java.util.List;
3032

3133
@Remote
@@ -50,4 +52,8 @@ public interface CampaignFormDataFacade {
5052
long count(CampaignFormDataCriteria criteria);
5153

5254
List<CampaignDiagramDataDto> getDiagramData(List<CampaignDiagramSeries> diagramSeries, CampaignDiagramCriteria campaignDiagramCriteria);
55+
56+
List<String> getAllActiveUuids();
57+
58+
List<CampaignFormDataDto> getAllActiveAfter(Date date);
5359
}

sormas-api/src/main/java/de/symeda/sormas/api/campaign/form/CampaignFormMetaFacade.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import javax.ejb.Remote;
44
import java.io.IOException;
5+
import java.util.Date;
56
import java.util.List;
67

8+
import de.symeda.sormas.api.campaign.data.CampaignFormDataDto;
9+
710
@Remote
811
public interface CampaignFormMetaFacade {
912

@@ -25,4 +28,9 @@ CampaignFormMetaDto buildCampaignFormMetaFromJson(String formId, String language
2528

2629
CampaignFormMetaDto getCampaignFormMetaByUuid(String campaignFormUuid);
2730

31+
List<CampaignFormMetaDto> getAllAfter(Date campaignFormMetaChangeDate);
32+
33+
List<String> getAllUuids();
34+
35+
List<CampaignFormMetaDto> getByUuids(List<String> uuids);
2836
}

sormas-api/src/main/java/de/symeda/sormas/api/infrastructure/InfrastructureChangeDatesDto.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public class InfrastructureChangeDatesDto implements Serializable {
1717
private Date diseaseConfigurationChangeDate;
1818
private Date userRoleConfigurationChangeDate;
1919
private Date featureConfigurationChangeDate;
20+
private Date campaignChangeDate;
21+
private Date campaignFormMetaChangeDate;
2022

2123
public Date getRegionChangeDate() {
2224
return regionChangeDate;
@@ -97,4 +99,20 @@ public Date getFeatureConfigurationChangeDate() {
9799
public void setFeatureConfigurationChangeDate(Date featureConfigurationChangeDate) {
98100
this.featureConfigurationChangeDate = featureConfigurationChangeDate;
99101
}
102+
103+
public Date getCampaignChangeDate() {
104+
return campaignChangeDate;
105+
}
106+
107+
public void setCampaignChangeDate(Date campaignChangeDate) {
108+
this.campaignChangeDate = campaignChangeDate;
109+
}
110+
111+
public Date getCampaignFormMetaChangeDate() {
112+
return campaignFormMetaChangeDate;
113+
}
114+
115+
public void setCampaignFormMetaChangeDate(Date campaignFormMetaChangeDate) {
116+
this.campaignFormMetaChangeDate = campaignFormMetaChangeDate;
117+
}
100118
}

sormas-api/src/main/java/de/symeda/sormas/api/infrastructure/InfrastructureSyncDto.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.io.Serializable;
44
import java.util.List;
55

6+
import de.symeda.sormas.api.campaign.CampaignDto;
7+
import de.symeda.sormas.api.campaign.form.CampaignFormMetaDto;
68
import de.symeda.sormas.api.caze.classification.DiseaseClassificationCriteriaDto;
79
import de.symeda.sormas.api.disease.DiseaseConfigurationDto;
810
import de.symeda.sormas.api.facility.FacilityDto;
@@ -30,6 +32,8 @@ public class InfrastructureSyncDto implements Serializable {
3032
private List<String> deletedUserRoleConfigurationUuids;
3133
private List<FeatureConfigurationDto> featureConfigurations;
3234
private List<String> deletedFeatureConfigurationUuids;
35+
private List<CampaignDto> campaigns;
36+
private List<CampaignFormMetaDto> campaignFormMetas;
3337

3438
public boolean isInitialSyncRequired() {
3539
return initialSyncRequired;
@@ -134,4 +138,20 @@ public List<String> getDeletedFeatureConfigurationUuids() {
134138
public void setDeletedFeatureConfigurationUuids(List<String> deletedFeatureConfigurationUuids) {
135139
this.deletedFeatureConfigurationUuids = deletedFeatureConfigurationUuids;
136140
}
141+
142+
public List<CampaignDto> getCampaigns() {
143+
return campaigns;
144+
}
145+
146+
public void setCampaigns(List<CampaignDto> campaigns) {
147+
this.campaigns = campaigns;
148+
}
149+
150+
public List<CampaignFormMetaDto> getCampaignFormMetas() {
151+
return campaignFormMetas;
152+
}
153+
154+
public void setCampaignFormMetas(List<CampaignFormMetaDto> campaignFormMetas) {
155+
this.campaignFormMetas = campaignFormMetas;
156+
}
137157
}
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
/*
2+
* SORMAS® - Surveillance Outbreak Response Management & Analysis System
3+
* Copyright © 2016-2020 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI)
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
* You should have received a copy of the GNU General Public License
13+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
14+
*/
15+
16+
package de.symeda.sormas.app.backend.campaign;
17+
18+
import static de.symeda.sormas.api.EntityDto.COLUMN_LENGTH_BIG;
19+
20+
import java.lang.reflect.Type;
21+
import java.util.ArrayList;
22+
import java.util.Date;
23+
import java.util.List;
24+
25+
import javax.persistence.Column;
26+
import javax.persistence.Entity;
27+
import javax.persistence.Transient;
28+
29+
import com.google.gson.Gson;
30+
import com.google.gson.reflect.TypeToken;
31+
import com.j256.ormlite.field.DataType;
32+
import com.j256.ormlite.field.DatabaseField;
33+
import com.j256.ormlite.table.DatabaseTable;
34+
35+
import de.symeda.sormas.api.campaign.diagram.CampaignDashboardElement;
36+
import de.symeda.sormas.app.backend.campaign.form.CampaignFormMeta;
37+
import de.symeda.sormas.app.backend.common.PseudonymizableAdo;
38+
import de.symeda.sormas.app.backend.user.User;
39+
40+
@Entity(name = Campaign.TABLE_NAME)
41+
@DatabaseTable(tableName = Campaign.TABLE_NAME)
42+
public class Campaign extends PseudonymizableAdo {
43+
44+
public static final String TABLE_NAME = "campaigns";
45+
public static final String I18N_PREFIX = "Campaign";
46+
47+
public static final String CAMPAIGN_CAMPAIGNFORMMETA_TABLE_NAME = "campaign_campaignformmeta";
48+
49+
public static final String NAME = "name";
50+
public static final String DESCRIPTION = "description";
51+
public static final String START_DATE = "startDate";
52+
public static final String END_DATE = "endDate";
53+
public static final String CREATING_USER = "creatingUser";
54+
public static final String CAMPAIGN_FORM_METAS = "campaignFormMetas";
55+
public static final String CAMPAIGN_DASHBOARD_ELEMENTS = "dashboardElements";
56+
public static final String ARCHIVED = "archived";
57+
58+
@Column(length = COLUMN_LENGTH_BIG)
59+
private String name;
60+
61+
@Column(length = COLUMN_LENGTH_BIG)
62+
private String description;
63+
64+
@DatabaseField(dataType = DataType.DATE_LONG, canBeNull = true)
65+
private Date startDate;
66+
67+
@DatabaseField(dataType = DataType.DATE_LONG, canBeNull = true)
68+
private Date endDate;
69+
70+
@DatabaseField(foreign = true, foreignAutoRefresh = true)
71+
private User creatingUser;
72+
73+
@DatabaseField
74+
private boolean archived;
75+
76+
private List<CampaignFormMeta> campaignFormMetas = new ArrayList<>();
77+
78+
public String getName() {
79+
return name;
80+
}
81+
82+
public void setName(String name) {
83+
this.name = name;
84+
}
85+
86+
public String getDescription() {
87+
return description;
88+
}
89+
90+
public void setDescription(String description) {
91+
this.description = description;
92+
}
93+
94+
public Date getStartDate() {
95+
return startDate;
96+
}
97+
98+
public void setStartDate(Date startDate) {
99+
this.startDate = startDate;
100+
}
101+
102+
public Date getEndDate() {
103+
return endDate;
104+
}
105+
106+
public void setEndDate(Date endDate) {
107+
this.endDate = endDate;
108+
}
109+
110+
public User getCreatingUser() {
111+
return creatingUser;
112+
}
113+
114+
public void setCreatingUser(User creatingUser) {
115+
this.creatingUser = creatingUser;
116+
}
117+
118+
public boolean isArchived() {
119+
return archived;
120+
}
121+
122+
public void setArchived(boolean archived) {
123+
this.archived = archived;
124+
}
125+
126+
public List<CampaignFormMeta> getCampaignFormMetas() {
127+
return campaignFormMetas;
128+
}
129+
130+
public void setCampaignFormMetas(List<CampaignFormMeta> campaignFormMetas) {
131+
this.campaignFormMetas = campaignFormMetas;
132+
}
133+
134+
@Override
135+
public String getI18nPrefix() {
136+
return I18N_PREFIX;
137+
}
138+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* SORMAS® - Surveillance Outbreak Response Management & Analysis System
3+
* Copyright © 2016-2020 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI)
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
* You should have received a copy of the GNU General Public License
13+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
14+
*/
15+
16+
package de.symeda.sormas.app.backend.campaign;
17+
18+
import com.j256.ormlite.dao.Dao;
19+
20+
import de.symeda.sormas.app.backend.common.AbstractAdoDao;
21+
22+
public class CampaignDao extends AbstractAdoDao<Campaign> {
23+
24+
public CampaignDao(Dao<Campaign, Long> innerDao) {
25+
super(innerDao);
26+
}
27+
28+
@Override
29+
protected Class<Campaign> getAdoClass() {
30+
return Campaign.class;
31+
}
32+
33+
@Override
34+
public String getTableName() {
35+
return Campaign.TABLE_NAME;
36+
}
37+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* SORMAS® - Surveillance Outbreak Response Management & Analysis System
3+
* Copyright © 2016-2020 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI)
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
* You should have received a copy of the GNU General Public License
13+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
14+
*/
15+
16+
package de.symeda.sormas.app.backend.campaign;
17+
18+
import java.util.List;
19+
20+
import de.symeda.sormas.api.PushResult;
21+
import de.symeda.sormas.api.campaign.CampaignDto;
22+
import de.symeda.sormas.api.campaign.CampaignReferenceDto;
23+
import de.symeda.sormas.app.backend.common.AdoDtoHelper;
24+
import de.symeda.sormas.app.backend.common.DatabaseHelper;
25+
import de.symeda.sormas.app.rest.NoConnectionException;
26+
import de.symeda.sormas.app.rest.RetroProvider;
27+
import retrofit2.Call;
28+
29+
public class CampaignDtoHelper extends AdoDtoHelper<Campaign, CampaignDto> {
30+
31+
public static CampaignReferenceDto toReferenceDto(Campaign ado) {
32+
if (ado == null) {
33+
return null;
34+
}
35+
CampaignReferenceDto dto = new CampaignReferenceDto(ado.getUuid());
36+
return dto;
37+
}
38+
39+
@Override
40+
protected Class<Campaign> getAdoClass() {
41+
return Campaign.class;
42+
}
43+
44+
@Override
45+
protected Class<CampaignDto> getDtoClass() {
46+
return CampaignDto.class;
47+
}
48+
49+
@Override
50+
protected Call<List<CampaignDto>> pullAllSince(long since) throws NoConnectionException {
51+
return RetroProvider.getCampaignFacade().pullAllSince(since);
52+
}
53+
54+
@Override
55+
protected Call<List<CampaignDto>> pullByUuids(List<String> uuids) throws NoConnectionException {
56+
return RetroProvider.getCampaignFacade().pullByUuids(uuids);
57+
}
58+
59+
@Override
60+
protected Call<List<PushResult>> pushAll(List<CampaignDto> campaignDtos) throws NoConnectionException {
61+
throw new UnsupportedOperationException();
62+
}
63+
64+
@Override
65+
protected void fillInnerFromDto(Campaign target, CampaignDto source) {
66+
target.setName(source.getName());
67+
target.setDescription(source.getDescription());
68+
target.setStartDate(source.getStartDate());
69+
target.setEndDate(source.getEndDate());
70+
target.setCreatingUser(DatabaseHelper.getUserDao().getByReferenceDto(source.getCreatingUser()));
71+
target.setDashboardElements(source.getCampaignDashboardElements());
72+
}
73+
74+
@Override
75+
protected void fillInnerFromAdo(CampaignDto dto, Campaign campaign) {
76+
throw new UnsupportedOperationException();
77+
}
78+
}

0 commit comments

Comments
 (0)