From c55b89db0abb0786787bbbf44ba10b0d98a16e8f Mon Sep 17 00:00:00 2001 From: Kumaran Venkataraman Date: Wed, 21 May 2014 14:49:50 +0530 Subject: [PATCH] Thiru & Kumaran | #985 | [This is a temporary commit and will be reverted] Created Migration for fetching all entities in the system as JSON --- .../drishti/dto/register/EntityDetailDTO.java | 78 +++++++++++++++++ .../org/ei/drishti/domain/EntityDetail.java | 73 ++++++++++++++++ .../ei/drishti/repository/AllChildren.java | 6 ++ .../repository/AllEligibleCouples.java | 7 ++ .../org/ei/drishti/repository/AllMothers.java | 8 ++ .../ei/drishti/service/EntitiesService.java | 87 +++++++++++++++++++ .../web/controller/EntitiesController.java | 63 ++++++++++++++ 7 files changed, 322 insertions(+) create mode 100644 drishti-interface/src/main/java/org/ei/drishti/dto/register/EntityDetailDTO.java create mode 100644 drishti-mother-child/src/main/java/org/ei/drishti/domain/EntityDetail.java create mode 100644 drishti-mother-child/src/main/java/org/ei/drishti/service/EntitiesService.java create mode 100644 drishti-web/src/main/java/org/ei/drishti/web/controller/EntitiesController.java diff --git a/drishti-interface/src/main/java/org/ei/drishti/dto/register/EntityDetailDTO.java b/drishti-interface/src/main/java/org/ei/drishti/dto/register/EntityDetailDTO.java new file mode 100644 index 00000000..84ce1428 --- /dev/null +++ b/drishti-interface/src/main/java/org/ei/drishti/dto/register/EntityDetailDTO.java @@ -0,0 +1,78 @@ +package org.ei.drishti.dto.register; + +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.codehaus.jackson.annotate.JsonProperty; +import org.ei.drishti.dto.LocationDTO; + +public class EntityDetailDTO { + @JsonProperty + private String entityId; + @JsonProperty + private String entityType; + @JsonProperty + private String thayiCardNumber; + @JsonProperty + private String ecNumber; + @JsonProperty + private String anmIdentifier; + + public String anmIdentifier() { + return this.anmIdentifier; + } + public String entityID() { + return this.entityId; + } + + public String entityType() { + return this.entityType; + } + + public String thayiCardNumber() { + return this.thayiCardNumber; + } + + public String ecNumber() { + return this.ecNumber; + } + + public EntityDetailDTO withThayiCardNumber(String thayiCardNumber) { + this.thayiCardNumber = thayiCardNumber; + return this; + } + + public EntityDetailDTO withECNumber(String ecNumber) { + this.ecNumber = ecNumber; + return this; + } + + public EntityDetailDTO withEntityID(String entityId) { + this.entityId = entityId; + return this; + } + + public EntityDetailDTO withANMIdentifier(String anmIdentifier) { + this.anmIdentifier = anmIdentifier; + return this; + } + + public EntityDetailDTO withEntityType(String type) { + this.entityType = type; + return this; + } + @Override + public boolean equals(Object o) { + return EqualsBuilder.reflectionEquals(this, o); + } + + @Override + public int hashCode() { + return HashCodeBuilder.reflectionHashCode(this); + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/drishti-mother-child/src/main/java/org/ei/drishti/domain/EntityDetail.java b/drishti-mother-child/src/main/java/org/ei/drishti/domain/EntityDetail.java new file mode 100644 index 00000000..f18d965d --- /dev/null +++ b/drishti-mother-child/src/main/java/org/ei/drishti/domain/EntityDetail.java @@ -0,0 +1,73 @@ +package org.ei.drishti.domain; + +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class EntityDetail { + + private String entityId; + private String entityType; + private String thayiCardNumber; + private String ecNumber; + private String anmIdentifier; + + public String anmIdentifier() { + return this.anmIdentifier; + } + public String entityID() { + return this.entityId; + } + + public String entityType() { + return this.entityType; + } + + public String thayiCardNumber() { + return this.thayiCardNumber; + } + + public String ecNumber() { + return this.ecNumber; + } + + public EntityDetail withThayiCardNumber(String thayiCardNumber) { + this.thayiCardNumber = thayiCardNumber; + return this; + } + + public EntityDetail withECNumber(String ecNumber) { + this.ecNumber = ecNumber; + return this; + } + + public EntityDetail withEntityID(String entityId) { + this.entityId = entityId; + return this; + } + + public EntityDetail withANMIdentifier(String anmIdentifier) { + this.anmIdentifier = anmIdentifier; + return this; + } + + public EntityDetail withEntityType(String type) { + this.entityType = type; + return this; + } + + @Override + public boolean equals(Object o) { + return EqualsBuilder.reflectionEquals(this, o, "id", "revision"); + } + + @Override + public int hashCode() { + return HashCodeBuilder.reflectionHashCode(this, "id", "revision"); + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} diff --git a/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllChildren.java b/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllChildren.java index 2fb26b2d..10bac050 100644 --- a/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllChildren.java +++ b/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllChildren.java @@ -113,4 +113,10 @@ public List findAllOpenChildrenForANM(String anmIdentifier) { .key(anmIdentifier) .includeDocs(true), Child.class); } + + @View(name = "all_children", + map = "function(doc) { if (doc.type === 'Child' && doc.isClosed === 'false') { emit(doc.caseId); }}") + public List all() { + return db.queryView(createQuery("all_children").includeDocs(true), Child.class); + } } diff --git a/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllEligibleCouples.java b/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllEligibleCouples.java index 5ae4301c..999a0ca7 100644 --- a/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllEligibleCouples.java +++ b/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllEligibleCouples.java @@ -115,4 +115,11 @@ public Map fpCountForANM(List anmIdentifiers) { } return fpCount; } + + @View(name = "all_ecs", + map = "function(doc) { if (doc.type === 'EligibleCouple' && doc.isClosed === 'false') { emit(doc.caseId); } }") + public List all() { + return db.queryView(createQuery("all_ecs").includeDocs(true), EligibleCouple.class); + } + } diff --git a/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllMothers.java b/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllMothers.java index 527dfb51..3cbc8a53 100644 --- a/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllMothers.java +++ b/drishti-mother-child/src/main/java/org/ei/drishti/repository/AllMothers.java @@ -139,4 +139,12 @@ public List findAllOpenPNCsForANM(String anmIdentifier) { .includeDocs(true), Mother.class); } + + @View(name = "all_open_mothers", + map = "function(doc) { if (doc.type === 'Mother' && doc.isClosed === 'false') { emit(doc.caseId); } }") + public List all() { + return db.queryView(createQuery("all_open_mothers") + .includeDocs(true), Mother.class); + } + } diff --git a/drishti-mother-child/src/main/java/org/ei/drishti/service/EntitiesService.java b/drishti-mother-child/src/main/java/org/ei/drishti/service/EntitiesService.java new file mode 100644 index 00000000..90f3b429 --- /dev/null +++ b/drishti-mother-child/src/main/java/org/ei/drishti/service/EntitiesService.java @@ -0,0 +1,87 @@ +package org.ei.drishti.service; + +import org.ei.drishti.common.AllConstants; +import org.ei.drishti.domain.Child; +import org.ei.drishti.domain.EligibleCouple; +import org.ei.drishti.domain.EntityDetail; +import org.ei.drishti.domain.Mother; +import org.ei.drishti.repository.AllChildren; +import org.ei.drishti.repository.AllEligibleCouples; +import org.ei.drishti.repository.AllMothers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class EntitiesService { + private static Logger logger = LoggerFactory.getLogger(EntitiesService.class.toString()); + private final AllChildren allChildren; + private final AllMothers allMothers; + private final AllEligibleCouples allEligibleCouples; + + @Autowired + public EntitiesService(AllEligibleCouples allEligibleCouples, AllMothers allMothers, AllChildren allChildren) { + this.allChildren = allChildren; + this.allMothers = allMothers; + this.allEligibleCouples = allEligibleCouples; + } + + public List entities() { + List entityDetails = new ArrayList<>(); + updateWithECDetails(entityDetails); + updateWithMotherDetails(entityDetails); + updateWithChildDetails(entityDetails); + return entityDetails; + } + + private void updateWithChildDetails(List entityDetails) { + List children = allChildren.all(); + for (Child child : children) { + EntityDetail entity = new EntityDetail() + .withEntityID(child.caseId()) + .withECNumber(ecNumber(child)) + .withANMIdentifier(child.anmIdentifier()) + .withEntityType(AllConstants.FormEntityTypes.CHILD_TYPE) + .withThayiCardNumber(child.thayiCardNumber()); + entityDetails.add(entity); + } + } + + private String ecNumber(Child child) { + return ecNumber(allMothers.findByCaseId(child.motherCaseId())); + } + + private String ecNumber(Mother mother) { + return allEligibleCouples.findByCaseId(mother.ecCaseId()).ecNumber(); + } + + private void updateWithMotherDetails(List entityDetails) { + List mothers = allMothers.all(); + for (Mother mother : mothers) { + EntityDetail entity = new EntityDetail() + .withEntityID(mother.caseId()) + .withECNumber(ecNumber(mother)) + .withANMIdentifier(mother.anmIdentifier()) + .withEntityType(AllConstants.FormEntityTypes.MOTHER_TYPE) + .withThayiCardNumber(mother.thayiCardNumber()); + entityDetails.add(entity); + } + } + + private void updateWithECDetails(List entityDetails) { + List allECs = allEligibleCouples.all(); + for (EligibleCouple ec : allECs) { + EntityDetail entity = new EntityDetail() + .withEntityID(ec.caseId()) + .withECNumber(ec.ecNumber()) + .withANMIdentifier(ec.anmIdentifier()) + .withEntityType(AllConstants.FormEntityTypes.ELIGIBLE_COUPLE_TYPE) + .withThayiCardNumber(""); + entityDetails.add(entity); + } + } +} diff --git a/drishti-web/src/main/java/org/ei/drishti/web/controller/EntitiesController.java b/drishti-web/src/main/java/org/ei/drishti/web/controller/EntitiesController.java new file mode 100644 index 00000000..37f54f1c --- /dev/null +++ b/drishti-web/src/main/java/org/ei/drishti/web/controller/EntitiesController.java @@ -0,0 +1,63 @@ +package org.ei.drishti.web.controller; + +import ch.lambdaj.function.convert.Converter; +import org.apache.commons.lang.exception.ExceptionUtils; +import org.ei.drishti.domain.EntityDetail; +import org.ei.drishti.dto.register.EntityDetailDTO; +import org.ei.drishti.service.EntitiesService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.MessageFormat; +import java.util.List; + +import static ch.lambdaj.collection.LambdaCollections.with; +import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; +import static org.springframework.web.bind.annotation.RequestMethod.GET; + +@Controller +public class EntitiesController { + private static Logger logger = LoggerFactory.getLogger(EntitiesController.class.toString()); + private EntitiesService service; + + @Autowired + public EntitiesController(EntitiesService service) { + this.service = service; + } + + @RequestMapping(method = GET, value = "/entities-as-json") + @ResponseBody + public ResponseEntity> allEntities() { + try { + List entityDetails = service.entities(); + logger.info("JSON map of all entities"); + return new ResponseEntity<>(mapToDTO(entityDetails), HttpStatus.OK); + } catch (Exception exception) { + logger.error(MessageFormat.format("{0} occurred while fetching ANM Details. StackTrace: \n {1}", exception.getMessage(), ExceptionUtils.getFullStackTrace(exception))); + } + return new ResponseEntity<>(INTERNAL_SERVER_ERROR); + } + + private List mapToDTO(List entityDetails) { + List entityDetailsDTO = + with(entityDetails) + .convert(new Converter() { + @Override + public EntityDetailDTO convert(EntityDetail entry) { + return new EntityDetailDTO() + .withECNumber(entry.ecNumber()) + .withThayiCardNumber(entry.thayiCardNumber()) + .withEntityID(entry.entityID()) + .withANMIdentifier(entry.anmIdentifier()) + .withEntityType(entry.entityType()); + } + }); + return entityDetailsDTO; + } +}