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

Commit 8f226a0

Browse files
SORMAS-Foundation#2993 add Country to app
1 parent 729327b commit 8f226a0

12 files changed

Lines changed: 234 additions & 4 deletions

File tree

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66
public class InfrastructureChangeDatesDto implements Serializable {
77

8-
private static final long serialVersionUID = 3661789242295903774L;
8+
private static final long serialVersionUID = 6269655187128160377L;
99

10+
private Date countryChangeDate;
1011
private Date regionChangeDate;
1112
private Date districtChangeDate;
1213
private Date communityChangeDate;
@@ -20,6 +21,14 @@ public class InfrastructureChangeDatesDto implements Serializable {
2021
private Date campaignChangeDate;
2122
private Date campaignFormMetaChangeDate;
2223

24+
public Date getCountryChangeDate() {
25+
return countryChangeDate;
26+
}
27+
28+
public void setCountryChangeDate(Date countryChangeDate) {
29+
this.countryChangeDate = countryChangeDate;
30+
}
31+
2332
public Date getRegionChangeDate() {
2433
return regionChangeDate;
2534
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import de.symeda.sormas.api.facility.FacilityDto;
1111
import de.symeda.sormas.api.feature.FeatureConfigurationDto;
1212
import de.symeda.sormas.api.region.CommunityDto;
13+
import de.symeda.sormas.api.region.CountryDto;
1314
import de.symeda.sormas.api.region.DistrictDto;
1415
import de.symeda.sormas.api.region.RegionDto;
1516
import de.symeda.sormas.api.user.UserDto;
@@ -20,6 +21,7 @@ public class InfrastructureSyncDto implements Serializable {
2021
private static final long serialVersionUID = -3874808120492307171L;
2122

2223
private boolean initialSyncRequired;
24+
private List<CountryDto> countries;
2325
private List<RegionDto> regions;
2426
private List<DistrictDto> districts;
2527
private List<CommunityDto> communities;
@@ -43,6 +45,14 @@ public void setInitialSyncRequired(boolean initialSyncRequired) {
4345
this.initialSyncRequired = initialSyncRequired;
4446
}
4547

48+
public List<CountryDto> getCountries() {
49+
return countries;
50+
}
51+
52+
public void setCountries(List<CountryDto> countries) {
53+
this.countries = countries;
54+
}
55+
4656
public List<RegionDto> getRegions() {
4757
return regions;
4858
}

sormas-app/app/src/androidTest/java/de/symeda/sormas/app/TestHelper.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import de.symeda.sormas.app.backend.config.ConfigProvider;
3232
import de.symeda.sormas.app.backend.facility.Facility;
3333
import de.symeda.sormas.app.backend.region.Community;
34+
import de.symeda.sormas.app.backend.region.Country;
3435
import de.symeda.sormas.app.backend.region.District;
3536
import de.symeda.sormas.app.backend.region.Region;
3637
import de.symeda.sormas.app.backend.user.User;
@@ -45,6 +46,7 @@ public class TestHelper {
4546
public static final String FACILITY_UUID = "F1F1F1-F1F1F1-F1F1F1-F1F1F1F1";
4647
public static final String SECOND_FACILITY_UUID = "F2F2F2-F2F2F2-F2F2F2-F2F2F2F2";
4748
public static final String LABORATORY_UUID = "L1L1L1-L1L1L1-L1L1L1-L1L1L1L1";
49+
public static final String COUNTRY_UUID = "C3C3C3-C3C3C3-C3C3C3-C3C3C3C3";
4850
public static final String USER_UUID = "0123456789";
4951
public static final String SECOND_USER_UUID = "0987654321";
5052
public static final String INFORMANT_USER_UUID = "0192837465";
@@ -121,7 +123,14 @@ private static void insertUsers(boolean setInformantAsActiveUser) throws SQLExce
121123
}
122124

123125
private static void insertInfrastructureData() throws SQLException {
124-
// Create example region, district, community and health facility
126+
// Create example country, region, district, community and health facility
127+
Country country = new Country();
128+
country.setCreationDate(new Date());
129+
country.setChangeDate(new Date());
130+
country.setName("Country");
131+
country.setUuid(COUNTRY_UUID);
132+
DatabaseHelper.getCountryDao().create(country);
133+
125134
Region region = new Region();
126135
region.setCreationDate(new Date());
127136
region.setChangeDate(new Date());

sormas-app/app/src/main/java/de/symeda/sormas/app/backend/common/DatabaseHelper.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@
9292
import de.symeda.sormas.app.backend.person.PersonDao;
9393
import de.symeda.sormas.app.backend.region.Community;
9494
import de.symeda.sormas.app.backend.region.CommunityDao;
95+
import de.symeda.sormas.app.backend.region.Country;
96+
import de.symeda.sormas.app.backend.region.CountryDao;
9597
import de.symeda.sormas.app.backend.region.District;
9698
import de.symeda.sormas.app.backend.region.DistrictDao;
9799
import de.symeda.sormas.app.backend.region.Region;
@@ -142,7 +144,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
142144
public static final String DATABASE_NAME = "sormas.db";
143145
// any time you make changes to your database objects, you may have to increase the database version
144146

145-
public static final int DATABASE_VERSION = 242;
147+
public static final int DATABASE_VERSION = 243;
146148

147149
private static DatabaseHelper instance = null;
148150

@@ -220,6 +222,7 @@ public static void clearTables(boolean clearInfrastructure) {
220222
TableUtils.clearTable(connectionSource, Facility.class);
221223
TableUtils.clearTable(connectionSource, Community.class);
222224
TableUtils.clearTable(connectionSource, District.class);
225+
TableUtils.clearTable(connectionSource, Country.class);
223226
TableUtils.clearTable(connectionSource, Region.class);
224227
TableUtils.clearTable(connectionSource, Campaign.class);
225228
TableUtils.clearTable(connectionSource, CampaignFormMeta.class);
@@ -247,6 +250,7 @@ public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
247250
Log.i(DatabaseHelper.class.getName(), "onCreate");
248251
TableUtils.createTableIfNotExists(connectionSource, Config.class);
249252
TableUtils.createTable(connectionSource, Location.class);
253+
TableUtils.createTable(connectionSource, Country.class);
250254
TableUtils.createTable(connectionSource, Region.class);
251255
TableUtils.createTable(connectionSource, District.class);
252256
TableUtils.createTable(connectionSource, Community.class);
@@ -1747,6 +1751,9 @@ public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int
17471751
getDao(DiseaseConfiguration.class).executeRaw("UPDATE diseaseConfiguration SET caseFollowUpDuration = followUpDuration;");
17481752
getDao(DiseaseConfiguration.class).executeRaw("UPDATE diseaseConfiguration SET eventParticipantFollowUpDuration = followUpDuration;");
17491753

1754+
case 242:
1755+
currentVersion = 242;
1756+
getDao(Country.class).executeRaw("ALTER TABLE country ADD COLUMN archived SMALLINT DEFAULT 0;");
17501757
// ATTENTION: break should only be done after last version
17511758
break;
17521759
default:
@@ -1773,6 +1780,7 @@ private void upgradeFromUnupgradableVersion(SQLiteDatabase db, ConnectionSource
17731780
TableUtils.dropTable(connectionSource, PortHealthInfo.class, true);
17741781
TableUtils.dropTable(connectionSource, Person.class, true);
17751782
TableUtils.dropTable(connectionSource, Location.class, true);
1783+
TableUtils.dropTable(connectionSource, Country.class, true);
17761784
TableUtils.dropTable(connectionSource, Region.class, true);
17771785
TableUtils.dropTable(connectionSource, District.class, true);
17781786
TableUtils.dropTable(connectionSource, Community.class, true);
@@ -1844,6 +1852,8 @@ public <ADO extends AbstractDomainObject> AbstractAdoDao<ADO> getAdoDaoInner(Cla
18441852
dao = (AbstractAdoDao<ADO>) new PointOfEntryDao((Dao<PointOfEntry, Long>) innerDao);
18451853
} else if (type.equals(Facility.class)) {
18461854
dao = (AbstractAdoDao<ADO>) new FacilityDao((Dao<Facility, Long>) innerDao);
1855+
} else if (type.equals(Country.class)) {
1856+
dao = (AbstractAdoDao<ADO>) new CountryDao((Dao<Country, Long>) innerDao);
18471857
} else if (type.equals(Region.class)) {
18481858
dao = (AbstractAdoDao<ADO>) new RegionDao((Dao<Region, Long>) innerDao);
18491859
} else if (type.equals(District.class)) {
@@ -2025,6 +2035,10 @@ public static FacilityDao getFacilityDao() {
20252035
return (FacilityDao) getAdoDao(Facility.class);
20262036
}
20272037

2038+
public static CountryDao getCountryDao() {
2039+
return (CountryDao) getAdoDao(Country.class);
2040+
}
2041+
20282042
public static RegionDao getRegionDao() {
20292043
return (RegionDao) getAdoDao(Region.class);
20302044
}

sormas-app/app/src/main/java/de/symeda/sormas/app/backend/infrastructure/InfrastructureHelper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import de.symeda.sormas.app.backend.facility.FacilityDtoHelper;
1313
import de.symeda.sormas.app.backend.feature.FeatureConfigurationDtoHelper;
1414
import de.symeda.sormas.app.backend.region.CommunityDtoHelper;
15+
import de.symeda.sormas.app.backend.region.CountryDtoHelper;
1516
import de.symeda.sormas.app.backend.region.DistrictDtoHelper;
1617
import de.symeda.sormas.app.backend.region.RegionDtoHelper;
1718
import de.symeda.sormas.app.backend.user.UserDtoHelper;
@@ -22,6 +23,7 @@ public class InfrastructureHelper {
2223
public static InfrastructureChangeDatesDto getInfrastructureChangeDates() {
2324
InfrastructureChangeDatesDto changeDates = new InfrastructureChangeDatesDto();
2425

26+
changeDates.setCountryChangeDate(DatabaseHelper.getCountryDao().getLatestChangeDate());
2527
changeDates.setRegionChangeDate(DatabaseHelper.getRegionDao().getLatestChangeDate());
2628
changeDates.setDistrictChangeDate(DatabaseHelper.getDistrictDao().getLatestChangeDate());
2729
changeDates.setCommunityChangeDate(DatabaseHelper.getCommunityDao().getLatestChangeDate());
@@ -39,6 +41,7 @@ public static InfrastructureChangeDatesDto getInfrastructureChangeDates() {
3941
}
4042

4143
public static void handlePulledInfrastructureData(InfrastructureSyncDto infrastructureData) throws DaoException {
44+
new CountryDtoHelper().handlePulledList(DatabaseHelper.getCountryDao(), infrastructureData.getCountries());
4245
new RegionDtoHelper().handlePulledList(DatabaseHelper.getRegionDao(), infrastructureData.getRegions());
4346
new DistrictDtoHelper().handlePulledList(DatabaseHelper.getDistrictDao(), infrastructureData.getDistricts());
4447
new CommunityDtoHelper().handlePulledList(DatabaseHelper.getCommunityDao(), infrastructureData.getCommunities());
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package de.symeda.sormas.app.backend.region;
2+
3+
import javax.persistence.Column;
4+
import javax.persistence.Entity;
5+
6+
import com.j256.ormlite.table.DatabaseTable;
7+
8+
import de.symeda.sormas.app.backend.common.InfrastructureAdo;
9+
10+
@Entity(name = Country.TABLE_NAME)
11+
@DatabaseTable(tableName = Country.TABLE_NAME)
12+
public class Country extends InfrastructureAdo {
13+
14+
private static final long serialVersionUID = -2958216667876104351L;
15+
16+
public static final String TABLE_NAME = "country";
17+
public static final String I18N_PREFIX = "Country";
18+
19+
public static final String NAME = "name";
20+
public static final String ISO_CODE = "isoCode";
21+
22+
@Column
23+
private String name;
24+
25+
@Column
26+
private String isoCode;
27+
28+
public String getName() {
29+
return name;
30+
}
31+
32+
public void setName(String name) {
33+
this.name = name;
34+
}
35+
36+
public String getIsoCode() {
37+
return isoCode;
38+
}
39+
40+
public void setIsoCode(String isoCode) {
41+
this.isoCode = isoCode;
42+
}
43+
44+
@Override
45+
public String toString() {
46+
return getName();
47+
}
48+
49+
@Override
50+
public String getI18nPrefix() {
51+
return I18N_PREFIX;
52+
}
53+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package de.symeda.sormas.app.backend.region;
2+
3+
import com.j256.ormlite.dao.Dao;
4+
5+
import de.symeda.sormas.app.backend.common.AbstractInfrastructureAdoDao;
6+
7+
public class CountryDao extends AbstractInfrastructureAdoDao<Country> {
8+
9+
public CountryDao(Dao<Country, Long> innerDao) {
10+
super(innerDao);
11+
}
12+
13+
@Override
14+
protected Class<Country> getAdoClass() {
15+
return Country.class;
16+
}
17+
18+
@Override
19+
public String getTableName() {
20+
return Country.TABLE_NAME;
21+
}
22+
23+
@Override
24+
public Country saveAndSnapshot(Country source) {
25+
throw new UnsupportedOperationException();
26+
}
27+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package de.symeda.sormas.app.backend.region;
2+
3+
import java.util.List;
4+
5+
import de.symeda.sormas.api.PushResult;
6+
import de.symeda.sormas.api.region.CountryDto;
7+
import de.symeda.sormas.api.region.CountryReferenceDto;
8+
import de.symeda.sormas.app.backend.common.AdoDtoHelper;
9+
import de.symeda.sormas.app.rest.NoConnectionException;
10+
import de.symeda.sormas.app.rest.RetroProvider;
11+
import retrofit2.Call;
12+
13+
public class CountryDtoHelper extends AdoDtoHelper<Country, CountryDto> {
14+
15+
@Override
16+
protected Class<Country> getAdoClass() {
17+
return Country.class;
18+
}
19+
20+
@Override
21+
protected Class<CountryDto> getDtoClass() {
22+
return CountryDto.class;
23+
}
24+
25+
@Override
26+
protected Call<List<CountryDto>> pullAllSince(long since) throws NoConnectionException {
27+
return RetroProvider.getCountryFacade().pullAllSince(since);
28+
}
29+
30+
@Override
31+
protected Call<List<CountryDto>> pullByUuids(List<String> uuids) throws NoConnectionException {
32+
return RetroProvider.getCountryFacade().pullByUuids(uuids);
33+
}
34+
35+
@Override
36+
protected Call<List<PushResult>> pushAll(List<CountryDto> countryDtos) throws NoConnectionException {
37+
throw new UnsupportedOperationException("Entity is infrastructure");
38+
}
39+
40+
@Override
41+
protected void fillInnerFromDto(Country ado, CountryDto dto) {
42+
ado.setName(dto.getDefaultName());
43+
ado.setIsoCode(dto.getIsoCode());
44+
ado.setArchived(dto.isArchived());
45+
}
46+
47+
@Override
48+
protected void fillInnerFromAdo(CountryDto dto, Country ado) {
49+
throw new UnsupportedOperationException("Entity is infrastructure");
50+
}
51+
52+
public static CountryReferenceDto toReferenceDto(Country ado) {
53+
if (ado == null) {
54+
return null;
55+
}
56+
CountryReferenceDto dto = new CountryReferenceDto(ado.getUuid());
57+
58+
return dto;
59+
}
60+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package de.symeda.sormas.app.rest;
2+
3+
import java.util.List;
4+
5+
import de.symeda.sormas.api.region.CountryDto;
6+
import retrofit2.Call;
7+
import retrofit2.http.Body;
8+
import retrofit2.http.GET;
9+
import retrofit2.http.POST;
10+
import retrofit2.http.Path;
11+
12+
public interface CountryFacadeRetro {
13+
14+
@GET("countries/all/{since}")
15+
Call<List<CountryDto>> pullAllSince(@Path("since") long since);
16+
17+
@POST("countries/query")
18+
Call<List<CountryDto>> pullByUuids(@Body List<String> uuids);
19+
20+
@GET("countries/uuids")
21+
Call<List<String>> pullUuids();
22+
}

sormas-app/app/src/main/java/de/symeda/sormas/app/rest/RetroProvider.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import de.symeda.sormas.api.utils.DataHelper;
5252
import de.symeda.sormas.api.utils.InfoProvider;
5353
import de.symeda.sormas.app.R;
54-
import de.symeda.sormas.app.backend.campaign.form.CampaignFormMeta;
5554
import de.symeda.sormas.app.backend.config.ConfigProvider;
5655
import de.symeda.sormas.app.backend.user.User;
5756
import de.symeda.sormas.app.core.NotificationContext;
@@ -87,6 +86,7 @@ public final class RetroProvider {
8786
private PersonFacadeRetro personFacadeRetro;
8887
private CommunityFacadeRetro communityFacadeRetro;
8988
private DistrictFacadeRetro districtFacadeRetro;
89+
private CountryFacadeRetro countryFacadeRetro;
9090
private RegionFacadeRetro regionFacadeRetro;
9191
private FacilityFacadeRetro facilityFacadeRetro;
9292
private PointOfEntryFacadeRetro pointOfEntryFacadeRetro;
@@ -484,6 +484,19 @@ public static DistrictFacadeRetro getDistrictFacade() throws NoConnectionExcepti
484484
return instance.districtFacadeRetro;
485485
}
486486

487+
public static CountryFacadeRetro getCountryFacade() throws NoConnectionException {
488+
if (instance == null)
489+
throw new NoConnectionException();
490+
if (instance.countryFacadeRetro == null) {
491+
synchronized ((RetroProvider.class)) {
492+
if (instance.countryFacadeRetro == null) {
493+
instance.countryFacadeRetro = instance.retrofit.create(CountryFacadeRetro.class);
494+
}
495+
}
496+
}
497+
return instance.countryFacadeRetro;
498+
}
499+
487500
public static RegionFacadeRetro getRegionFacade() throws NoConnectionException {
488501
if (instance == null)
489502
throw new NoConnectionException();

0 commit comments

Comments
 (0)