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

Commit a7c6463

Browse files
committed
Implement update settings functionality
1 parent d25bcfc commit a7c6463

File tree

9 files changed

+185
-18
lines changed

9 files changed

+185
-18
lines changed

assets/config/opensrp.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ mcts-report-delay-in-days=10
2020
mcts.poll.time.interval.in.minutes=10
2121

2222
# OpenMRS configuration
23-
openmrs.url=https://openmrs.anc-stage.smartregister.org/openmrs
23+
openmrs.url=https://openmrs.anc-stage.smartregister.org/openmrs/
2424
openmrs.username=admin
2525
openmrs.password=Admin123
2626
openmrs.idgen.url=/module/idgen/exportIdentifiers.form
@@ -98,4 +98,4 @@ opensrp.authencation.cache.ttl=600
9898
redis.host=localhost
9999
redis.port=6379
100100
redis.password=RedI$P@S5
101-
redis.pool.max.connections=25
101+
redis.pool.max.connections=25

opensrp-core/src/main/java/org/opensrp/domain/setting/SettingConfiguration.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ public class SettingConfiguration extends BaseDataObject {
2929
@JsonProperty
3030
private String version;
3131

32-
@JsonProperty
33-
private String type;
34-
3532
@JsonProperty
3633
private List<Setting> settings;
3734

opensrp-core/src/main/java/org/opensrp/repository/SettingRepository.java

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

33
import java.util.List;
44

5+
import org.opensrp.domain.postgres.SettingsMetadata;
56
import org.opensrp.domain.setting.SettingConfiguration;
67

78
public interface SettingRepository extends BaseRepository<SettingConfiguration> {
@@ -10,5 +11,10 @@ public interface SettingRepository extends BaseRepository<SettingConfiguration>
1011

1112
List<SettingConfiguration> findAllSettingsByVersion(Long lastSyncedServerVersion);
1213

14+
List<SettingConfiguration> findAllLatestSettingsByVersion(Long lastSyncedServerVersion);
15+
1316
List<SettingConfiguration> findByEmptyServerVersion();
17+
18+
SettingsMetadata saveSetting(SettingConfiguration settingConfiguration);
19+
1420
}

opensrp-core/src/main/java/org/opensrp/repository/couch/SettingRepositoryImpl.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.ektorp.support.CouchDbRepositorySupport;
88
import org.ektorp.support.View;
99
import org.opensrp.common.AllConstants;
10+
import org.opensrp.domain.postgres.SettingsMetadata;
1011
import org.opensrp.domain.setting.SettingConfiguration;
1112
import org.opensrp.repository.SettingRepository;
1213
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,8 +34,8 @@ public List<SettingConfiguration> findAllSettings() {
3334
public List<SettingConfiguration> findAllSettingsByVersion(Long lastSyncedServerVersion) {
3435
ComplexKey startKey = ComplexKey.of(lastSyncedServerVersion);
3536
ComplexKey endKey = ComplexKey.of(Long.MAX_VALUE);
36-
return db.queryView(
37-
createQuery("settings_by_version").includeDocs(true).startKey(startKey).endKey(endKey), SettingConfiguration.class);
37+
return db.queryView(createQuery("settings_by_version").includeDocs(true).startKey(startKey).endKey(endKey),
38+
SettingConfiguration.class);
3839
}
3940

4041
/**
@@ -44,12 +45,19 @@ public List<SettingConfiguration> findAllSettingsByVersion(Long lastSyncedServer
4445
*/
4546
@View(name = "settings_by_empty_server_version", map = "function(doc) { if ( doc.type == 'Setting' && !doc.serverVersion) { emit(doc._id, doc); } }")
4647
public List<SettingConfiguration> findByEmptyServerVersion() {
47-
return db.queryView(createQuery("settings_by_empty_server_version").limit(200).includeDocs(true), SettingConfiguration.class);
48+
return db.queryView(createQuery("settings_by_empty_server_version").limit(200).includeDocs(true),
49+
SettingConfiguration.class);
4850
}
4951

5052
@Override
5153
public void safeRemove(SettingConfiguration entity) {
5254
remove(entity);
5355
}
5456

57+
@Override
58+
public SettingsMetadata saveSetting(SettingConfiguration settingConfiguration) {
59+
//To Be Implemented
60+
return null;
61+
}
62+
5563
}

opensrp-core/src/main/java/org/opensrp/repository/postgres/SettingRepositoryImpl.java

Lines changed: 83 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.List;
55
import java.util.UUID;
66

7+
import org.opensrp.domain.postgres.Settings;
78
import org.opensrp.domain.postgres.SettingsMetadata;
89
import org.opensrp.domain.postgres.SettingsMetadataExample;
910
import org.opensrp.domain.setting.SettingConfiguration;
@@ -27,34 +28,37 @@ public SettingConfiguration get(String id) {
2728
return convert(settingMetadataMapper.selectByDocumentId(id));
2829
}
2930

30-
@Override
31-
public void add(SettingConfiguration entity) {
31+
public Settings addSetting(SettingConfiguration entity) {
32+
org.opensrp.domain.postgres.Settings pgSetting = null;
33+
3234
if (entity == null || entity.getIdentifier() == null) {
33-
return;
35+
return pgSetting;
3436
}
3537

3638
if (retrievePrimaryKey(entity) != null) { //Setting already added
37-
return;
39+
return pgSetting;
3840
}
3941

4042
if (entity.getId() == null)
4143
entity.setId(UUID.randomUUID().toString());
4244
setRevision(entity);
4345

44-
org.opensrp.domain.postgres.Settings pgSetting = convert(entity, null);
46+
pgSetting = convert(entity, null);
4547
if (pgSetting == null) {
46-
return;
48+
return pgSetting;
4749
}
4850

4951
int rowsAffected = settingMapper.insertSelectiveAndSetId(pgSetting);
5052
if (rowsAffected < 1 || pgSetting.getId() == null) {
51-
return;
53+
return pgSetting;
5254
}
5355

5456
SettingsMetadata metadata = createMetadata(entity, pgSetting.getId());
5557
if (metadata != null) {
5658
settingMetadataMapper.insertSelective(metadata);
5759
}
60+
61+
return pgSetting;
5862
}
5963

6064
@Override
@@ -133,6 +137,15 @@ public List<SettingConfiguration> findAllSettingsByVersion(Long lastSyncedServer
133137
return convert(settingMetadataMapper.selectMany(metadataExample, 0, DEFAULT_FETCH_SIZE));
134138
}
135139

140+
@Override
141+
public List<SettingConfiguration> findAllLatestSettingsByVersion(Long lastSyncedServerVersion) {
142+
SettingsMetadataExample metadataExample = new SettingsMetadataExample();
143+
metadataExample.createCriteria().andServerVersionGreaterThanOrEqualTo(lastSyncedServerVersion);
144+
metadataExample.setOrderByClause("server_version DESC");
145+
metadataExample.gr("server_version DESC");
146+
return convert(settingMetadataMapper.selectMany(metadataExample, 0, DEFAULT_FETCH_SIZE));
147+
}
148+
136149
@Override
137150
public List<SettingConfiguration> findByEmptyServerVersion() {
138151
SettingsMetadataExample metadataExample = new SettingsMetadataExample();
@@ -207,4 +220,67 @@ private SettingsMetadata createMetadata(SettingConfiguration entity, Long id) {
207220
return metadata;
208221
}
209222

223+
@Override
224+
public SettingsMetadata saveSetting(SettingConfiguration entity) {
225+
if (entity == null || entity.getIdentifier() == null) {
226+
return null;
227+
}
228+
229+
if (retrievePrimaryKey(entity) != null) { //Event already added
230+
return null;
231+
}
232+
233+
if (entity.getId() == null)
234+
entity.setId(UUID.randomUUID().toString());
235+
setRevision(entity);
236+
237+
Settings settings = convert(entity, null);
238+
if (settings == null) {
239+
return null;
240+
}
241+
242+
int rowsAffected = settingMapper.insertSelectiveAndSetId(settings);
243+
if (rowsAffected < 1 || settings.getId() == null) {
244+
return null;
245+
}
246+
247+
SettingsMetadata settingsMetadata = createMetadata(entity, settings.getId());
248+
if (settingsMetadata != null) {
249+
settingMetadataMapper.insertSelective(settingsMetadata);
250+
}
251+
252+
return settingsMetadata;
253+
254+
}
255+
256+
@Override
257+
public void add(SettingConfiguration entity) {
258+
if (entity == null || entity.getIdentifier() == null) {
259+
return;
260+
}
261+
262+
if (retrievePrimaryKey(entity) != null) { //Event already added
263+
return;
264+
}
265+
266+
if (entity.getId() == null)
267+
entity.setId(UUID.randomUUID().toString());
268+
setRevision(entity);
269+
270+
Settings settings = convert(entity, null);
271+
if (settings == null) {
272+
return;
273+
}
274+
275+
int rowsAffected = settingMapper.insertSelectiveAndSetId(settings);
276+
if (rowsAffected < 1 || settings.getId() == null) {
277+
return;
278+
}
279+
280+
SettingsMetadata settingsMetadata = createMetadata(entity, settings.getId());
281+
if (settingsMetadata != null) {
282+
settingMetadataMapper.insertSelective(settingsMetadata);
283+
}
284+
285+
}
210286
}

opensrp-core/src/main/java/org/opensrp/repository/postgres/mapper/custom/CustomSettingMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55

66
public interface CustomSettingMapper extends SettingsMapper {
77

8-
int insertSelectiveAndSetId(Settings viewConfiguration);
8+
int insertSelectiveAndSetId(Settings setting);
99
}

opensrp-core/src/main/java/org/opensrp/repository/postgres/mapper/custom/xml/CustomSettingsMapper.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#{id,jdbcType=BIGINT},
2121
</if>
2222
<if test="json != null">
23-
#{json,jdbcType=OTHER,typeHandler=org.opensrp.repository.postgres.handler.SettingsTypeHandler},
23+
#{json,jdbcType=OTHER,typeHandler=org.opensrp.repository.postgres.handler.SettingTypeHandler},
2424
</if>
2525
</trim>
2626
</insert>

opensrp-core/src/main/java/org/opensrp/service/SettingService.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.List;
44

5+
import org.opensrp.domain.postgres.SettingsMetadata;
56
import org.opensrp.domain.setting.SettingConfiguration;
67
import org.opensrp.repository.SettingRepository;
78
import org.slf4j.Logger;
@@ -25,6 +26,10 @@ public List<SettingConfiguration> findSettingsByVersion(Long lastSyncedServerVer
2526
return settingRepository.findAllSettingsByVersion(lastSyncedServerVersion);
2627
}
2728

29+
public List<SettingConfiguration> findLatestSettingsByVersion(Long lastSyncedServerVersion) {
30+
return settingRepository.findAllLatestSettingsByVersion(lastSyncedServerVersion);
31+
}
32+
2833
public void addServerVersion() {
2934
try {
3035
List<SettingConfiguration> settingConfigurations = settingRepository.findByEmptyServerVersion();
@@ -47,4 +52,15 @@ public void addServerVersion() {
4752
}
4853
}
4954

55+
public synchronized SettingsMetadata saveSetting(SettingConfiguration settingConfiguration) {
56+
57+
if (settingConfiguration.getIdentifier() == null) {
58+
throw new IllegalArgumentException(
59+
"An event already exists with given baseEntity and formSubmission combination. Consider updating");
60+
61+
}
62+
63+
return settingRepository.saveSetting(settingConfiguration);
64+
}
65+
5066
}

opensrp-web/src/main/java/org/opensrp/web/rest/SettingResource.java

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,48 @@
11
package org.opensrp.web.rest;
22

3+
import static java.text.MessageFormat.format;
34
import static org.opensrp.web.rest.RestUtils.getStringFilter;
5+
import static org.springframework.web.bind.annotation.RequestMethod.POST;
46

7+
import java.util.ArrayList;
58
import java.util.List;
69

710
import javax.servlet.http.HttpServletRequest;
811

12+
import org.joda.time.DateTime;
13+
import org.json.JSONArray;
14+
import org.json.JSONObject;
915
import org.opensrp.common.AllConstants.BaseEntity;
16+
import org.opensrp.domain.postgres.SettingsMetadata;
1017
import org.opensrp.domain.setting.SettingConfiguration;
1118
import org.opensrp.service.SettingService;
19+
import org.opensrp.util.DateTimeTypeConverter;
20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
1222
import org.springframework.beans.factory.annotation.Autowired;
23+
import org.springframework.http.HttpStatus;
24+
import org.springframework.http.ResponseEntity;
1325
import org.springframework.stereotype.Controller;
26+
import org.springframework.web.bind.annotation.RequestBody;
1427
import org.springframework.web.bind.annotation.RequestMapping;
1528
import org.springframework.web.bind.annotation.RequestMethod;
1629
import org.springframework.web.bind.annotation.ResponseBody;
1730

31+
import com.google.gson.Gson;
32+
import com.google.gson.GsonBuilder;
33+
import com.google.gson.reflect.TypeToken;
34+
1835
@Controller
1936
@RequestMapping(value = "/rest/settings")
2037
public class SettingResource {
2138

2239
private SettingService settingService;
2340

41+
private static Logger logger = LoggerFactory.getLogger(EventResource.class.toString());
42+
43+
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
44+
.registerTypeAdapter(DateTime.class, new DateTimeTypeConverter()).create();
45+
2446
@Autowired
2547
public void setSettingService(SettingService settingService) {
2648
this.settingService = settingService;
@@ -34,6 +56,48 @@ public List<SettingConfiguration> findSettingsByVersion(HttpServletRequest reque
3456
if (serverVersion != null) {
3557
lastSyncedServerVersion = Long.valueOf(serverVersion) + 1;
3658
}
37-
return settingService.findSettingsByVersion(lastSyncedServerVersion);
59+
return settingService.findLatestSettingsByVersion(lastSyncedServerVersion);
60+
}
61+
62+
@SuppressWarnings("unchecked")
63+
@RequestMapping(headers = { "Accept=application/json" }, method = POST, value = "/sync")
64+
public ResponseEntity<JSONObject> saveSetting(@RequestBody String data) {
65+
JSONObject response = new JSONObject();
66+
67+
try {
68+
JSONObject syncData = new JSONObject(data);
69+
70+
if (!syncData.has("settingConfigurations")) {
71+
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
72+
} else {
73+
74+
ArrayList<SettingConfiguration> settingConfigurations = (ArrayList<SettingConfiguration>) gson.fromJson(
75+
syncData.getString("settingConfigurations"),
76+
new TypeToken<ArrayList<SettingConfiguration>>() {}.getType());
77+
SettingsMetadata dbSettingMetadata = null;
78+
JSONArray dbSettingsArray = new JSONArray();
79+
80+
for (SettingConfiguration settingConfiguration : settingConfigurations) {
81+
try {
82+
dbSettingMetadata = settingService.saveSetting(settingConfiguration);
83+
dbSettingsArray.put(dbSettingMetadata.getIdentifier());
84+
}
85+
catch (Exception e) {
86+
logger.error("Setting " + settingConfiguration.getIdentifier() == null ? ""
87+
: settingConfiguration.getIdentifier() + " failed to sync",
88+
e);
89+
}
90+
}
91+
92+
}
93+
94+
}
95+
96+
catch (Exception e) {
97+
logger.error(format("Sync data processing failed with exception {0}.- ", e));
98+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
99+
}
100+
101+
return new ResponseEntity<JSONObject>(response, HttpStatus.OK);
38102
}
39103
}

0 commit comments

Comments
 (0)