some tidy up around client validation in prep for update.

This commit is contained in:
Keith Woodlock
2012-05-25 16:43:41 +01:00
parent 63a1f6cd63
commit fdbb4e62f9
6 changed files with 102 additions and 46 deletions
@@ -24,7 +24,7 @@ public class ClientData implements Serializable {
private String externalId; private String externalId;
private LocalDate joinedDate; private LocalDate joinedDate;
private List<OfficeData> allowedOffices = new ArrayList<OfficeData>(); private List<OfficeLookup> allowedOffices = new ArrayList<OfficeLookup>();
public ClientData() { public ClientData() {
// //
@@ -133,11 +133,11 @@ public class ClientData implements Serializable {
this.displayName = displayName; this.displayName = displayName;
} }
public List<OfficeData> getAllowedOffices() { public List<OfficeLookup> getAllowedOffices() {
return allowedOffices; return allowedOffices;
} }
public void setAllowedOffices(List<OfficeData> allowedOffices) { public void setAllowedOffices(List<OfficeLookup> allowedOffices) {
this.allowedOffices = allowedOffices; this.allowedOffices = allowedOffices;
} }
} }
@@ -134,7 +134,6 @@ $(document).ready(function() {
argArray[argArrayIndex] = this.value; argArray[argArrayIndex] = this.value;
argArrayIndex++; argArrayIndex++;
}); });
console.log(argArray);
// hardcoded support for six arguments // hardcoded support for six arguments
errorObj.message = jQuery.i18n.prop(this.userMessageGlobalisationCode, argArray[0], argArray[1], argArray[2], argArray[3], argArray[4], argArray[5]); errorObj.message = jQuery.i18n.prop(this.userMessageGlobalisationCode, argArray[0], argArray[1], argArray[2], argArray[3], argArray[4], argArray[5]);
errorObj.value = this.value; errorObj.value = this.value;
@@ -211,7 +210,6 @@ $(document).ready(function() {
dataType: 'json', dataType: 'json',
cache: false, cache: false,
beforeSend: function(xhr) { beforeSend: function(xhr) {
console.log("base64: " + base64);
xhr.setRequestHeader("Authorization", "Basic " + base64); xhr.setRequestHeader("Authorization", "Basic " + base64);
}, },
success: function(data, textStatus, jqXHR) { success: function(data, textStatus, jqXHR) {
@@ -244,6 +242,10 @@ $(document).ready(function() {
dataType: 'json', dataType: 'json',
data: newFormData, data: newFormData,
success: saveSuccessFunction, success: saveSuccessFunction,
cache: false,
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Basic " + base64);
},
error: function(jqXHR, textStatus, errorThrown) { error: function(jqXHR, textStatus, errorThrown) {
handleXhrError(jqXHR, textStatus, errorThrown, "#formErrorsTemplate", "#formerrors"); handleXhrError(jqXHR, textStatus, errorThrown, "#formErrorsTemplate", "#formerrors");
} }
@@ -41,6 +41,21 @@ public class DataValidatorBuilder {
this.ignoreNullValue = true; this.ignoreNullValue = true;
return this; return this;
} }
public DataValidatorBuilder andNotBlank(String linkedParameterName, String linkedValue) {
if (value == null && linkedValue == null && ignoreNullValue) {
return this;
}
if (StringUtils.isBlank(linkedValue)) {
StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(resource).append(".").append(linkedParameterName).append(".cannot.be.empty.when.").append(parameter).append(".is.populated");
StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(linkedParameterName).append(" cannot be empty when ").append(parameter).append(" is populated.");
ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(), defaultEnglishMessage.toString(), linkedParameterName, linkedValue, value);
dataValidationErrors.add(error);
}
return this;
}
public DataValidatorBuilder equalToParameter(String linkedParameterName, Object linkedValue) { public DataValidatorBuilder equalToParameter(String linkedParameterName, Object linkedValue) {
if (value == null && linkedValue == null && ignoreNullValue) { if (value == null && linkedValue == null && ignoreNullValue) {
@@ -161,10 +176,31 @@ public class DataValidatorBuilder {
return this; return this;
} }
public void inValidValue(String parameterValueCode, Object invalidValue) { public DataValidatorBuilder inValidValue(String parameterValueCode, Object invalidValue) {
StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(resource).append(".").append(parameter).append(".invalid.").append(parameterValueCode); StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(resource).append(".").append(parameter).append(".invalid.").append(parameterValueCode);
StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(parameter).append(" has an invalid value."); StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(parameter).append(" has an invalid value.");
ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(), defaultEnglishMessage.toString(), parameter, invalidValue); ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(), defaultEnglishMessage.toString(), parameter, invalidValue);
dataValidationErrors.add(error); dataValidationErrors.add(error);
return this;
}
public DataValidatorBuilder mustBeBlankWhenParameterProvided(String parameterName, Object parameterValue) {
if (value == null && ignoreNullValue) {
return this;
}
if (value == null && parameterValue != null) {
return this;
}
if (value != null && StringUtils.isBlank(value.toString()) && parameterValue != null && StringUtils.isNotBlank(parameterValue.toString())) {
return this;
}
StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(resource).append(".").append(parameter).append(".cannot.also.be.provided.when.").append(parameterName).append(".is.populated");
StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(parameter).append(" cannot also be provided when ").append(parameterName).append(" is populated.");
ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(), defaultEnglishMessage.toString(), parameter, value, parameterName, parameterValue);
dataValidationErrors.add(error);
return this;
} }
} }
@@ -6,6 +6,7 @@ import java.util.List;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.mifosng.data.ApiParameterError; import org.mifosng.data.ApiParameterError;
import org.mifosng.data.command.ClientCommand; import org.mifosng.data.command.ClientCommand;
import org.mifosng.platform.DataValidatorBuilder;
import org.mifosng.platform.exceptions.PlatformApiDataValidationException; import org.mifosng.platform.exceptions.PlatformApiDataValidationException;
public class ClientCommandValidator { public class ClientCommandValidator {
@@ -15,46 +16,61 @@ public class ClientCommandValidator {
public ClientCommandValidator(ClientCommand command) { public ClientCommandValidator(ClientCommand command) {
this.command = command; this.command = command;
} }
public void validateForUpdate() {
}
public void validate() { public void validateForCreate() {
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
if (command.getOfficeId() == null || command.getOfficeId().equals(Long.valueOf(-1))) { DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("client");
ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.office.cannot.be.blank", "The parameter officeId cannot be blank.", "officeId");
dataValidationErrors.add(error);
}
if (StringUtils.isNotBlank(command.getFullname()) && (StringUtils.isNotBlank(command.getFirstname()) || StringUtils.isNotBlank(command.getLastname()))) { if (StringUtils.isNotBlank(command.getFullname())) {
ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.fullname.cannot.entered.when.firstname.or.lastname.entered", "The parameter fullname cannot be blank.", "fullname"); baseDataValidator.reset().parameter("firstname").value(command.getFirstname()).mustBeBlankWhenParameterProvided("fullname", command.getFullname());
dataValidationErrors.add(error); baseDataValidator.reset().parameter("lastname").value(command.getLastname()).mustBeBlankWhenParameterProvided("fullname", command.getFullname());
}
if (StringUtils.isBlank(command.getFirstname()) && StringUtils.isBlank(command.getLastname()) ) {
if (StringUtils.isBlank(command.getFullname())) {
ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.fullname.must.be.provide.or.firstname.lastname", "The parameter fullname cannot be blank or firstName and lastName must be both provided.", "fullname");
dataValidationErrors.add(error);
}
} else { } else {
if (StringUtils.isBlank(command.getFirstname())) { baseDataValidator.reset().parameter("firstname").value(command.getFirstname()).notBlank();//.andNotBlank("lastname", command.getLastname());
ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.firstname.cannot.be.blank", "The parameter firstname cannot be blank.", "firstname"); baseDataValidator.reset().parameter("lastname").value(command.getLastname()).notBlank();//.andNotBlank("firstname", command.getFirstname());
dataValidationErrors.add(error);
}
if (StringUtils.isBlank(command.getLastname())) {
ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.lastname.cannot.be.blank", "The parameter lastname cannot be blank.", "lastname");
dataValidationErrors.add(error);
}
} }
if (command.getJoiningDate() == null) { baseDataValidator.reset().parameter("openingDateFormatted").value(command.getJoiningDateFormatted()).notBlank();
ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.joining.date.cannot.be.blank", "The parameter joiningDate cannot be blank.", "joiningDate"); baseDataValidator.reset().parameter("externalId").value(command.getExternalId()).notExceedingLengthOf(100);
dataValidationErrors.add(error); baseDataValidator.reset().parameter("officeId").value(command.getOfficeId()).notNull().greaterThanZero();
}
if (!dataValidationErrors.isEmpty()) { if (!dataValidationErrors.isEmpty()) {
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors); throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
} }
// if (StringUtils.isNotBlank(command.getFullname()) && (StringUtils.isNotBlank(command.getFirstname()) || StringUtils.isNotBlank(command.getLastname()))) {
// ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.fullname.cannot.entered.when.firstname.or.lastname.entered", "The parameter fullname cannot be blank.", "fullname");
// dataValidationErrors.add(error);
// }
// if (StringUtils.isBlank(command.getFirstname()) && StringUtils.isBlank(command.getLastname()) ) {
//
// if (StringUtils.isBlank(command.getFullname())) {
// ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.fullname.must.be.provide.or.firstname.lastname", "The parameter fullname cannot be blank or firstName and lastName must be both provided.", "fullname");
// dataValidationErrors.add(error);
// }
// } else {
// if (StringUtils.isBlank(command.getFirstname())) {
// ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.firstname.cannot.be.blank", "The parameter firstname cannot be blank.", "firstname");
// dataValidationErrors.add(error);
// }
//
// if (StringUtils.isBlank(command.getLastname())) {
// ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.lastname.cannot.be.blank", "The parameter lastname cannot be blank.", "lastname");
// dataValidationErrors.add(error);
// }
// }
//
// if (command.getJoiningDate() == null) {
// ApiParameterError error = ApiParameterError.parameterError("validation.msg.client.joining.date.cannot.be.blank", "The parameter joiningDate cannot be blank.", "joiningDate");
// dataValidationErrors.add(error);
// }
//
// if (!dataValidationErrors.isEmpty()) {
// throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
// }
} }
} }
@@ -17,6 +17,7 @@ import org.mifosng.data.ClientLoanAccountSummaryCollectionData;
import org.mifosng.data.ClientLoanAccountSummaryData; import org.mifosng.data.ClientLoanAccountSummaryData;
import org.mifosng.data.NoteData; import org.mifosng.data.NoteData;
import org.mifosng.data.OfficeData; import org.mifosng.data.OfficeData;
import org.mifosng.data.OfficeLookup;
import org.mifosng.platform.exceptions.PlatformResourceNotFoundException; import org.mifosng.platform.exceptions.PlatformResourceNotFoundException;
import org.mifosng.platform.organisation.domain.Organisation; import org.mifosng.platform.organisation.domain.Organisation;
import org.mifosng.platform.organisation.service.OfficeReadPlatformService; import org.mifosng.platform.organisation.service.OfficeReadPlatformService;
@@ -101,17 +102,17 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
AppUser currentUser = context.authenticatedUser(); AppUser currentUser = context.authenticatedUser();
List<OfficeData> offices = new ArrayList<OfficeData>(officeReadPlatformService.retrieveAllOffices()); List<OfficeLookup> offices = new ArrayList<OfficeLookup>(officeReadPlatformService.retrieveAllOfficesForLookup());
ClientData clientData = new ClientData(); ClientData clientData = new ClientData();
clientData.setOfficeId(currentUser.getOffice().getId()); clientData.setOfficeId(currentUser.getOffice().getId());
clientData.setOrganisationId(currentUser.getOrganisation().getId()); clientData.setOrganisationId(currentUser.getOrganisation().getId());
clientData.setAllowedOffices(offices); clientData.setAllowedOffices(offices);
clientData.setDisplayName(""); // clientData.setDisplayName("");
clientData.setFirstname(""); // clientData.setFirstname("");
clientData.setLastname(""); // clientData.setLastname("");
clientData.setId(Long.valueOf(-1)); // clientData.setId(Long.valueOf(-1));
clientData.setJoinedDate(new LocalDate()); clientData.setJoinedDate(new LocalDate());
return clientData; return clientData;
@@ -1,6 +1,7 @@
package org.mifosng.platform.client.service; package org.mifosng.platform.client.service;
import static org.mifosng.platform.Specifications.*; import static org.mifosng.platform.Specifications.clientsThatMatch;
import static org.mifosng.platform.Specifications.officesThatMatch;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.mifosng.data.EntityIdentifier; import org.mifosng.data.EntityIdentifier;
@@ -42,7 +43,7 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP
AppUser currentUser = context.authenticatedUser(); AppUser currentUser = context.authenticatedUser();
ClientCommandValidator validator = new ClientCommandValidator(command); ClientCommandValidator validator = new ClientCommandValidator(command);
validator.validate(); validator.validateForCreate();
Office clientOffice = this.officeRepository.findOne(officesThatMatch(currentUser.getOrganisation(), command.getOfficeId())); Office clientOffice = this.officeRepository.findOne(officesThatMatch(currentUser.getOrganisation(), command.getOfficeId()));
@@ -66,8 +67,8 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP
AppUser currentUser = context.authenticatedUser(); AppUser currentUser = context.authenticatedUser();
//EnrollClientCommandValidator validator = new EnrollClientCommandValidator(command); ClientCommandValidator validator = new ClientCommandValidator(command);
//validator.validate(); validator.validateForUpdate();
Office clientOffice = this.officeRepository.findOne(officesThatMatch(currentUser.getOrganisation(), command.getOfficeId())); Office clientOffice = this.officeRepository.findOne(officesThatMatch(currentUser.getOrganisation(), command.getOfficeId()));