Merge pull request #1582 from mgeiss/MIFOSX-SPM-3

retrofitted SPM API to ease the usage
This commit is contained in:
Shaik Nazeer Hussain
2016-01-07 23:02:27 +05:30
13 changed files with 460 additions and 174 deletions
@@ -17,10 +17,12 @@ import org.mifosplatform.spm.util.LookupTableMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Path("/surveys/{surveyId}/lookuptables")
@@ -45,46 +47,45 @@ public class LookupTableApiResource {
@GET
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@Transactional
public List<LookupTableData> fetchLookupTables(@PathParam("surveyId") final Long surveyId) {
this.securityContext.authenticatedUser();
final Survey survey = findSurvey(surveyId);
final List<LookupTableData> result = new ArrayList<>();
final List<LookupTable> lookupTables = this.lookupTableService.findBySurvey(survey);
if (lookupTables != null) {
for (final LookupTable lookupTable : lookupTables) {
result.add(LookupTableMapper.map(lookupTable));
}
return LookupTableMapper.map(lookupTables);
}
return result;
return Collections.EMPTY_LIST;
}
@GET
@Path("/{id}")
@Path("/{key}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@Transactional
public LookupTableData findLookupTable(@PathParam("surveyId") final Long surveyId,
@PathParam("id") final Long id) {
@PathParam("key") final String key) {
this.securityContext.authenticatedUser();
findSurvey(surveyId);
final LookupTable lookupTable = this.lookupTableService.findById(id);
final List<LookupTable> lookupTables = this.lookupTableService.findByKey(key);
if (lookupTable == null) {
throw new LookupTableNotFoundException(id);
if (lookupTables == null || lookupTables.isEmpty()) {
throw new LookupTableNotFoundException(key);
}
return LookupTableMapper.map(lookupTable);
return LookupTableMapper.map(lookupTables).get(0);
}
@POST
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@Transactional
public void createLookupTable(@PathParam("surveyId") final Long surveyId,
final LookupTableData lookupTableData) {
this.securityContext.authenticatedUser();
@@ -13,6 +13,7 @@ import org.mifosplatform.portfolio.client.domain.Client;
import org.mifosplatform.portfolio.client.domain.ClientRepository;
import org.mifosplatform.portfolio.client.exception.ClientNotFoundException;
import org.mifosplatform.spm.data.ScorecardData;
import org.mifosplatform.spm.data.ScorecardValue;
import org.mifosplatform.spm.domain.Scorecard;
import org.mifosplatform.spm.domain.Survey;
import org.mifosplatform.spm.exception.SurveyNotFoundException;
@@ -22,10 +23,12 @@ import org.mifosplatform.spm.util.ScorecardMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Path("/surveys/{surveyId}/scorecards")
@@ -54,27 +57,25 @@ public class ScorecardApiResource {
@GET
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@Transactional
public List<ScorecardData> findBySurvey(@PathParam("surveyId") final Long surveyId) {
this.securityContext.authenticatedUser();
final Survey survey = findSurvey(surveyId);
final List<ScorecardData> result = new ArrayList<>();
final List<Scorecard> scorecards = this.scorecardService.findBySurvey(survey);
if (scorecards == null) {
for (final Scorecard scorecard : scorecards) {
result.add(ScorecardMapper.map(scorecard));
}
return ScorecardMapper.map(scorecards);
}
return result;
return Collections.EMPTY_LIST;
}
@POST
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@Transactional
public void createScorecard(@PathParam("surveyId") final Long surveyId, final ScorecardData scorecardData) {
this.securityContext.authenticatedUser();
@@ -95,6 +96,32 @@ public class ScorecardApiResource {
this.scorecardService.createScorecard(ScorecardMapper.map(scorecardData, survey, staff, client));
}
@Path("/clients/{clientId}")
@GET
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@Transactional
public List<ScorecardData> findBySurveyClient(@PathParam("surveyId") final Long surveyId,
@PathParam("clientId") final Long clientId) {
this.securityContext.authenticatedUser();
final Survey survey = findSurvey(surveyId);
final Client client = this.clientRepository.findOne(clientId);
if (client == null) {
throw new ClientNotFoundException(clientId);
}
final List<Scorecard> scorecards = this.scorecardService.findBySurveyAndClient(survey, client);
if (scorecards == null) {
return ScorecardMapper.map(scorecards);
}
return Collections.EMPTY_LIST;
}
private Survey findSurvey(final Long surveyId) {
final Survey survey = this.spmService.findById(surveyId);
if (survey == null) {
@@ -5,36 +5,24 @@
*/
package org.mifosplatform.spm.data;
import java.util.List;
public class LookupTableData {
private Long id;
private String key;
private String description;
private Integer valueFrom;
private Integer valueTo;
private Double score;
private List<LookupTableEntry> entries;
public LookupTableData() {
super();
}
public LookupTableData(final Long id, final String key, final String description, final Integer valueFrom,
final Integer valueTo, final Double score) {
public LookupTableData(final String key, final String description,
final List<LookupTableEntry> entries) {
super();
this.id = id;
this.key = key;
this.description = description;
this.valueFrom = valueFrom;
this.valueTo = valueTo;
this.score = score;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
this.entries = entries;
}
public String getKey() {
@@ -53,27 +41,11 @@ public class LookupTableData {
this.description = description;
}
public Integer getValueFrom() {
return valueFrom;
public List<LookupTableEntry> getEntries() {
return entries;
}
public void setValueFrom(Integer valueFrom) {
this.valueFrom = valueFrom;
}
public Integer getValueTo() {
return valueTo;
}
public void setValueTo(Integer valueTo) {
this.valueTo = valueTo;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
public void setEntries(List<LookupTableEntry> entries) {
this.entries = entries;
}
}
@@ -0,0 +1,48 @@
/**
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.mifosplatform.spm.data;
public class LookupTableEntry {
private Integer valueFrom;
private Integer valueTo;
private Double score;
public LookupTableEntry() {
super();
}
public LookupTableEntry(final Integer valueFrom, final Integer valueTo, final Double score) {
super();
this.valueFrom = valueFrom;
this.valueTo = valueTo;
this.score = score;
}
public Integer getValueFrom() {
return valueFrom;
}
public void setValueFrom(Integer valueFrom) {
this.valueFrom = valueFrom;
}
public Integer getValueTo() {
return valueTo;
}
public void setValueTo(Integer valueTo) {
this.valueTo = valueTo;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
}
@@ -6,45 +6,26 @@
package org.mifosplatform.spm.data;
import java.util.Date;
import java.util.List;
public class ScorecardData {
private Long questionId;
private Long responseId;
private Long staffId;
private Long clientId;
private Date createdOn;
private Integer value;
private List<ScorecardValue> scorecardValues;
public ScorecardData() {
super();
}
public ScorecardData(final Long questionId, final Long responseId, final Long staffId, final Long clientId,
final Date createdOn, final Integer value) {
public ScorecardData(final Long staffId, final Long clientId, final Date createdOn,
final List<ScorecardValue> scorecardValues) {
super();
this.questionId = questionId;
this.responseId = responseId;
this.staffId = staffId;
this.clientId = clientId;
this.createdOn = createdOn;
this.value = value;
}
public Long getQuestionId() {
return questionId;
}
public void setQuestionId(Long questionId) {
this.questionId = questionId;
}
public Long getResponseId() {
return responseId;
}
public void setResponseId(Long responseId) {
this.responseId = responseId;
this.scorecardValues = scorecardValues;
}
public Long getStaffId() {
@@ -71,11 +52,11 @@ public class ScorecardData {
this.createdOn = createdOn;
}
public Integer getValue() {
return value;
public List<ScorecardValue> getScorecardValues() {
return scorecardValues;
}
public void setValue(Integer value) {
this.value = value;
public void setScorecardValues(List<ScorecardValue> scorecardValues) {
this.scorecardValues = scorecardValues;
}
}
@@ -0,0 +1,48 @@
/**
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.mifosplatform.spm.data;
public class ScorecardValue {
private Long questionId;
private Long responseId;
private Integer value;
public ScorecardValue() {
super();
}
public ScorecardValue(final Long questionId, final Long responseId, final Integer value) {
super();
this.questionId = questionId;
this.responseId = responseId;
this.value = value;
}
public Long getQuestionId() {
return questionId;
}
public void setQuestionId(Long questionId) {
this.questionId = questionId;
}
public Long getResponseId() {
return responseId;
}
public void setResponseId(Long responseId) {
this.responseId = responseId;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
}
@@ -9,7 +9,7 @@ import org.mifosplatform.infrastructure.core.exception.AbstractPlatformResourceN
public class LookupTableNotFoundException extends AbstractPlatformResourceNotFoundException {
public LookupTableNotFoundException(final Long id) {
super("error.msg.survey.lookuptable.id.notfound", "Lookup table with id " + id + " not found!", id);
public LookupTableNotFoundException(final String key) {
super("error.msg.survey.lookuptable.notfound", "Lookup table with id " + key + " not found!", key);
}
}
@@ -14,4 +14,5 @@ import java.util.List;
public interface LookupTableRepository extends JpaRepository<LookupTable, Long> {
List<LookupTable> findBySurvey(final Survey survey);
List<LookupTable> findByKey(final String key);
}
@@ -28,10 +28,10 @@ public class LookupTableService {
this.lookupTableRepository = lookupTableRepository;
}
public LookupTable findById(final Long id) {
public List<LookupTable> findByKey(final String key) {
this.securityContext.authenticatedUser();
return this.lookupTableRepository.findOne(id);
return this.lookupTableRepository.findByKey(key);
}
public List<LookupTable> findBySurvey(final Survey survey) {
@@ -40,7 +40,7 @@ public class LookupTableService {
return this.lookupTableRepository.findBySurvey(survey);
}
public LookupTable createLookupTable(final LookupTable lookupTable) {
public List<LookupTable> createLookupTable(final List<LookupTable> lookupTable) {
this.securityContext.authenticatedUser();
return this.lookupTableRepository.save(lookupTable);
@@ -30,11 +30,10 @@ public class ScorecardService {
this.scorecardRepository = scorecardRepository;
}
@Transactional
public Scorecard createScorecard(final Scorecard scorecard) {
public List<Scorecard> createScorecard(final List<Scorecard> scorecards) {
this.securityContext.authenticatedUser();
return this.scorecardRepository.save(scorecard);
return this.scorecardRepository.save(scorecards);
}
public List<Scorecard> findBySurvey(final Survey survey) {
@@ -6,31 +6,58 @@
package org.mifosplatform.spm.util;
import org.mifosplatform.spm.data.LookupTableData;
import org.mifosplatform.spm.data.LookupTableEntry;
import org.mifosplatform.spm.domain.LookupTable;
import org.mifosplatform.spm.domain.Survey;
import java.util.*;
public class LookupTableMapper {
private LookupTableMapper() {
super();
}
public static LookupTableData map(final LookupTable lookupTable) {
final LookupTableData lookupTableData = new LookupTableData(
lookupTable.getId(), lookupTable.getKey(), lookupTable.getDescription(), lookupTable.getValueFrom(),
lookupTable.getValueFrom(), lookupTable.getScore()
);
return lookupTableData;
public static List<LookupTableData> map(final List<LookupTable> lookupTables) {
final Map<String, LookupTableData> lookupTableDataMap = new HashMap<>();
LookupTableData lookupTableData = null;
if (lookupTables != null && !lookupTables.isEmpty()) {
for (LookupTable lookupTable : lookupTables) {
if ((lookupTableData = lookupTableDataMap.get(lookupTable.getKey())) == null) {
lookupTableData = new LookupTableData();
lookupTableDataMap.put(lookupTable.getKey(), lookupTableData);
lookupTableData.setKey(lookupTable.getKey());
lookupTableData.setDescription(lookupTable.getDescription());
lookupTableData.setEntries(new ArrayList<LookupTableEntry>());
}
lookupTableData.getEntries().add(new LookupTableEntry(lookupTable.getValueFrom(),
lookupTable.getValueTo(), lookupTable.getScore()));
}
return new ArrayList<>(lookupTableDataMap.values());
}
return Collections.EMPTY_LIST;
}
public static LookupTable map(final LookupTableData lookupTableData, final Survey survey) {
final LookupTable lookupTable = new LookupTable();
lookupTable.setSurvey(survey);
lookupTable.setKey(lookupTableData.getKey());
lookupTable.setDescription(lookupTableData.getDescription());
lookupTable.setValueFrom(lookupTableData.getValueFrom());
lookupTable.setValueTo(lookupTableData.getValueTo());
lookupTable.setScore(lookupTableData.getScore());
return lookupTable;
public static List<LookupTable> map(final LookupTableData lookupTableData, final Survey survey) {
final List<LookupTable> lookupTables = new ArrayList<>();
final List<LookupTableEntry> entries = lookupTableData.getEntries();
if (entries != null) {
for (LookupTableEntry entry : entries) {
final LookupTable lookupTable = new LookupTable();
lookupTables.add(lookupTable);
lookupTable.setSurvey(survey);
lookupTable.setKey(lookupTableData.getKey());
lookupTable.setDescription(lookupTableData.getDescription());
lookupTable.setValueFrom(entry.getValueFrom());
lookupTable.setValueTo(entry.getValueTo());
lookupTable.setScore(entry.getScore());
}
}
return lookupTables;
}
}
@@ -8,12 +8,13 @@ package org.mifosplatform.spm.util;
import org.mifosplatform.organisation.staff.domain.Staff;
import org.mifosplatform.portfolio.client.domain.Client;
import org.mifosplatform.spm.data.ScorecardData;
import org.mifosplatform.spm.data.ScorecardValue;
import org.mifosplatform.spm.domain.Question;
import org.mifosplatform.spm.domain.Response;
import org.mifosplatform.spm.domain.Scorecard;
import org.mifosplatform.spm.domain.Survey;
import java.util.List;
import java.util.*;
public class ScorecardMapper {
@@ -21,33 +22,58 @@ public class ScorecardMapper {
super();
}
public static ScorecardData map(final Scorecard scorecard) {
final ScorecardData scorecardData = new ScorecardData(
scorecard.getQuestion().getId(), scorecard.getResponse().getId(), scorecard.getStaff().getId(),
scorecard.getClient().getId(), scorecard.getCreatedOn(), scorecard.getValue()
);
return scorecardData;
public static List<ScorecardData> map(final List<Scorecard> scorecards) {
final Map<Date, ScorecardData> scorecardDataMap = new HashMap<>();
ScorecardData scorecardData = null;
if (scorecards != null && scorecards.isEmpty()) {
for (Scorecard scorecard : scorecards) {
if ((scorecardData = scorecardDataMap.get(scorecard.getCreatedOn())) == null) {
scorecardData = new ScorecardData();
scorecardDataMap.put(scorecard.getCreatedOn(), scorecardData);
scorecardData.setStaffId(scorecard.getStaff().getId());
scorecardData.setClientId(scorecard.getClient().getId());
scorecardData.setCreatedOn(scorecard.getCreatedOn());
scorecardData.setScorecardValues(new ArrayList<ScorecardValue>());
}
scorecardData.getScorecardValues().add(new ScorecardValue(scorecard.getQuestion().getId(), scorecard.getResponse().getId(),
scorecard.getValue()));
}
return new ArrayList<>(scorecardDataMap.values());
}
return Collections.EMPTY_LIST;
}
public static Scorecard map(final ScorecardData scorecardData, final Survey survey,
public static List<Scorecard> map(final ScorecardData scorecardData, final Survey survey,
final Staff staff, final Client client) {
final Scorecard scorecard = new Scorecard();
ScorecardMapper.setQuestionAndResponse(scorecardData, scorecard, survey);
scorecard.setStaff(staff);
scorecard.setClient(client);
scorecard.setCreatedOn(scorecardData.getCreatedOn());
scorecard.setValue(scorecardData.getValue());
return scorecard;
final List<Scorecard> scorecards = new ArrayList<>();
final List<ScorecardValue> scorecardValues = scorecardData.getScorecardValues();
if (scorecardValues != null) {
for (ScorecardValue scorecardValue : scorecardValues) {
final Scorecard scorecard = new Scorecard();
scorecards.add(scorecard);
ScorecardMapper.setQuestionAndResponse(scorecardValue, scorecard, survey);
scorecard.setStaff(staff);
scorecard.setClient(client);
scorecard.setCreatedOn(scorecardData.getCreatedOn());
scorecard.setValue(scorecardValue.getValue());
}
}
return scorecards;
}
private static void setQuestionAndResponse(final ScorecardData scorecardData, final Scorecard scorecard,
private static void setQuestionAndResponse(final ScorecardValue scorecardValue, final Scorecard scorecard,
final Survey survey) {
final List<Question> questions = survey.getQuestions();
for (final Question question : questions) {
if (question.getId().equals(scorecardData.getQuestionId())) {
if (question.getId().equals(scorecardValue.getQuestionId())) {
scorecard.setQuestion(question);
for (final Response response : question.getResponses()) {
if (response.getId().equals(scorecardData.getResponseId())) {
if (response.getId().equals(scorecardValue.getResponseId())) {
scorecard.setResponse(response);
break;
}