package org.ei.drishti.web.controller;
import ch.lambdaj.function.convert.Converter;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.ei.drishti.domain.DrishtiUser;
import org.ei.drishti.domain.EntityDetail;
import org.ei.drishti.dto.register.EntityDetailDTO;
import org.ei.drishti.repository.AllDrishtiUsers;
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.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.text.MessageFormat;
import java.util.ArrayList;
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;
private AllDrishtiUsers allDrishtiUsers;
@Autowired
public EntitiesController(EntitiesService service, AllDrishtiUsers allDrishtiUsers) {
this.service = service;
this.allDrishtiUsers = allDrishtiUsers;
}
@RequestMapping(method = GET, value = "/entities-as-json")
@ResponseBody
public ResponseEntity<List<EntityDetailDTO>> allEntities(@RequestParam("anmIdentifier") String anmIdentifier) {
try {
List<EntityDetail> entityDetails = service.entities(anmIdentifier);
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<EntityDetailDTO> mapToDTO(List<EntityDetail> entityDetails) {
List<EntityDetailDTO> entityDetailsDTO =
with(entityDetails)
.convert(new Converter<EntityDetail, EntityDetailDTO>() {
@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;
}
}