From 33671feaa7b2c0a79ccf6a595f2d77dbc0307e41 Mon Sep 17 00:00:00 2001 From: Arkadiusz Lalo Date: Mon, 18 Dec 2017 13:09:21 +0100 Subject: [PATCH] SYNCT-30: Added dependence between audit messages --- .../module/sync2/api/SyncAuditService.java | 5 +++++ .../sync2/api/dao/impl/SyncAuditDaoImpl.java | 2 -- .../sync2/api/impl/SyncAuditServiceImpl.java | 9 +++++++++ .../sync2/api/impl/SyncRetryServiceImpl.java | 13 +++++++++++-- .../sync2/api/model/audit/AuditMessage.java | 17 +++++++++++++++-- api/src/main/resources/SyncAuditMessage.hbm.xml | 1 + api/src/main/resources/liquibase.xml | 1 + api/src/main/resources/messages.properties | 1 + omod/src/main/webapp/fragments/auditDetails.gsp | 17 +++++++++++++---- 9 files changed, 56 insertions(+), 10 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/sync2/api/SyncAuditService.java b/api/src/main/java/org/openmrs/module/sync2/api/SyncAuditService.java index 63ce904b..4b354126 100644 --- a/api/src/main/java/org/openmrs/module/sync2/api/SyncAuditService.java +++ b/api/src/main/java/org/openmrs/module/sync2/api/SyncAuditService.java @@ -7,6 +7,7 @@ import org.openmrs.module.sync2.SyncModuleConfig; import org.openmrs.module.sync2.api.model.audit.AuditMessage; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; public interface SyncAuditService extends OpenmrsService { @@ -26,4 +27,8 @@ public interface SyncAuditService extends OpenmrsService { @Authorized(SyncModuleConfig.SYNC_AUDIT_PRIVILEGE) @Transactional AuditMessage saveAuditMessage(AuditMessage auditMessage) throws APIException; + + @Authorized(SyncModuleConfig.SYNC_AUDIT_PRIVILEGE) + @Transactional + AuditMessage setNextAudit(AuditMessage current, AuditMessage next) throws APIException; } \ No newline at end of file diff --git a/api/src/main/java/org/openmrs/module/sync2/api/dao/impl/SyncAuditDaoImpl.java b/api/src/main/java/org/openmrs/module/sync2/api/dao/impl/SyncAuditDaoImpl.java index d8db4042..3b64e616 100644 --- a/api/src/main/java/org/openmrs/module/sync2/api/dao/impl/SyncAuditDaoImpl.java +++ b/api/src/main/java/org/openmrs/module/sync2/api/dao/impl/SyncAuditDaoImpl.java @@ -4,7 +4,6 @@ import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; -import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.openmrs.api.db.hibernate.DbSession; @@ -15,7 +14,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; -import java.time.LocalDate; import java.util.List; diff --git a/api/src/main/java/org/openmrs/module/sync2/api/impl/SyncAuditServiceImpl.java b/api/src/main/java/org/openmrs/module/sync2/api/impl/SyncAuditServiceImpl.java index 82e5fbb7..0414e159 100644 --- a/api/src/main/java/org/openmrs/module/sync2/api/impl/SyncAuditServiceImpl.java +++ b/api/src/main/java/org/openmrs/module/sync2/api/impl/SyncAuditServiceImpl.java @@ -64,6 +64,15 @@ public AuditMessage saveAuditMessage(AuditMessage auditMessage) { return null; } + @Override + public AuditMessage setNextAudit(AuditMessage current, AuditMessage next) throws APIException { + if (current == null || next == null) { + return null; + } + current.setNextMessage(next.getId()); + return dao.saveItem(current); + } + private String serializeResults(AuditMessageList results) { GsonBuilder gsonBuilder = new GsonBuilder().serializeNulls(); gsonBuilder.registerTypeAdapter(AuditMessage.class, new AuditMessage.AuditMessageSerializer()); diff --git a/api/src/main/java/org/openmrs/module/sync2/api/impl/SyncRetryServiceImpl.java b/api/src/main/java/org/openmrs/module/sync2/api/impl/SyncRetryServiceImpl.java index fd386df3..36b2d68a 100644 --- a/api/src/main/java/org/openmrs/module/sync2/api/impl/SyncRetryServiceImpl.java +++ b/api/src/main/java/org/openmrs/module/sync2/api/impl/SyncRetryServiceImpl.java @@ -1,11 +1,13 @@ package org.openmrs.module.sync2.api.impl; import org.openmrs.api.APIException; +import org.openmrs.module.sync2.api.SyncAuditService; import org.openmrs.module.sync2.api.SyncConfigurationService; import org.openmrs.module.sync2.api.SyncPullService; import org.openmrs.module.sync2.api.SyncPushService; import org.openmrs.module.sync2.api.SyncRetryService; import org.openmrs.module.sync2.api.model.audit.AuditMessage; +import org.openmrs.module.sync2.api.utils.SyncUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -25,6 +27,9 @@ public class SyncRetryServiceImpl implements SyncRetryService { @Autowired private SyncPushService syncPushService; + @Autowired + private SyncAuditService syncAuditService; + @Autowired private SyncConfigurationService configuration; @@ -49,9 +54,13 @@ private AuditMessage retryPush(AuditMessage message) { private AuditMessage retryPull(AuditMessage message) { String parentAddress = configuration.getSyncConfiguration().getGeneral().getParentFeedLocation(); + parentAddress = SyncUtils.getBaseUrl(parentAddress); + Map map = new HashMap<>(); map.put(message.getLinkType(), message.getUsedResourceUrl()); - message = syncPullService.pullDataFromParentAndSave(message.getResourceName(), map, parentAddress, message.getAction()); - return message; + + AuditMessage newMesssage = syncPullService.pullDataFromParentAndSave(message.getResourceName(), map, parentAddress, message.getAction()); + syncAuditService.setNextAudit(message, newMesssage); + return newMesssage; } } diff --git a/api/src/main/java/org/openmrs/module/sync2/api/model/audit/AuditMessage.java b/api/src/main/java/org/openmrs/module/sync2/api/model/audit/AuditMessage.java index aed66786..889aa527 100644 --- a/api/src/main/java/org/openmrs/module/sync2/api/model/audit/AuditMessage.java +++ b/api/src/main/java/org/openmrs/module/sync2/api/model/audit/AuditMessage.java @@ -44,6 +44,8 @@ public class AuditMessage extends BaseOpenmrsData { private String linkType; + private Integer nextMessage; + public AuditMessage() { } @@ -155,6 +157,14 @@ public void setLinkType(String linkType) { this.linkType = linkType; } + public Integer getNextMessage() { + return nextMessage; + } + + public void setNextMessage(Integer nextMessage) { + this.nextMessage = nextMessage; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -178,15 +188,17 @@ public boolean equals(Object o) { && Objects.equals(this.details, auditMessage.details) && Objects.equals(this.action, auditMessage.action) && Objects.equals(this.operation, auditMessage.operation) - && Objects.equals(this.linkType, auditMessage.linkType); + && Objects.equals(this.linkType, auditMessage.linkType) + && Objects.equals(this.nextMessage, auditMessage.nextMessage); } @Override public int hashCode() { + return Objects.hash(success, timestamp, resourceName, usedResourceUrl, availableResourceUrls, parentUrl, - localUrl, action, details, action, linkType); + localUrl, action, details, action, linkType, nextMessage); } public static class AuditMessageSerializer implements JsonSerializer { @@ -210,6 +222,7 @@ public JsonElement serialize(AuditMessage src, Type typeOfSrc, JsonSerialization object.addProperty("operation", src.operation); object.addProperty("details", src.details); object.addProperty("linkType", src.linkType); + object.addProperty("nextMessage", src.nextMessage); return object; } diff --git a/api/src/main/resources/SyncAuditMessage.hbm.xml b/api/src/main/resources/SyncAuditMessage.hbm.xml index 08bf4a86..d833cef3 100644 --- a/api/src/main/resources/SyncAuditMessage.hbm.xml +++ b/api/src/main/resources/SyncAuditMessage.hbm.xml @@ -22,6 +22,7 @@ + diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index c00e4d19..32998768 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -33,6 +33,7 @@ + diff --git a/api/src/main/resources/messages.properties b/api/src/main/resources/messages.properties index b82e6775..26e32f8b 100644 --- a/api/src/main/resources/messages.properties +++ b/api/src/main/resources/messages.properties @@ -43,6 +43,7 @@ sync2.log.header.details.status.failure=Failure sync2.log.header.details.status.success=Success sync2.log.header.retry=Retry +sync2.log.header.nextMessage=Next message sync2.log.status.all=All sync2.log.status.success=Success diff --git a/omod/src/main/webapp/fragments/auditDetails.gsp b/omod/src/main/webapp/fragments/auditDetails.gsp index e56ebbc9..1047d665 100644 --- a/omod/src/main/webapp/fragments/auditDetails.gsp +++ b/omod/src/main/webapp/fragments/auditDetails.gsp @@ -1,5 +1,6 @@ <% def messagesPrefix = "sync2.log.header" + def detailViewProvider = "sync2" ui.includeJavascript("sync2", "sync2.audit.retry.js") %> @@ -72,8 +73,16 @@ <% if (auditLog != null && !auditLog.success) { %>
- - - ${ ui.message(artifactId + '.retry') } - + <% if (auditLog.nextMessage != null) { %> + + + ${ ui.message(artifactId + '.nextMessage') } + + <% } else { %> + + + ${ ui.message(artifactId + '.retry') } + + <% } %> <% } %> \ No newline at end of file