MIFOSX-97: tidy up serialization of commands for clients and client identifiers.

This commit is contained in:
Keith Woodlock
2012-12-05 01:08:59 +00:00
parent 26470d026d
commit 311477a87b
25 changed files with 799 additions and 603 deletions
@@ -6,9 +6,9 @@ import java.util.List;
import org.joda.time.LocalDate;
import org.mifosplatform.commands.domain.CommandSource;
import org.mifosplatform.commands.service.ChangeDetectionService;
import org.mifosplatform.infrastructure.core.api.PortfolioCommandDeserializerService;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.portfolio.charge.command.ChargeDefinitionCommand;
import org.mifosplatform.portfolio.charge.serialization.ChargeCommandFromCommandJsonDeserializer;
import org.mifosplatform.portfolio.charge.service.ChargeWritePlatformService;
import org.mifosplatform.portfolio.client.service.RollbackTransactionAsCommandIsNotApprovedByCheckerException;
import org.mifosplatform.useradministration.domain.AppUser;
@@ -20,15 +20,16 @@ public class ChargeDefinitionCommandHandler implements CommandSourceHandler {
private final PlatformSecurityContext context;
private final ChangeDetectionService changeDetectionService;
private final PortfolioCommandDeserializerService commandDeserializerService;
private final ChargeCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer;
private final ChargeWritePlatformService writePlatformService;
@Autowired
public ChargeDefinitionCommandHandler(final PlatformSecurityContext context, final ChangeDetectionService changeDetectionService,
final PortfolioCommandDeserializerService commandDeserializerService, final ChargeWritePlatformService writePlatformService) {
final ChargeCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer,
final ChargeWritePlatformService writePlatformService) {
this.context = context;
this.changeDetectionService = changeDetectionService;
this.commandDeserializerService = commandDeserializerService;
this.commandFromCommandJsonDeserializer = commandFromCommandJsonDeserializer;
this.writePlatformService = writePlatformService;
}
@@ -41,8 +42,8 @@ public class ChargeDefinitionCommandHandler implements CommandSourceHandler {
CommandSource commandSourceResult = commandSource.copy();
final Long resourceId = commandSource.resourceId();
final ChargeDefinitionCommand command = this.commandDeserializerService.deserializeChargeDefinitionCommand(resourceId,
commandSourceResult.json(), false);
final ChargeDefinitionCommand command = this.commandFromCommandJsonDeserializer.commandFromCommandJson(resourceId,
commandSourceResult.json());
if (commandSource.isCreate()) {
try {
@@ -58,9 +59,8 @@ public class ChargeDefinitionCommandHandler implements CommandSourceHandler {
commandSource.resourceId(), commandSource.json());
commandSourceResult.updateJsonTo(jsonOfChangesOnly);
final ChargeDefinitionCommand changesOnly = this.commandDeserializerService.deserializeChargeDefinitionCommand(resourceId,
jsonOfChangesOnly, false);
final ChargeDefinitionCommand changesOnly = this.commandFromCommandJsonDeserializer.commandFromCommandJson(resourceId,
jsonOfChangesOnly);
this.writePlatformService.updateCharge(changesOnly);
commandSourceResult.markAsChecked(maker, asToday);
@@ -85,7 +85,7 @@ public class ChargeDefinitionCommandHandler implements CommandSourceHandler {
final AppUser checker = context.authenticatedUser();
Long resourceId = commandSourceResult.resourceId();
final ChargeDefinitionCommand command = this.commandDeserializerService.deserializeChargeDefinitionCommand(resourceId,
final ChargeDefinitionCommand command = this.commandFromCommandJsonDeserializer.commandFromCommandJson(resourceId,
commandSourceResult.json(), true);
if (commandSourceResult.isCreate()) {
@@ -6,10 +6,10 @@ import java.util.List;
import org.joda.time.LocalDate;
import org.mifosplatform.commands.domain.CommandSource;
import org.mifosplatform.commands.service.ChangeDetectionService;
import org.mifosplatform.infrastructure.core.api.PortfolioCommandDeserializerService;
import org.mifosplatform.infrastructure.core.data.EntityIdentifier;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.portfolio.client.command.ClientCommand;
import org.mifosplatform.portfolio.client.serialization.ClientCommandFromCommandJsonDeserializer;
import org.mifosplatform.portfolio.client.service.ClientWritePlatformService;
import org.mifosplatform.portfolio.client.service.RollbackTransactionAsCommandIsNotApprovedByCheckerException;
import org.mifosplatform.useradministration.domain.AppUser;
@@ -21,16 +21,16 @@ public class ClientCommandHandler implements CommandSourceHandler {
private final PlatformSecurityContext context;
private final ChangeDetectionService changeDetectionService;
private final ClientCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer;
private final ClientWritePlatformService clientWritePlatformService;
private final PortfolioCommandDeserializerService commandDeserializerService;
@Autowired
public ClientCommandHandler(final PlatformSecurityContext context, final ChangeDetectionService changeDetectionService,
final PortfolioCommandDeserializerService commandDeserializerService,
final ClientCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer,
final ClientWritePlatformService clientWritePlatformService) {
this.context = context;
this.changeDetectionService = changeDetectionService;
this.commandDeserializerService = commandDeserializerService;
this.commandFromCommandJsonDeserializer = commandFromCommandJsonDeserializer;
this.clientWritePlatformService = clientWritePlatformService;
}
@@ -40,8 +40,8 @@ public class ClientCommandHandler implements CommandSourceHandler {
final AppUser maker = context.authenticatedUser();
final LocalDate asToday = new LocalDate();
final ClientCommand command = this.commandDeserializerService.deserializeClientCommand(commandSource.resourceId(),
commandSource.json(), false);
final ClientCommand command = this.commandFromCommandJsonDeserializer.commandFromCommandJson(commandSource.resourceId(),
commandSource.json());
CommandSource commandSourceResult = commandSource.copy();
Long newResourceId = null;
@@ -60,9 +60,8 @@ public class ClientCommandHandler implements CommandSourceHandler {
commandSource.resourceId(), commandSource.json());
commandSourceResult.updateJsonTo(jsonOfChangesOnly);
final ClientCommand changesOnly = this.commandDeserializerService.deserializeClientCommand(commandSource.resourceId(),
jsonOfChangesOnly, false);
final ClientCommand changesOnly = this.commandFromCommandJsonDeserializer.commandFromCommandJson(
commandSource.resourceId(), jsonOfChangesOnly);
EntityIdentifier result = this.clientWritePlatformService.updateClientDetails(changesOnly);
newResourceId = result.getEntityId();
@@ -88,8 +87,7 @@ public class ClientCommandHandler implements CommandSourceHandler {
final AppUser checker = context.authenticatedUser();
Long resourceId = null;
final ClientCommand command = this.commandDeserializerService.deserializeClientCommand(commandSourceResult.resourceId(),
final ClientCommand command = this.commandFromCommandJsonDeserializer.commandFromCommandJson(commandSourceResult.resourceId(),
commandSourceResult.json(), true);
if (commandSourceResult.isCreate()) {
@@ -97,7 +95,7 @@ public class ClientCommandHandler implements CommandSourceHandler {
"CREATE_CLIENT_CHECKER");
context.authenticatedUser().validateHasPermissionTo("CREATE_CLIENT_CHECKER", allowedPermissions);
resourceId = this.clientWritePlatformService.createClient(command);
Long resourceId = this.clientWritePlatformService.createClient(command);
commandSourceResult.updateResourceId(resourceId);
commandSourceResult.markAsChecked(checker, new LocalDate());
} else if (commandSourceResult.isUpdate()) {
@@ -105,16 +103,14 @@ public class ClientCommandHandler implements CommandSourceHandler {
"UPDATE_CLIENT_CHECKER");
context.authenticatedUser().validateHasPermissionTo("UPDATE_CLIENT_CHECKER", allowedPermissions);
EntityIdentifier result = this.clientWritePlatformService.updateClientDetails(command);
resourceId = result.getEntityId();
this.clientWritePlatformService.updateClientDetails(command);
commandSourceResult.markAsChecked(checker, new LocalDate());
} else if (commandSourceResult.isDelete()) {
final List<String> allowedPermissions = Arrays.asList("ALL_FUNCTIONS", "PORTFOLIO_MANAGEMENT_SUPER_USER",
"DELETE_CLIENT_CHECKER");
context.authenticatedUser().validateHasPermissionTo("DELETE_CLIENT_CHECKER", allowedPermissions);
EntityIdentifier result = this.clientWritePlatformService.deleteClient(command);
resourceId = result.getEntityId();
this.clientWritePlatformService.deleteClient(command);
commandSourceResult.markAsChecked(checker, new LocalDate());
}
@@ -6,10 +6,9 @@ import java.util.List;
import org.joda.time.LocalDate;
import org.mifosplatform.commands.domain.CommandSource;
import org.mifosplatform.commands.service.ChangeDetectionService;
import org.mifosplatform.infrastructure.core.api.PortfolioCommandDeserializerService;
import org.mifosplatform.infrastructure.core.data.EntityIdentifier;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.portfolio.client.command.ClientIdentifierCommand;
import org.mifosplatform.portfolio.client.serialization.ClientIdentifierCommandFromCommandJsonDeserializer;
import org.mifosplatform.portfolio.client.service.ClientWritePlatformService;
import org.mifosplatform.portfolio.client.service.RollbackTransactionAsCommandIsNotApprovedByCheckerException;
import org.mifosplatform.useradministration.domain.AppUser;
@@ -22,15 +21,15 @@ public class ClientIdentifierCommandHandler implements CommandSourceHandler {
private final PlatformSecurityContext context;
private final ChangeDetectionService changeDetectionService;
private final ClientWritePlatformService clientWritePlatformService;
private final PortfolioCommandDeserializerService commandDeserializerService;
private final ClientIdentifierCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer;
@Autowired
public ClientIdentifierCommandHandler(final PlatformSecurityContext context, final ChangeDetectionService changeDetectionService,
final PortfolioCommandDeserializerService commandDeserializerService,
final ClientIdentifierCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer,
final ClientWritePlatformService clientWritePlatformService) {
this.context = context;
this.changeDetectionService = changeDetectionService;
this.commandDeserializerService = commandDeserializerService;
this.commandFromCommandJsonDeserializer = commandFromCommandJsonDeserializer;
this.clientWritePlatformService = clientWritePlatformService;
}
@@ -40,15 +39,13 @@ public class ClientIdentifierCommandHandler implements CommandSourceHandler {
final AppUser maker = context.authenticatedUser();
final LocalDate asToday = new LocalDate();
final ClientIdentifierCommand command = this.commandDeserializerService.deserializeClientIdentifierCommand(
commandSource.resourceId(), null, commandSource.json(), false);
final ClientIdentifierCommand command = this.commandFromCommandJsonDeserializer.commandFromCommandJson(commandSource.resourceId(),
commandSource.json());
CommandSource commandSourceResult = commandSource.copy();
Long newResourceId = null;
if (commandSource.isCreate()) {
try {
newResourceId = this.clientWritePlatformService.addClientIdentifier(command);
Long newResourceId = this.clientWritePlatformService.addClientIdentifier(command);
commandSourceResult.markAsChecked(maker, asToday);
commandSourceResult.updateResourceId(newResourceId);
} catch (RollbackTransactionAsCommandIsNotApprovedByCheckerException e) {
@@ -60,20 +57,17 @@ public class ClientIdentifierCommandHandler implements CommandSourceHandler {
commandSource.resourceId(), commandSource.json());
commandSourceResult.updateJsonTo(jsonOfChangesOnly);
final ClientIdentifierCommand changesOnly = this.commandDeserializerService.deserializeClientIdentifierCommand(
commandSource.resourceId(), null, jsonOfChangesOnly, false);
EntityIdentifier result = this.clientWritePlatformService.updateClientIdentifier(changesOnly);
newResourceId = result.getEntityId();
final ClientIdentifierCommand changesOnly = this.commandFromCommandJsonDeserializer.commandFromCommandJson(
commandSource.resourceId(), jsonOfChangesOnly);
this.clientWritePlatformService.updateClientIdentifier(changesOnly);
commandSourceResult.markAsChecked(maker, asToday);
} catch (RollbackTransactionAsCommandIsNotApprovedByCheckerException e) {
// swallow this rollback transaction by design
}
} else if (commandSource.isDelete()) {
try {
EntityIdentifier result = this.clientWritePlatformService.deleteClientIdentifier(command);
newResourceId = result.getEntityId();
this.clientWritePlatformService.deleteClientIdentifier(command);
commandSourceResult.markAsChecked(maker, asToday);
} catch (RollbackTransactionAsCommandIsNotApprovedByCheckerException e) {
// swallow this rollback transaction by design
@@ -88,16 +82,14 @@ public class ClientIdentifierCommandHandler implements CommandSourceHandler {
final AppUser checker = context.authenticatedUser();
Long resourceId = null;
final ClientIdentifierCommand command = this.commandDeserializerService.deserializeClientIdentifierCommand(
commandSourceResult.resourceId(), null, commandSourceResult.json(), true);
final ClientIdentifierCommand command = this.commandFromCommandJsonDeserializer.commandFromCommandJson(
commandSourceResult.resourceId(), commandSourceResult.json(), true);
if (commandSourceResult.isCreate()) {
final List<String> allowedPermissions = Arrays.asList("ALL_FUNCTIONS", "PORTFOLIO_MANAGEMENT_SUPER_USER",
"CREATE_CLIENTIDENTIFIER_CHECKER");
context.authenticatedUser().validateHasPermissionTo("CREATE_CLIENTIDENTIFIER_CHECKER", allowedPermissions);
resourceId = this.clientWritePlatformService.addClientIdentifier(command);
Long resourceId = this.clientWritePlatformService.addClientIdentifier(command);
commandSourceResult.updateResourceId(resourceId);
commandSourceResult.markAsChecked(checker, new LocalDate());
} else if (commandSourceResult.isUpdate()) {
@@ -105,16 +97,14 @@ public class ClientIdentifierCommandHandler implements CommandSourceHandler {
"UPDATE_CLIENTIDENTIFIER_CHECKER");
context.authenticatedUser().validateHasPermissionTo("UPDATE_CLIENTIDENTIFIER_CHECKER", allowedPermissions);
EntityIdentifier result = this.clientWritePlatformService.updateClientIdentifier(command);
resourceId = result.getEntityId();
this.clientWritePlatformService.updateClientIdentifier(command);
commandSourceResult.markAsChecked(checker, new LocalDate());
} else if (commandSourceResult.isDelete()) {
final List<String> allowedPermissions = Arrays.asList("ALL_FUNCTIONS", "PORTFOLIO_MANAGEMENT_SUPER_USER",
"DELETE_CLIENTIDENTIFIER_CHECKER");
context.authenticatedUser().validateHasPermissionTo("DELETE_CLIENTIDENTIFIER_CHECKER", allowedPermissions);
EntityIdentifier result = this.clientWritePlatformService.deleteClientIdentifier(command);
resourceId = result.getEntityId();
this.clientWritePlatformService.deleteClientIdentifier(command);
commandSourceResult.markAsChecked(checker, new LocalDate());
}
@@ -7,11 +7,11 @@ import org.joda.time.LocalDate;
import org.mifosplatform.commands.domain.CommandSource;
import org.mifosplatform.commands.exception.UnsupportedCommandException;
import org.mifosplatform.commands.service.ChangeDetectionService;
import org.mifosplatform.infrastructure.core.api.PortfolioCommandDeserializerService;
import org.mifosplatform.infrastructure.core.data.EntityIdentifier;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.portfolio.client.service.RollbackTransactionAsCommandIsNotApprovedByCheckerException;
import org.mifosplatform.portfolio.loanproduct.command.LoanProductCommand;
import org.mifosplatform.portfolio.loanproduct.serialization.LoanProductCommandFromCommandJsonDeserializer;
import org.mifosplatform.portfolio.loanproduct.service.LoanProductWritePlatformService;
import org.mifosplatform.useradministration.domain.AppUser;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,15 +22,16 @@ public class LoanProductCommandHandler implements CommandSourceHandler {
private final PlatformSecurityContext context;
private final ChangeDetectionService changeDetectionService;
private final PortfolioCommandDeserializerService commandDeserializerService;
private final LoanProductCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer;
private final LoanProductWritePlatformService writePlatformService;
@Autowired
public LoanProductCommandHandler(final PlatformSecurityContext context, final ChangeDetectionService changeDetectionService,
final PortfolioCommandDeserializerService commandDeserializerService, final LoanProductWritePlatformService writePlatformService) {
final LoanProductCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer,
final LoanProductWritePlatformService writePlatformService) {
this.context = context;
this.changeDetectionService = changeDetectionService;
this.commandDeserializerService = commandDeserializerService;
this.commandFromCommandJsonDeserializer = commandFromCommandJsonDeserializer;
this.writePlatformService = writePlatformService;
}
@@ -41,9 +42,7 @@ public class LoanProductCommandHandler implements CommandSourceHandler {
final LocalDate asToday = new LocalDate();
final Long resourceId = commandSource.resourceId();
final LoanProductCommand command = this.commandDeserializerService.deserializeLoanProductCommand(resourceId, commandSource.json(),
false);
final LoanProductCommand command = this.commandFromCommandJsonDeserializer.commandFromCommandJson(resourceId, commandSource.json());
CommandSource commandSourceResult = commandSource.copy();
if (commandSource.isCreate()) {
@@ -60,9 +59,8 @@ public class LoanProductCommandHandler implements CommandSourceHandler {
commandSource.resourceId(), commandSource.json());
commandSourceResult.updateJsonTo(jsonOfChangesOnly);
final LoanProductCommand changesOnly = this.commandDeserializerService.deserializeLoanProductCommand(resourceId,
jsonOfChangesOnly, false);
final LoanProductCommand changesOnly = this.commandFromCommandJsonDeserializer.commandFromCommandJson(resourceId,
jsonOfChangesOnly);
this.writePlatformService.updateLoanProduct(changesOnly);
commandSourceResult.markAsChecked(maker, asToday);
@@ -80,7 +78,7 @@ public class LoanProductCommandHandler implements CommandSourceHandler {
final AppUser checker = context.authenticatedUser();
Long resourceId = commandSourceResult.resourceId();
final LoanProductCommand command = this.commandDeserializerService.deserializeLoanProductCommand(resourceId,
final LoanProductCommand command = this.commandFromCommandJsonDeserializer.commandFromCommandJson(resourceId,
commandSourceResult.json(), true);
if (commandSourceResult.isCreate()) {
@@ -1,9 +1,7 @@
package org.mifosplatform.infrastructure.core.api;
import org.mifosplatform.organisation.staff.command.BulkTransferLoanOfficerCommand;
import org.mifosplatform.portfolio.charge.command.ChargeDefinitionCommand;
import org.mifosplatform.portfolio.client.command.ClientCommand;
import org.mifosplatform.portfolio.client.command.ClientIdentifierCommand;
import org.mifosplatform.portfolio.client.command.NoteCommand;
import org.mifosplatform.portfolio.client.data.ClientData;
import org.mifosplatform.portfolio.group.command.GroupCommand;
@@ -13,7 +11,6 @@ import org.mifosplatform.portfolio.loanaccount.command.LoanChargeCommand;
import org.mifosplatform.portfolio.loanaccount.command.LoanStateTransitionCommand;
import org.mifosplatform.portfolio.loanaccount.command.LoanTransactionCommand;
import org.mifosplatform.portfolio.loanaccount.gaurantor.command.GuarantorCommand;
import org.mifosplatform.portfolio.loanproduct.command.LoanProductCommand;
import org.mifosplatform.portfolio.savingsaccount.command.SavingAccountCommand;
import org.mifosplatform.portfolio.savingsaccountproduct.command.SavingProductCommand;
import org.mifosplatform.portfolio.savingsdepositaccount.command.DepositAccountCommand;
@@ -25,16 +22,10 @@ import org.mifosplatform.portfolio.savingsdepositproduct.command.DepositProductC
public interface PortfolioApiDataConversionService {
ChargeDefinitionCommand convertApiRequestJsonToChargeDefinitionCommand(Long resourceIdentifier, String json);
LoanProductCommand convertApiRequestJsonToLoanProductCommand(Long resourceIdentifier, String json);
SavingProductCommand convertJsonToSavingProductCommand(Long resourceIdentifier, String json);
DepositProductCommand convertJsonToDepositProductCommand(Long resourceIdentifier, String json);
ClientCommand convertApiRequestJsonToClientCommand(Long resourceIdentifier, String json);
ClientData convertInternalJsonFormatToClientDataChange(Long clientId, String json);
ClientCommand detectChanges(Long resourceId, String baseJson, String workingJson);
@@ -67,8 +58,6 @@ public interface PortfolioApiDataConversionService {
DepositAccountWithdrawInterestCommand convertJsonToDepositAccountWithdrawInterestCommand(Long resourceIdentifier, String json);
ClientIdentifierCommand convertApiRequestJsonToClientIdentifierCommand(Long resourceIdentifier, Long clientId, String json);
SavingAccountCommand convertJsonToSavingAccountCommand(Long resourceIdentifier, String json);
GuarantorCommand convertJsonToGuarantorCommand(Long resourceIdentifier, Long loanId, String json);
@@ -23,11 +23,10 @@ import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidation
import org.mifosplatform.infrastructure.core.exception.UnsupportedParameterException;
import org.mifosplatform.infrastructure.core.serialization.JsonParserHelper;
import org.mifosplatform.organisation.staff.command.BulkTransferLoanOfficerCommand;
import org.mifosplatform.portfolio.charge.command.ChargeDefinitionCommand;
import org.mifosplatform.portfolio.client.command.ClientCommand;
import org.mifosplatform.portfolio.client.command.ClientIdentifierCommand;
import org.mifosplatform.portfolio.client.command.NoteCommand;
import org.mifosplatform.portfolio.client.data.ClientData;
import org.mifosplatform.portfolio.client.serialization.ClientCommandFromCommandJsonDeserializer;
import org.mifosplatform.portfolio.group.command.GroupCommand;
import org.mifosplatform.portfolio.loanaccount.command.AdjustLoanTransactionCommand;
import org.mifosplatform.portfolio.loanaccount.command.LoanApplicationCommand;
@@ -35,7 +34,6 @@ import org.mifosplatform.portfolio.loanaccount.command.LoanChargeCommand;
import org.mifosplatform.portfolio.loanaccount.command.LoanStateTransitionCommand;
import org.mifosplatform.portfolio.loanaccount.command.LoanTransactionCommand;
import org.mifosplatform.portfolio.loanaccount.gaurantor.command.GuarantorCommand;
import org.mifosplatform.portfolio.loanproduct.command.LoanProductCommand;
import org.mifosplatform.portfolio.savingsaccount.command.SavingAccountCommand;
import org.mifosplatform.portfolio.savingsaccountproduct.command.SavingProductCommand;
import org.mifosplatform.portfolio.savingsdepositaccount.command.DepositAccountCommand;
@@ -58,62 +56,17 @@ import com.google.gson.reflect.TypeToken;
@Service
public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataConversionService {
/**
* Used in places where the support json of the api request is not any
* different to that of the json of a serialized command object.
*/
private final PortfolioCommandDeserializerService portfolioCommandDeserializerService;
/**
* Google-gson class for converting to and from json.
*/
private final Gson gsonConverter;
/**
* Google-gson class for parsing json.
*/
// private final JsonParser parser;
private final ClientCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer;
@Autowired
public PortfolioApiDataConversionServiceImpl(final PortfolioCommandDeserializerService portfolioCommandDeserializerService) {
this.portfolioCommandDeserializerService = portfolioCommandDeserializerService;
public PortfolioApiDataConversionServiceImpl(final ClientCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer) {
this.commandFromCommandJsonDeserializer = commandFromCommandJsonDeserializer;
this.gsonConverter = new Gson();
// this.parser = new JsonParser();
}
@Override
public ChargeDefinitionCommand convertApiRequestJsonToChargeDefinitionCommand(final Long resourceIdentifier, final String json) {
if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
final Type typeOfMap = new TypeToken<Map<String, String>>() {}.getType();
final Map<String, String> requestMap = gsonConverter.fromJson(json, typeOfMap);
final Set<String> supportedParams = new HashSet<String>(Arrays.asList("name", "amount", "locale", "currencyCode",
"currencyOptions", "chargeAppliesTo", "chargeTimeType", "chargeCalculationType", "chargeCalculationTypeOptions", "penalty",
"active"));
checkForUnsupportedParameters(requestMap, supportedParams);
final JsonParserHelper helper = new JsonParserHelper();
JsonParser parser = new JsonParser();
final JsonElement element = parser.parse(json);
final Set<String> parametersPassedInRequest = new HashSet<String>();
final String name = helper.extractStringNamed("name", element, parametersPassedInRequest);
final String currencyCode = helper.extractStringNamed("currencyCode", element, parametersPassedInRequest);
final BigDecimal amount = helper.extractBigDecimalWithLocaleNamed("amount", element.getAsJsonObject(), parametersPassedInRequest);
final Integer chargeTimeType = helper.extractIntegerWithLocaleNamed("chargeTimeType", element, parametersPassedInRequest);
final Integer chargeAppliesTo = helper.extractIntegerWithLocaleNamed("chargeAppliesTo", element, parametersPassedInRequest);
final Integer chargeCalculationType = helper.extractIntegerWithLocaleNamed("chargeCalculationType", element,
parametersPassedInRequest);
final Boolean penalty = helper.extractBooleanNamed("penalty", element, parametersPassedInRequest);
final Boolean active = helper.extractBooleanNamed("active", element, parametersPassedInRequest);
return new ChargeDefinitionCommand(parametersPassedInRequest, false, resourceIdentifier, name, amount, currencyCode,
chargeTimeType, chargeAppliesTo, chargeCalculationType, penalty, active);
}
@Override
@@ -293,38 +246,10 @@ public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataCo
return differenceExists;
}
@Override
public ClientCommand convertApiRequestJsonToClientCommand(final Long resourceIdentifier, final String json) {
if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
final Type typeOfMap = new TypeToken<Map<String, String>>() {}.getType();
final Map<String, String> requestMap = gsonConverter.fromJson(json, typeOfMap);
final Set<String> supportedParams = new HashSet<String>(Arrays.asList("id", "externalId", "firstname", "lastname",
"clientOrBusinessName", "officeId", "joiningDate", "locale", "dateFormat"));
checkForUnsupportedParameters(requestMap, supportedParams);
final JsonParser parser = new JsonParser();
final JsonElement element = parser.parse(json);
final JsonParserHelper helper = new JsonParserHelper();
final Set<String> parametersPassedInRequest = new HashSet<String>();
final Long officeId = helper.extractLongNamed("officeId", element, parametersPassedInRequest);
final String externalId = helper.extractStringNamed("externalId", element, parametersPassedInRequest);
final String firstname = helper.extractStringNamed("firstname", element, parametersPassedInRequest);
final String lastname = helper.extractStringNamed("lastname", element, parametersPassedInRequest);
final String clientOrBusinessName = helper.extractStringNamed("clientOrBusinessName", element, parametersPassedInRequest);
final LocalDate joiningDate = helper.extractLocalDateNamed("joiningDate", element, parametersPassedInRequest);
return new ClientCommand(parametersPassedInRequest, resourceIdentifier, externalId, firstname, lastname, clientOrBusinessName,
officeId, joiningDate, false);
}
@Override
public ClientData convertInternalJsonFormatToClientDataChange(final Long resourceIdentifier, final String json) {
final ClientCommand command = this.portfolioCommandDeserializerService.deserializeClientCommand(resourceIdentifier, json, false);
final ClientCommand command = this.commandFromCommandJsonDeserializer.commandFromCommandJson(resourceIdentifier, json);
return ClientData.dataChangeInstance(resourceIdentifier, command.getOfficeId(), command.getExternalId(), command.getFirstname(),
command.getLastname(), command.getClientOrBusinessName(), command.getJoiningDate());
@@ -368,78 +293,6 @@ public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataCo
return new GroupCommand(modifiedParameters, resourceIdentifier, externalId, name, officeId, clientMembers);
}
@Override
public LoanProductCommand convertApiRequestJsonToLoanProductCommand(final Long resourceIdentifier, final String json) {
if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
final Map<String, Object> requestMap = gsonConverter.fromJson(json, typeOfMap);
final Set<String> supportedParams = new HashSet<String>(Arrays.asList("name", "description", "fundId",
"transactionProcessingStrategyId", "currencyCode", "digitsAfterDecimal", "principal", "inArrearsTolerance",
"interestRatePerPeriod", "repaymentEvery", "numberOfRepayments", "repaymentFrequencyType", "interestRateFrequencyType",
"amortizationType", "interestType", "interestCalculationPeriodType", "charges", "locale"));
checkForUnsupportedParameters(requestMap, supportedParams);
final JsonParser parser = new JsonParser();
final JsonElement element = parser.parse(json);
final JsonParserHelper helper = new JsonParserHelper();
final Set<String> modifiedParameters = new HashSet<String>();
final String name = helper.extractStringNamed("name", element, modifiedParameters);
final String description = helper.extractStringNamed("description", element, modifiedParameters);
final Long fundId = helper.extractLongNamed("fundId", element, modifiedParameters);
final Long transactionProcessingStrategyId = helper
.extractLongNamed("transactionProcessingStrategyId", element, modifiedParameters);
final String currencyCode = helper.extractStringNamed("currencyCode", element, modifiedParameters);
final Integer digitsAfterDecimal = helper.extractIntegerWithLocaleNamed("digitsAfterDecimal", element, modifiedParameters);
final BigDecimal principal = helper.extractBigDecimalWithLocaleNamed("principal", element, modifiedParameters);
final BigDecimal inArrearsTolerance = helper.extractBigDecimalWithLocaleNamed("inArrearsTolerance", element, modifiedParameters);
final BigDecimal interestRatePerPeriod = helper.extractBigDecimalWithLocaleNamed("interestRatePerPeriod", element,
modifiedParameters);
final Integer repaymentEvery = helper.extractIntegerWithLocaleNamed("repaymentEvery", element, modifiedParameters);
final Integer numberOfRepayments = helper.extractIntegerWithLocaleNamed("numberOfRepayments", element, modifiedParameters);
final Integer repaymentFrequencyType = helper.extractIntegerWithLocaleNamed("repaymentFrequencyType", element, modifiedParameters);
// FIXME - A - LoanProduct - KW - should loan term fields be part of
// product also as are basic part of 'loan terms'
// final Integer loanTermFrequency =
// helper.extractIntegerNamed("loanTermFrequency", element,
// modifiedParameters);
// final Integer loanTermFrequencyType =
// helper.extractIntegerNamed("loanTermFrequencyType", element,
// modifiedParameters);
final Integer interestRateFrequencyType = helper.extractIntegerWithLocaleNamed("interestRateFrequencyType", element,
modifiedParameters);
final Integer amortizationType = helper.extractIntegerWithLocaleNamed("amortizationType", element, modifiedParameters);
final Integer interestType = helper.extractIntegerWithLocaleNamed("interestType", element, modifiedParameters);
final Integer interestCalculationPeriodType = helper.extractIntegerWithLocaleNamed("interestCalculationPeriodType", element,
modifiedParameters);
String[] charges = null;
if (element.isJsonObject()) {
JsonObject object = element.getAsJsonObject();
if (object.has("charges")) {
modifiedParameters.add("charges");
JsonArray array = object.get("charges").getAsJsonArray();
charges = new String[array.size()];
for (int i = 0; i < array.size(); i++) {
charges[i] = array.get(i).getAsString();
}
}
}
return new LoanProductCommand(modifiedParameters, false, resourceIdentifier, name, description, fundId,
transactionProcessingStrategyId, currencyCode, digitsAfterDecimal, principal, inArrearsTolerance, numberOfRepayments,
repaymentEvery, interestRatePerPeriod, repaymentFrequencyType, interestRateFrequencyType, amortizationType, interestType,
interestCalculationPeriodType, charges);
}
@Override
public LoanApplicationCommand convertApiRequestJsonToLoanApplicationCommand(final Long resourceIdentifier, final String json) {
@@ -1337,21 +1190,6 @@ public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataCo
return new DepositAccountWithdrawInterestCommand(resourceIdentifier, amount, note);
}
@Override
public ClientIdentifierCommand convertApiRequestJsonToClientIdentifierCommand(final Long resourceIdentifier, final Long clientId,
final String json) {
if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
Type typeOfMap = new TypeToken<Map<String, String>>() {}.getType();
Map<String, String> requestMap = gsonConverter.fromJson(json, typeOfMap);
Set<String> supportedParams = new HashSet<String>(Arrays.asList("clientId", "documentTypeId", "documentKey", "description"));
checkForUnsupportedParameters(requestMap, supportedParams);
return this.portfolioCommandDeserializerService.deserializeClientIdentifierCommand(resourceIdentifier, clientId, json, false);
}
@Override
public SavingAccountCommand convertJsonToSavingAccountCommand(Long resourceIdentifier, String json) {
@@ -1365,7 +1203,7 @@ public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataCo
"digitsAfterDecimal", "savingsDepositAmountPerPeriod", "recurringInterestRate", "savingInterestRate", "tenure",
"commencementDate", "locale", "dateFormat", "isLockinPeriodAllowed", "lockinPeriod", "lockinPeriodType",
"savingProductType", "tenureType", "frequency", "interestType", "interestCalculationMethod", "minimumBalanceForWithdrawal",
"isPartialDepositAllowed","payEvery"));
"isPartialDepositAllowed", "payEvery"));
checkForUnsupportedParameters(requestMap, supportedParams);
Set<String> modifiedParameters = new HashSet<String>();
@@ -1396,7 +1234,7 @@ public class PortfolioApiDataConversionServiceImpl implements PortfolioApiDataCo
return new SavingAccountCommand(modifiedParameters, resourceIdentifier, clientId, productId, externalId, currencyCode,
digitsAfterDecimalValue, savingsDepositAmount, recurringInterestRate, savingInterestRate, tenure, commencementDate,
savingProductType, tenureType, frequency, interestType, minimumBalanceForWithdrawal, interestCalculationMethod,
isLockinPeriodAllowed, isPartialDepositAllowed, lockinPeriod, lockinPeriodType,payEvery);
isLockinPeriodAllowed, isPartialDepositAllowed, lockinPeriod, lockinPeriodType, payEvery);
}
@Override
@@ -1,165 +0,0 @@
package org.mifosplatform.infrastructure.core.api;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.exception.InvalidJsonException;
import org.mifosplatform.infrastructure.core.serialization.JsonParserHelper;
import org.mifosplatform.portfolio.charge.command.ChargeDefinitionCommand;
import org.mifosplatform.portfolio.client.command.ClientCommand;
import org.mifosplatform.portfolio.client.command.ClientIdentifierCommand;
import org.mifosplatform.portfolio.loanproduct.command.LoanProductCommand;
import org.springframework.stereotype.Service;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
/**
* Implementation of {@link PortfolioCommandDeserializerService} that
* de-serializes JSON of commands into Java object representation using
* google-gson.
*/
@Service
public class PortfolioCommandDeerializerServiceGoogleGson implements PortfolioCommandDeserializerService {
private final JsonParser parser;
public PortfolioCommandDeerializerServiceGoogleGson() {
parser = new JsonParser();
}
@Override
public ChargeDefinitionCommand deserializeChargeDefinitionCommand(final Long chargeDefinitionId, final String commandAsJson,
final boolean makerCheckerApproval) {
if (StringUtils.isBlank(commandAsJson)) { throw new InvalidJsonException(); }
final JsonParserHelper helper = new JsonParserHelper();
final JsonElement element = parser.parse(commandAsJson);
final Set<String> parametersPassedInRequest = new HashSet<String>();
final String name = helper.extractStringNamed("name", element, parametersPassedInRequest);
final String currencyCode = helper.extractStringNamed("currencyCode", element, parametersPassedInRequest);
final BigDecimal amount = helper.extractBigDecimalNamed("amount", element.getAsJsonObject(), Locale.US, parametersPassedInRequest);
final Integer chargeTimeType = helper.extractIntegerNamed("chargeTimeType", element, Locale.US, parametersPassedInRequest);
final Integer chargeAppliesTo = helper.extractIntegerNamed("chargeAppliesTo", element, Locale.US, parametersPassedInRequest);
final Integer chargeCalculationType = helper.extractIntegerNamed("chargeCalculationType", element, Locale.US,
parametersPassedInRequest);
final Boolean penalty = helper.extractBooleanNamed("penalty", element, parametersPassedInRequest);
final Boolean active = helper.extractBooleanNamed("active", element, parametersPassedInRequest);
return new ChargeDefinitionCommand(parametersPassedInRequest, makerCheckerApproval, chargeDefinitionId, name, amount, currencyCode,
chargeTimeType, chargeAppliesTo, chargeCalculationType, penalty, active);
}
@Override
public ClientCommand deserializeClientCommand(final Long clientId, final String commandAsJson, final boolean makerCheckerApproval) {
if (StringUtils.isBlank(commandAsJson)) { throw new InvalidJsonException(); }
final JsonParserHelper helper = new JsonParserHelper();
final JsonElement element = parser.parse(commandAsJson);
final Set<String> parametersPassedInRequest = new HashSet<String>();
final Long officeId = helper.extractLongNamed("officeId", element, parametersPassedInRequest);
final String externalId = helper.extractStringNamed("externalId", element, parametersPassedInRequest);
final String firstname = helper.extractStringNamed("firstname", element, parametersPassedInRequest);
final String lastname = helper.extractStringNamed("lastname", element, parametersPassedInRequest);
final String clientOrBusinessName = helper.extractStringNamed("clientOrBusinessName", element, parametersPassedInRequest);
final LocalDate joiningDate = helper.extractLocalDateAsArrayNamed("joiningDate", element, parametersPassedInRequest);
return new ClientCommand(parametersPassedInRequest, clientId, externalId, firstname, lastname, clientOrBusinessName, officeId,
joiningDate, makerCheckerApproval);
}
@Override
public LoanProductCommand deserializeLoanProductCommand(final Long loanProductId, final String commandAsJson,
final boolean makerCheckerApproval) {
if (StringUtils.isBlank(commandAsJson)) { throw new InvalidJsonException(); }
final JsonParserHelper helper = new JsonParserHelper();
final JsonElement element = parser.parse(commandAsJson);
final Set<String> parametersPassedInRequest = new HashSet<String>();
final String name = helper.extractStringNamed("name", element, parametersPassedInRequest);
final String description = helper.extractStringNamed("description", element, parametersPassedInRequest);
final Long fundId = helper.extractLongNamed("fundId", element, parametersPassedInRequest);
final Long transactionProcessingStrategyId = helper.extractLongNamed("transactionProcessingStrategyId", element,
parametersPassedInRequest);
final String currencyCode = helper.extractStringNamed("currencyCode", element, parametersPassedInRequest);
final Integer digitsAfterDecimal = helper.extractIntegerNamed("digitsAfterDecimal", element, Locale.US, parametersPassedInRequest);
final BigDecimal principal = helper.extractBigDecimalNamed("principal", element.getAsJsonObject(), Locale.US,
parametersPassedInRequest);
final BigDecimal inArrearsTolerance = helper.extractBigDecimalNamed("inArrearsTolerance", element.getAsJsonObject(), Locale.US,
parametersPassedInRequest);
final BigDecimal interestRatePerPeriod = helper.extractBigDecimalNamed("interestRatePerPeriod", element.getAsJsonObject(),
Locale.US, parametersPassedInRequest);
final Integer repaymentEvery = helper.extractIntegerNamed("repaymentEvery", element, Locale.US, parametersPassedInRequest);
final Integer numberOfRepayments = helper.extractIntegerNamed("numberOfRepayments", element, Locale.US, parametersPassedInRequest);
final Integer repaymentFrequencyType = helper.extractIntegerNamed("repaymentFrequencyType", element, Locale.US,
parametersPassedInRequest);
final Integer interestRateFrequencyType = helper.extractIntegerNamed("interestRateFrequencyType", element, Locale.US,
parametersPassedInRequest);
final Integer amortizationType = helper.extractIntegerNamed("amortizationType", element, Locale.US, parametersPassedInRequest);
final Integer interestType = helper.extractIntegerNamed("interestType", element, Locale.US, parametersPassedInRequest);
final Integer interestCalculationPeriodType = helper.extractIntegerNamed("interestCalculationPeriodType", element, Locale.US,
parametersPassedInRequest);
String[] charges = null;
if (element.isJsonObject()) {
JsonObject object = element.getAsJsonObject();
if (object.has("charges")) {
parametersPassedInRequest.add("charges");
JsonArray array = object.get("charges").getAsJsonArray();
charges = new String[array.size()];
for (int i = 0; i < array.size(); i++) {
charges[i] = array.get(i).getAsString();
}
}
}
return new LoanProductCommand(parametersPassedInRequest, makerCheckerApproval, loanProductId, name, description, fundId,
transactionProcessingStrategyId, currencyCode, digitsAfterDecimal, principal, inArrearsTolerance, numberOfRepayments,
repaymentEvery, interestRatePerPeriod, repaymentFrequencyType, interestRateFrequencyType, amortizationType, interestType,
interestCalculationPeriodType, charges);
}
@Override
public ClientIdentifierCommand deserializeClientIdentifierCommand(final Long clientIdentifierId, final Long clientId,
final String commandAsJson, final boolean makerCheckerApproval) {
if (StringUtils.isBlank(commandAsJson)) { throw new InvalidJsonException(); }
final JsonParserHelper helper = new JsonParserHelper();
final JsonElement element = parser.parse(commandAsJson);
final Set<String> parametersPassedInRequest = new HashSet<String>();
Long actualClientId = clientId;
final Long clientIdInternal = helper.extractLongNamed("clientId", element, parametersPassedInRequest);
if (clientIdInternal != null) {
actualClientId = clientIdInternal;
}
final Long documentTypeId = helper.extractLongNamed("documentTypeId", element, parametersPassedInRequest);
final String documentKey = helper.extractStringNamed("documentKey", element, parametersPassedInRequest);
final String documentDescription = helper.extractStringNamed("documentDescription", element, parametersPassedInRequest);
return new ClientIdentifierCommand(parametersPassedInRequest, makerCheckerApproval, clientIdentifierId, actualClientId,
documentTypeId, documentKey, documentDescription);
}
}
@@ -1,28 +0,0 @@
package org.mifosplatform.infrastructure.core.api;
import org.mifosplatform.portfolio.charge.command.ChargeDefinitionCommand;
import org.mifosplatform.portfolio.client.command.ClientCommand;
import org.mifosplatform.portfolio.client.command.ClientIdentifierCommand;
import org.mifosplatform.portfolio.loanproduct.command.LoanProductCommand;
/**
* Service for de-serializing JSON for a command into the platforms internal
* Java object representation of the command.
*
* <p>
* Known implementations:
* </p>
*
* @see PortfolioCommandDeerializerServiceGoogleGson
*/
public interface PortfolioCommandDeserializerService {
ChargeDefinitionCommand deserializeChargeDefinitionCommand(Long chargeDefinitionId, String commandAsJson, boolean makerCheckerApproval);
ClientCommand deserializeClientCommand(Long clientId, String commandAsJson, boolean makerCheckerApproval);
LoanProductCommand deserializeLoanProductCommand(Long loanProductId, String commandAsJson, boolean makerCheckerApproval);
ClientIdentifierCommand deserializeClientIdentifierCommand(Long clientIdentifierId, Long clientId, String commandAsJson,
boolean makerCheckerApproval);
}
@@ -93,4 +93,14 @@ public class FromJsonHelper {
final Set<String> parametersPassedInRequest) {
return helperDelegator.extractBigDecimalNamed(parameterName, element.getAsJsonObject(), Locale.US, parametersPassedInRequest);
}
public Integer extractIntegerWithLocaleNamed(final String parameterName, final JsonElement element,
final Set<String> parametersPassedInRequest) {
return helperDelegator.extractIntegerWithLocaleNamed(parameterName, element.getAsJsonObject(), parametersPassedInRequest);
}
public Integer extractIntegerNamed(final String parameterName, final JsonElement element,
final Set<String> parametersPassedInRequest) {
return helperDelegator.extractIntegerNamed(parameterName, element.getAsJsonObject(), Locale.US, parametersPassedInRequest);
}
}
@@ -20,14 +20,12 @@ import javax.ws.rs.core.UriInfo;
import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService;
import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper;
import org.mifosplatform.infrastructure.core.api.PortfolioApiDataConversionService;
import org.mifosplatform.infrastructure.core.data.EntityIdentifier;
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.mifosplatform.infrastructure.core.serialization.CommandSerializer;
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.portfolio.charge.command.ChargeDefinitionCommand;
import org.mifosplatform.portfolio.charge.data.ChargeData;
import org.mifosplatform.portfolio.charge.serialization.ChargeDefinitionCommandFromApiJsonDeserializer;
import org.mifosplatform.portfolio.charge.service.ChargeReadPlatformService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
@@ -38,38 +36,32 @@ import org.springframework.stereotype.Component;
@Scope("singleton")
public class ChargesApiResource {
private final Set<String> CHARGES_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "name", "amount", "currency",
"penalty", "active", "chargeAppliesTo", "chargeTimeType", "chargeCalculationType", "chargeCalculationTypeOptions",
private final Set<String> CHARGES_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "name", "amount", "currency", "penalty",
"active", "chargeAppliesTo", "chargeTimeType", "chargeCalculationType", "chargeCalculationTypeOptions",
"chargeAppliesToOptions", "chargeTimeTypeOptions", "currencyOptions"));
private final String resourceNameForPermissions = "CHARGE";
private final PlatformSecurityContext context;
private final ChargeReadPlatformService readPlatformService;
private final DefaultToApiJsonSerializer<ChargeData> toApiJsonSerializer;
private final ApiRequestParameterHelper apiRequestParameterHelper;
private final PortfolioApiDataConversionService apiDataConversionService;
private final CommandSerializer commandSerializerService;
private final ChargeDefinitionCommandFromApiJsonDeserializer fromApiJsonDeserializer;
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
@Autowired
public ChargesApiResource(final PlatformSecurityContext context,
final ChargeReadPlatformService readPlatformService,
final DefaultToApiJsonSerializer<ChargeData> toApiJsonSerializer,
final ApiRequestParameterHelper apiRequestParameterHelper,
final PortfolioApiDataConversionService apiDataConversionService,
final CommandSerializer commandSerializerService,
public ChargesApiResource(final PlatformSecurityContext context, final ChargeReadPlatformService readPlatformService,
final ChargeDefinitionCommandFromApiJsonDeserializer fromApiJsonDeserializer,
final DefaultToApiJsonSerializer<ChargeData> toApiJsonSerializer, final ApiRequestParameterHelper apiRequestParameterHelper,
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService) {
this.context = context;
this.readPlatformService = readPlatformService;
this.fromApiJsonDeserializer = fromApiJsonDeserializer;
this.toApiJsonSerializer = toApiJsonSerializer;
this.apiRequestParameterHelper = apiRequestParameterHelper;
this.apiDataConversionService = apiDataConversionService;
this.commandSerializerService = commandSerializerService;
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
}
@GET
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@@ -92,7 +84,7 @@ public class ChargesApiResource {
context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions);
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
ChargeData charge = this.readPlatformService.retrieveCharge(chargeId);
if (settings.isTemplate()) {
ChargeData templateData = this.readPlatformService.retrieveNewChargeDetails();
@@ -120,14 +112,14 @@ public class ChargesApiResource {
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String createCharge(final String apiRequestBodyAsJson) {
final List<String> allowedPermissions = Arrays.asList("ALL_FUNCTIONS", "ORGANISATION_ADMINISTRATION_SUPER_USER", "CREATE_CHARGE");
context.authenticatedUser().validateHasPermissionTo("CREATE_CHARGE", allowedPermissions);
final ChargeDefinitionCommand command = this.apiDataConversionService.convertApiRequestJsonToChargeDefinitionCommand(null, apiRequestBodyAsJson);
final String commandSerializedAsJson = this.commandSerializerService.serializeCommandToJson(command);
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("CREATE", "charges", null, commandSerializedAsJson);
final String commandSerializedAsJson = this.fromApiJsonDeserializer.serializedCommandJsonFromApiJson(apiRequestBodyAsJson);
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("CREATE", "charges", null,
commandSerializedAsJson);
return this.toApiJsonSerializer.serialize(result);
}
@@ -137,14 +129,15 @@ public class ChargesApiResource {
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String updateCharge(@PathParam("chargeId") final Long chargeId, final String apiRequestBodyAsJson) {
final List<String> allowedPermissions = Arrays.asList("ALL_FUNCTIONS", "ORGANISATION_ADMINISTRATION_SUPER_USER", "UPDATE_CHARGE");
context.authenticatedUser().validateHasPermissionTo("UPDATE_CHARGE", allowedPermissions);
final ChargeDefinitionCommand command = this.apiDataConversionService.convertApiRequestJsonToChargeDefinitionCommand(chargeId, apiRequestBodyAsJson);
final String commandSerializedAsJson = this.commandSerializerService.serializeCommandToJson(command);
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("UPDATE", "charges", chargeId, commandSerializedAsJson);
final String commandSerializedAsJson = this.fromApiJsonDeserializer
.serializedCommandJsonFromApiJson(chargeId, apiRequestBodyAsJson);
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("UPDATE", "charges", chargeId,
commandSerializedAsJson);
return this.toApiJsonSerializer.serialize(result);
}
@@ -157,7 +150,7 @@ public class ChargesApiResource {
final List<String> allowedPermissions = Arrays.asList("ALL_FUNCTIONS", "ORGANISATION_ADMINISTRATION_SUPER_USER", "DELETE_CHARGE");
context.authenticatedUser().validateHasPermissionTo("DELETE_CHARGE", allowedPermissions);
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("DELETE", "charges", chargeId, "{}");
return this.toApiJsonSerializer.serialize(result);
@@ -17,30 +17,19 @@ public class ChargeDefinitionCommand {
private final String name;
private final BigDecimal amount;
private final String currencyCode;
private final Integer chargeTimeType;
private final Integer chargeAppliesTo;
private final Integer chargeCalculationType;
private final Boolean penalty;
private final Boolean active;
private final boolean penalty;
private final boolean active;
private final transient Set<String> modifiedParameters;
private final transient Set<String> parametersPassedInRequest;
private final transient boolean makerCheckerApproval;
private final transient Long id;
public ChargeDefinitionCommand(
final Set<String> modifiedParameters,
final boolean makerCheckerApproval,
final Long id,
final String name,
final BigDecimal amount,
final String currencyCode,
final Integer chargeTimeType,
final Integer chargeAppliesTo,
final Integer chargeCalculationType,
final boolean penalty,
final boolean active) {
public ChargeDefinitionCommand(final Set<String> parametersPassedInRequest, final boolean makerCheckerApproval, final Long id,
final String name, final BigDecimal amount, final String currencyCode, final Integer chargeTimeType,
final Integer chargeAppliesTo, final Integer chargeCalculationType, final Boolean penalty, final Boolean active) {
this.makerCheckerApproval = makerCheckerApproval;
this.id = id;
this.name = name;
@@ -49,7 +38,7 @@ public class ChargeDefinitionCommand {
this.chargeTimeType = chargeTimeType;
this.chargeAppliesTo = chargeAppliesTo;
this.chargeCalculationType = chargeCalculationType;
this.modifiedParameters = modifiedParameters;
this.parametersPassedInRequest = parametersPassedInRequest;
this.penalty = penalty;
this.active = active;
}
@@ -67,7 +56,7 @@ public class ChargeDefinitionCommand {
}
public Set<String> getModifiedParameters() {
return modifiedParameters;
return parametersPassedInRequest;
}
public String getCurrencyCode() {
@@ -85,51 +74,51 @@ public class ChargeDefinitionCommand {
public Integer getChargeTimeType() {
return chargeTimeType;
}
public boolean isPenalty() {
return penalty;
}
public boolean isFee() {
return !penalty;
}
public boolean isActive() {
public boolean isPenalty() {
return penalty;
}
public boolean isFee() {
return !penalty;
}
public boolean isActive() {
return active;
}
public boolean isNameChanged(){
return this.modifiedParameters.contains("name");
public boolean isNameChanged() {
return this.parametersPassedInRequest.contains("name");
}
public boolean isAmountChanged(){
return this.modifiedParameters.contains("amount");
public boolean isAmountChanged() {
return this.parametersPassedInRequest.contains("amount");
}
public boolean isCurrencyCodeChanged(){
return this.modifiedParameters.contains("currencyCode");
public boolean isCurrencyCodeChanged() {
return this.parametersPassedInRequest.contains("currencyCode");
}
public boolean isChargeTimeTypeChanged(){
return this.modifiedParameters.contains("chargeTimeType");
public boolean isChargeTimeTypeChanged() {
return this.parametersPassedInRequest.contains("chargeTimeType");
}
public boolean isChargeAppliesToChanged(){
return this.modifiedParameters.contains("chargeAppliesTo");
public boolean isChargeAppliesToChanged() {
return this.parametersPassedInRequest.contains("chargeAppliesTo");
}
public boolean isChargeCalculationTypeChanged(){
return this.modifiedParameters.contains("chargeCalculationType");
public boolean isChargeCalculationTypeChanged() {
return this.parametersPassedInRequest.contains("chargeCalculationType");
}
public boolean isPenaltyChanged(){
return this.modifiedParameters.contains("penalty");
public boolean isPenaltyChanged() {
return this.parametersPassedInRequest.contains("penalty");
}
public boolean isActiveChanged(){
return this.modifiedParameters.contains("active");
public boolean isActiveChanged() {
return this.parametersPassedInRequest.contains("active");
}
public boolean isApprovedByChecker() {
return this.makerCheckerApproval;
}
@@ -145,14 +134,13 @@ public class ChargeDefinitionCommand {
baseDataValidator.reset().parameter("chargeAppliesTo").value(this.chargeAppliesTo).notNull().inMinMaxRange(1, 1);
baseDataValidator.reset().parameter("chargeTimeType").value(this.chargeTimeType).notNull().inMinMaxRange(1, 2);
baseDataValidator.reset().parameter("chargeCalculationType").value(this.chargeCalculationType).notNull().inMinMaxRange(1, 4);
if (this.penalty && this.chargeTimeType.equals(Integer.valueOf(1))) {
// FIXME - KW - cannot have penalty charge at time of disbursement
// FIXME - KW - cannot have penalty charge at time of disbursement
}
if (!dataValidationErrors.isEmpty()) {
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
}
if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist",
"Validation errors exist.", dataValidationErrors); }
}
public void validateForUpdate() {
@@ -166,10 +154,10 @@ public class ChargeDefinitionCommand {
baseDataValidator.reset().parameter("currencyCode").value(this.currencyCode).ignoreIfNull().notBlank();
baseDataValidator.reset().parameter("chargeAppliesTo").value(this.chargeAppliesTo).ignoreIfNull().notNull().inMinMaxRange(1, 1);
baseDataValidator.reset().parameter("chargeTimeType").value(this.chargeTimeType).ignoreIfNull().notNull().inMinMaxRange(1, 2);
baseDataValidator.reset().parameter("chargeCalculationType").value(this.chargeCalculationType).ignoreIfNull().notNull().inMinMaxRange(1, 4);
baseDataValidator.reset().parameter("chargeCalculationType").value(this.chargeCalculationType).ignoreIfNull().notNull()
.inMinMaxRange(1, 4);
if (!dataValidationErrors.isEmpty()) {
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
}
if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist",
"Validation errors exist.", dataValidationErrors); }
}
}
@@ -0,0 +1,59 @@
package org.mifosplatform.portfolio.charge.serialization;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.mifosplatform.infrastructure.core.exception.InvalidJsonException;
import org.mifosplatform.infrastructure.core.serialization.FromCommandJsonDeserializer;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
import org.mifosplatform.portfolio.charge.command.ChargeDefinitionCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.google.gson.JsonElement;
@Component
public final class ChargeCommandFromCommandJsonDeserializer implements FromCommandJsonDeserializer<ChargeDefinitionCommand> {
private final FromJsonHelper fromJsonHelper;
@Autowired
public ChargeCommandFromCommandJsonDeserializer(final FromJsonHelper fromApiJsonHelper) {
this.fromJsonHelper = fromApiJsonHelper;
}
@Override
public ChargeDefinitionCommand commandFromCommandJson(final String commandAsJson) {
return commandFromCommandJson(null, commandAsJson);
}
@Override
public ChargeDefinitionCommand commandFromCommandJson(final Long chargeDefinitionId, final String commandAsJson) {
return commandFromCommandJson(chargeDefinitionId, commandAsJson, false);
}
@Override
public ChargeDefinitionCommand commandFromCommandJson(final Long chargeDefinitionId, final String commandAsJson,
final boolean makerCheckerApproval) {
if (StringUtils.isBlank(commandAsJson)) { throw new InvalidJsonException(); }
final Set<String> parametersPassedInRequest = new HashSet<String>();
final JsonElement element = fromJsonHelper.parse(commandAsJson);
final String name = fromJsonHelper.extractStringNamed("name", element, parametersPassedInRequest);
final String currencyCode = fromJsonHelper.extractStringNamed("currencyCode", element, parametersPassedInRequest);
final BigDecimal amount = fromJsonHelper.extractBigDecimalNamed("amount", element.getAsJsonObject(), parametersPassedInRequest);
final Integer chargeTimeType = fromJsonHelper.extractIntegerNamed("chargeTimeType", element, parametersPassedInRequest);
final Integer chargeAppliesTo = fromJsonHelper.extractIntegerNamed("chargeAppliesTo", element, parametersPassedInRequest);
final Integer chargeCalculationType = fromJsonHelper.extractIntegerNamed("chargeCalculationType", element,
parametersPassedInRequest);
final Boolean penalty = fromJsonHelper.extractBooleanNamed("penalty", element, parametersPassedInRequest);
final Boolean active = fromJsonHelper.extractBooleanNamed("active", element, parametersPassedInRequest);
return new ChargeDefinitionCommand(parametersPassedInRequest, makerCheckerApproval, chargeDefinitionId, name, amount, currencyCode,
chargeTimeType, chargeAppliesTo, chargeCalculationType, penalty, active);
}
}
@@ -0,0 +1,90 @@
package org.mifosplatform.portfolio.charge.serialization;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.mifosplatform.infrastructure.core.serialization.CommandSerializer;
import org.mifosplatform.infrastructure.core.serialization.FromApiJsonDeserializer;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
import org.mifosplatform.portfolio.charge.command.ChargeDefinitionCommand;
import org.mifosplatform.portfolio.fund.command.FundCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
/**
* Implementation of {@link FromApiJsonDeserializer} for {@link FundCommand}'s.
*/
@Component
public final class ChargeDefinitionCommandFromApiJsonDeserializer implements FromApiJsonDeserializer<ChargeDefinitionCommand> {
/**
* The parameters supported for this command.
*/
private final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("name", "amount", "locale", "currencyCode",
"currencyOptions", "chargeAppliesTo", "chargeTimeType", "chargeCalculationType", "chargeCalculationTypeOptions", "penalty",
"active"));
private final FromJsonHelper fromApiJsonHelper;
private final CommandSerializer commandSerializerService;
@Autowired
public ChargeDefinitionCommandFromApiJsonDeserializer(final FromJsonHelper fromApiJsonHelper,
final CommandSerializer commandSerializerService) {
this.fromApiJsonHelper = fromApiJsonHelper;
this.commandSerializerService = commandSerializerService;
}
@Override
public ChargeDefinitionCommand commandFromApiJson(final String json) {
return commandFromApiJson(null, json);
}
@Override
public ChargeDefinitionCommand commandFromApiJson(final Long chargeId, final String json) {
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters);
final Set<String> parametersPassedInRequest = new HashSet<String>();
final JsonElement element = fromApiJsonHelper.parse(json);
final String name = fromApiJsonHelper.extractStringNamed("name", element, parametersPassedInRequest);
final String currencyCode = fromApiJsonHelper.extractStringNamed("currencyCode", element, parametersPassedInRequest);
final BigDecimal amount = fromApiJsonHelper.extractBigDecimalWithLocaleNamed("amount", element.getAsJsonObject(),
parametersPassedInRequest);
final Integer chargeTimeType = fromApiJsonHelper
.extractIntegerWithLocaleNamed("chargeTimeType", element, parametersPassedInRequest);
final Integer chargeAppliesTo = fromApiJsonHelper.extractIntegerWithLocaleNamed("chargeAppliesTo", element,
parametersPassedInRequest);
final Integer chargeCalculationType = fromApiJsonHelper.extractIntegerWithLocaleNamed("chargeCalculationType", element,
parametersPassedInRequest);
final Boolean penalty = fromApiJsonHelper.extractBooleanNamed("penalty", element, parametersPassedInRequest);
final Boolean active = fromApiJsonHelper.extractBooleanNamed("active", element, parametersPassedInRequest);
return new ChargeDefinitionCommand(parametersPassedInRequest, false, chargeId, name, amount, currencyCode, chargeTimeType,
chargeAppliesTo, chargeCalculationType, penalty, active);
}
@Override
public String serializedCommandJsonFromApiJson(final String json) {
final ChargeDefinitionCommand command = commandFromApiJson(json);
return this.commandSerializerService.serializeCommandToJson(command);
}
@Override
public String serializedCommandJsonFromApiJson(final Long roleId, final String json) {
final ChargeDefinitionCommand command = commandFromApiJson(roleId, json);
return this.commandSerializerService.serializeCommandToJson(command);
}
}
@@ -22,16 +22,14 @@ import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformSer
import org.mifosplatform.infrastructure.codes.data.CodeValueData;
import org.mifosplatform.infrastructure.codes.service.CodeValueReadPlatformService;
import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper;
import org.mifosplatform.infrastructure.core.api.PortfolioApiDataConversionService;
import org.mifosplatform.infrastructure.core.data.EntityIdentifier;
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.mifosplatform.infrastructure.core.serialization.CommandSerializer;
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.portfolio.client.command.ClientIdentifierCommand;
import org.mifosplatform.portfolio.client.data.ClientData;
import org.mifosplatform.portfolio.client.data.ClientIdentifierData;
import org.mifosplatform.portfolio.client.exception.DuplicateClientIdentifierException;
import org.mifosplatform.portfolio.client.serialization.ClientIdentifierCommandFromApiJsonDeserializer;
import org.mifosplatform.portfolio.client.service.ClientReadPlatformService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
@@ -50,26 +48,24 @@ public class ClientIdentifiersApiResource {
private final PlatformSecurityContext context;
private final ClientReadPlatformService clientReadPlatformService;
private final CodeValueReadPlatformService codeValueReadPlatformService;
private final ClientIdentifierCommandFromApiJsonDeserializer commandFromApiJsonDeserializer;
private final DefaultToApiJsonSerializer<ClientIdentifierData> toApiJsonSerializer;
private final ApiRequestParameterHelper apiRequestParameterHelper;
private final PortfolioApiDataConversionService apiDataConversionService;
private final CommandSerializer commandSerializerService;
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
@Autowired
public ClientIdentifiersApiResource(final PlatformSecurityContext context, final ClientReadPlatformService readPlatformService,
final CodeValueReadPlatformService codeValueReadPlatformService,
final ClientIdentifierCommandFromApiJsonDeserializer commandFromApiJsonDeserializer,
final DefaultToApiJsonSerializer<ClientIdentifierData> toApiJsonSerializer,
final ApiRequestParameterHelper apiRequestParameterHelper, final PortfolioApiDataConversionService apiDataConversionService,
final CommandSerializer commandSerializerService,
final ApiRequestParameterHelper apiRequestParameterHelper,
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService) {
this.context = context;
this.clientReadPlatformService = readPlatformService;
this.codeValueReadPlatformService = codeValueReadPlatformService;
this.commandFromApiJsonDeserializer = commandFromApiJsonDeserializer;
this.toApiJsonSerializer = toApiJsonSerializer;
this.apiRequestParameterHelper = apiRequestParameterHelper;
this.apiDataConversionService = apiDataConversionService;
this.commandSerializerService = commandSerializerService;
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
}
@@ -111,9 +107,8 @@ public class ClientIdentifiersApiResource {
"CREATE_CLIENTIDENTIFIER");
context.authenticatedUser().validateHasPermissionTo("CREATE_CLIENTIDENTIFIER", allowedPermissions);
final ClientIdentifierCommand command = this.apiDataConversionService.convertApiRequestJsonToClientIdentifierCommand(null,
clientId, apiRequestBodyAsJson);
final String commandSerializedAsJson = this.commandSerializerService.serializeCommandToJson(command);
final String commandSerializedAsJson = this.commandFromApiJsonDeserializer.serializedCommandJsonFromApiJsonWithSubResource(
apiRequestBodyAsJson, clientId);
final String resourceUrl = "clients/" + clientId + "/identifiers";
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("CREATE", resourceUrl, null,
@@ -165,9 +160,8 @@ public class ClientIdentifiersApiResource {
"UPDATE_CLIENTIDENTIFIER");
context.authenticatedUser().validateHasPermissionTo("UPDATE_CLIENTIDENTIFIER", allowedPermissions);
final ClientIdentifierCommand command = this.apiDataConversionService.convertApiRequestJsonToClientIdentifierCommand(
clientIdentifierId, clientId, apiRequestBodyAsJson);
final String commandSerializedAsJson = this.commandSerializerService.serializeCommandToJson(command);
final String commandSerializedAsJson = this.commandFromApiJsonDeserializer.serializedCommandJsonFromApiJsonWithSubResource(
clientIdentifierId, apiRequestBodyAsJson, clientId);
final String resourceUrl = "clients/" + clientId + "/identifiers";
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("UPDATE", resourceUrl,
@@ -34,18 +34,17 @@ import org.mifosplatform.infrastructure.core.api.PortfolioApiJsonSerializerServi
import org.mifosplatform.infrastructure.core.data.EntityIdentifier;
import org.mifosplatform.infrastructure.core.domain.Base64EncodedImage;
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.mifosplatform.infrastructure.core.serialization.CommandSerializer;
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
import org.mifosplatform.infrastructure.core.service.FileUtils;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.organisation.office.data.OfficeLookup;
import org.mifosplatform.organisation.office.service.OfficeReadPlatformService;
import org.mifosplatform.portfolio.client.command.ClientCommand;
import org.mifosplatform.portfolio.client.command.NoteCommand;
import org.mifosplatform.portfolio.client.data.ClientAccountSummaryCollectionData;
import org.mifosplatform.portfolio.client.data.ClientData;
import org.mifosplatform.portfolio.client.data.NoteData;
import org.mifosplatform.portfolio.client.exception.ImageNotFoundException;
import org.mifosplatform.portfolio.client.serialization.ClientCommandFromApiJsonDeserializer;
import org.mifosplatform.portfolio.client.service.ClientReadPlatformService;
import org.mifosplatform.portfolio.client.service.ClientWritePlatformService;
import org.slf4j.Logger;
@@ -73,10 +72,10 @@ public class ClientsApiResource {
private final ClientReadPlatformService clientReadPlatformService;
private final ClientWritePlatformService clientWritePlatformService;
private final OfficeReadPlatformService officeReadPlatformService;
private final ClientCommandFromApiJsonDeserializer fromApiJsonDeserializer;
private final DefaultToApiJsonSerializer<ClientData> toApiJsonSerializer;
private final ApiRequestParameterHelper apiRequestParameterHelper;
private final PortfolioApiDataConversionService apiDataConversionService;
private final CommandSerializer commandSerializerService;
private final PortfolioApiJsonSerializerService apiJsonSerializerService;
private final PortfolioCommandsReadPlatformService commandSourceReadPlatformService;
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
@@ -84,8 +83,9 @@ public class ClientsApiResource {
@Autowired
public ClientsApiResource(final PlatformSecurityContext context, final ClientReadPlatformService readPlatformService,
final ClientWritePlatformService clientWritePlatformService, final OfficeReadPlatformService officeReadPlatformService,
final ClientCommandFromApiJsonDeserializer fromApiJsonDeserializer,
final DefaultToApiJsonSerializer<ClientData> toApiJsonSerializer, final ApiRequestParameterHelper apiRequestParameterHelper,
final PortfolioApiDataConversionService apiDataConversionService, final CommandSerializer commandSerializerService,
final PortfolioApiDataConversionService apiDataConversionService,
final PortfolioApiJsonSerializerService apiJsonSerializerService,
final PortfolioCommandsReadPlatformService commandsReadPlatformService,
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService) {
@@ -93,10 +93,10 @@ public class ClientsApiResource {
this.clientReadPlatformService = readPlatformService;
this.clientWritePlatformService = clientWritePlatformService;
this.officeReadPlatformService = officeReadPlatformService;
this.fromApiJsonDeserializer = fromApiJsonDeserializer;
this.toApiJsonSerializer = toApiJsonSerializer;
this.apiRequestParameterHelper = apiRequestParameterHelper;
this.apiDataConversionService = apiDataConversionService;
this.commandSerializerService = commandSerializerService;
this.apiJsonSerializerService = apiJsonSerializerService;
this.commandSourceReadPlatformService = commandsReadPlatformService;
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
@@ -243,8 +243,7 @@ public class ClientsApiResource {
final List<String> allowedPermissions = Arrays.asList("ALL_FUNCTIONS", "PORTFOLIO_MANAGEMENT_SUPER_USER", "CREATE_CLIENT");
context.authenticatedUser().validateHasPermissionTo("CREATE_CLIENT", allowedPermissions);
final ClientCommand command = this.apiDataConversionService.convertApiRequestJsonToClientCommand(null, apiRequestBodyAsJson);
final String commandSerializedAsJson = this.commandSerializerService.serializeCommandToJson(command);
final String commandSerializedAsJson = this.fromApiJsonDeserializer.serializedCommandJsonFromApiJson(apiRequestBodyAsJson);
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("CREATE", "clients", null,
commandSerializedAsJson);
@@ -261,9 +260,8 @@ public class ClientsApiResource {
final List<String> allowedPermissions = Arrays.asList("ALL_FUNCTIONS", "PORTFOLIO_MANAGEMENT_SUPER_USER", "UPDATE_CLIENT");
context.authenticatedUser().validateHasPermissionTo("UPDATE_CLIENT", allowedPermissions);
final ClientCommand command = this.apiDataConversionService.convertApiRequestJsonToClientCommand(clientId, apiRequestBodyAsJson);
final String commandSerializedAsJson = this.commandSerializerService.serializeCommandToJson(command);
final String commandSerializedAsJson = this.fromApiJsonDeserializer.serializedCommandJsonFromApiJson(clientId, apiRequestBodyAsJson);
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("UPDATE", "clients", clientId,
commandSerializedAsJson);
@@ -18,6 +18,10 @@ public class ClientIdentifierCommand {
private final transient boolean makerCheckerApproval;
private final transient Long id;
public static ClientIdentifierCommand clientSubResource(final ClientIdentifierCommand command, final Long providedClientId) {
return new ClientIdentifierCommand(command.modifiedParameters, command.makerCheckerApproval, command.id, providedClientId, command.documentTypeId, command.documentKey, command.description);
}
public ClientIdentifierCommand(final Set<String> modifiedParameters, final boolean makerCheckerApproval, final Long id, final Long clientId, final Long documentTypeId,
final String documentKey, final String description) {
this.modifiedParameters = modifiedParameters;
@@ -0,0 +1,80 @@
package org.mifosplatform.portfolio.client.serialization;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.serialization.CommandSerializer;
import org.mifosplatform.infrastructure.core.serialization.FromApiJsonDeserializer;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
import org.mifosplatform.portfolio.client.command.ClientCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
/**
* Implementation of {@link FromApiJsonDeserializer} for {@link ClientCommand}
* 's.
*/
@Component
public final class ClientCommandFromApiJsonDeserializer implements FromApiJsonDeserializer<ClientCommand> {
/**
* The parameters supported for this command.
*/
private final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("id", "externalId", "firstname", "lastname",
"clientOrBusinessName", "officeId", "joiningDate", "locale", "dateFormat"));
private final FromJsonHelper fromApiJsonHelper;
private final CommandSerializer commandSerializerService;
@Autowired
public ClientCommandFromApiJsonDeserializer(final FromJsonHelper fromApiJsonHelper, final CommandSerializer commandSerializerService) {
this.fromApiJsonHelper = fromApiJsonHelper;
this.commandSerializerService = commandSerializerService;
}
@Override
public ClientCommand commandFromApiJson(final String json) {
return commandFromApiJson(null, json);
}
@Override
public ClientCommand commandFromApiJson(final Long clientId, final String json) {
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters);
final Set<String> parametersPassedInRequest = new HashSet<String>();
final JsonElement element = fromApiJsonHelper.parse(json);
final Long officeId = fromApiJsonHelper.extractLongNamed("officeId", element, parametersPassedInRequest);
final String externalId = fromApiJsonHelper.extractStringNamed("externalId", element, parametersPassedInRequest);
final String firstname = fromApiJsonHelper.extractStringNamed("firstname", element, parametersPassedInRequest);
final String lastname = fromApiJsonHelper.extractStringNamed("lastname", element, parametersPassedInRequest);
final String clientOrBusinessName = fromApiJsonHelper
.extractStringNamed("clientOrBusinessName", element, parametersPassedInRequest);
final LocalDate joiningDate = fromApiJsonHelper.extractLocalDateNamed("joiningDate", element, parametersPassedInRequest);
return new ClientCommand(parametersPassedInRequest, clientId, externalId, firstname, lastname, clientOrBusinessName, officeId,
joiningDate, false);
}
@Override
public String serializedCommandJsonFromApiJson(final String json) {
final ClientCommand command = commandFromApiJson(json);
return this.commandSerializerService.serializeCommandToJson(command);
}
@Override
public String serializedCommandJsonFromApiJson(final Long fundId, final String json) {
final ClientCommand command = commandFromApiJson(fundId, json);
return this.commandSerializerService.serializeCommandToJson(command);
}
}
@@ -0,0 +1,54 @@
package org.mifosplatform.portfolio.client.serialization;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.exception.InvalidJsonException;
import org.mifosplatform.infrastructure.core.serialization.FromCommandJsonDeserializer;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
import org.mifosplatform.portfolio.client.command.ClientCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.google.gson.JsonElement;
@Component
public final class ClientCommandFromCommandJsonDeserializer implements FromCommandJsonDeserializer<ClientCommand> {
private final FromJsonHelper fromJsonHelper;
@Autowired
public ClientCommandFromCommandJsonDeserializer(final FromJsonHelper fromApiJsonHelper) {
this.fromJsonHelper = fromApiJsonHelper;
}
@Override
public ClientCommand commandFromCommandJson(final String commandAsJson) {
return commandFromCommandJson(null, commandAsJson);
}
@Override
public ClientCommand commandFromCommandJson(final Long clientId, final String commandAsJson) {
return commandFromCommandJson(clientId, commandAsJson, false);
}
@Override
public ClientCommand commandFromCommandJson(final Long clientId, final String commandAsJson, final boolean makerCheckerApproval) {
if (StringUtils.isBlank(commandAsJson)) { throw new InvalidJsonException(); }
final Set<String> parametersPassedInRequest = new HashSet<String>();
final JsonElement element = fromJsonHelper.parse(commandAsJson);
final Long officeId = fromJsonHelper.extractLongNamed("officeId", element, parametersPassedInRequest);
final String externalId = fromJsonHelper.extractStringNamed("externalId", element, parametersPassedInRequest);
final String firstname = fromJsonHelper.extractStringNamed("firstname", element, parametersPassedInRequest);
final String lastname = fromJsonHelper.extractStringNamed("lastname", element, parametersPassedInRequest);
final String clientOrBusinessName = fromJsonHelper.extractStringNamed("clientOrBusinessName", element, parametersPassedInRequest);
final LocalDate joiningDate = fromJsonHelper.extractLocalDateAsArrayNamed("joiningDate", element, parametersPassedInRequest);
return new ClientCommand(parametersPassedInRequest, clientId, externalId, firstname, lastname, clientOrBusinessName, officeId,
joiningDate, makerCheckerApproval);
}
}
@@ -0,0 +1,82 @@
package org.mifosplatform.portfolio.client.serialization;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.mifosplatform.infrastructure.core.serialization.CommandSerializer;
import org.mifosplatform.infrastructure.core.serialization.FromApiJsonDeserializer;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
import org.mifosplatform.portfolio.client.command.ClientCommand;
import org.mifosplatform.portfolio.client.command.ClientIdentifierCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.google.gson.reflect.TypeToken;
/**
* Implementation of {@link FromApiJsonDeserializer} for {@link ClientCommand}
* 's.
*/
@Component
public final class ClientIdentifierCommandFromApiJsonDeserializer implements FromApiJsonDeserializer<ClientIdentifierCommand> {
/**
* The parameters supported for this command.
*/
private final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("clientId", "documentTypeId", "documentKey",
"description"));
private final FromJsonHelper fromApiJsonHelper;
private final CommandSerializer commandSerializerService;
private final ClientIdentifierCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer;
@Autowired
public ClientIdentifierCommandFromApiJsonDeserializer(final FromJsonHelper fromApiJsonHelper,
final ClientIdentifierCommandFromCommandJsonDeserializer commandFromCommandJsonDeserializer,
final CommandSerializer commandSerializerService) {
this.fromApiJsonHelper = fromApiJsonHelper;
this.commandFromCommandJsonDeserializer = commandFromCommandJsonDeserializer;
this.commandSerializerService = commandSerializerService;
}
@Override
public ClientIdentifierCommand commandFromApiJson(final String json) {
return commandFromApiJson(null, json);
}
@Override
public ClientIdentifierCommand commandFromApiJson(final Long clientId, final String json) {
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters);
return this.commandFromCommandJsonDeserializer.commandFromCommandJson(clientId, json);
}
@Override
public String serializedCommandJsonFromApiJson(final String json) {
final ClientIdentifierCommand command = commandFromApiJson(json);
return this.commandSerializerService.serializeCommandToJson(command);
}
@Override
public String serializedCommandJsonFromApiJson(final Long clientIdentifierId, final String json) {
final ClientIdentifierCommand command = commandFromApiJson(clientIdentifierId, json);
return this.commandSerializerService.serializeCommandToJson(command);
}
public String serializedCommandJsonFromApiJsonWithSubResource(final String json, final Long clientId) {
return serializedCommandJsonFromApiJsonWithSubResource(null, json, clientId);
}
public String serializedCommandJsonFromApiJsonWithSubResource(final Long clientIdentifierId, final String json, final Long clientId) {
final ClientIdentifierCommand command = commandFromApiJson(clientIdentifierId, json);
final ClientIdentifierCommand commandWithSubResource = ClientIdentifierCommand.clientSubResource(command, clientId);
return this.commandSerializerService.serializeCommandToJson(commandWithSubResource);
}
}
@@ -0,0 +1,56 @@
package org.mifosplatform.portfolio.client.serialization;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.mifosplatform.infrastructure.core.exception.InvalidJsonException;
import org.mifosplatform.infrastructure.core.serialization.FromCommandJsonDeserializer;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
import org.mifosplatform.portfolio.client.command.ClientIdentifierCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.google.gson.JsonElement;
@Component
public final class ClientIdentifierCommandFromCommandJsonDeserializer implements FromCommandJsonDeserializer<ClientIdentifierCommand> {
private final FromJsonHelper fromJsonHelper;
@Autowired
public ClientIdentifierCommandFromCommandJsonDeserializer(final FromJsonHelper fromApiJsonHelper) {
this.fromJsonHelper = fromApiJsonHelper;
}
@Override
public ClientIdentifierCommand commandFromCommandJson(final String commandAsJson) {
return commandFromCommandJson(null, commandAsJson);
}
@Override
public ClientIdentifierCommand commandFromCommandJson(final Long clientIdentifierId, final String commandAsJson) {
return commandFromCommandJson(clientIdentifierId, commandAsJson, false);
}
@Override
public ClientIdentifierCommand commandFromCommandJson(final Long clientIdentifierId, final String commandAsJson,
final boolean makerCheckerApproval) {
if (StringUtils.isBlank(commandAsJson)) { throw new InvalidJsonException(); }
final Set<String> parametersPassedInRequest = new HashSet<String>();
final JsonElement element = fromJsonHelper.parse(commandAsJson);
Long actualClientId = null; // FIXME - kw -clientId
final Long clientIdInternal = fromJsonHelper.extractLongNamed("clientId", element, parametersPassedInRequest);
if (clientIdInternal != null) {
actualClientId = clientIdInternal;
}
final Long documentTypeId = fromJsonHelper.extractLongNamed("documentTypeId", element, parametersPassedInRequest);
final String documentKey = fromJsonHelper.extractStringNamed("documentKey", element, parametersPassedInRequest);
final String documentDescription = fromJsonHelper.extractStringNamed("documentDescription", element, parametersPassedInRequest);
return new ClientIdentifierCommand(parametersPassedInRequest, makerCheckerApproval, clientIdentifierId, actualClientId,
documentTypeId, documentKey, documentDescription);
}
}
@@ -44,13 +44,13 @@ public final class FundCommandFromApiJsonDeserializer implements FromApiJsonDese
}
@Override
public FundCommand commandFromApiJson(final Long roleId, final String json) {
public FundCommand commandFromApiJson(final Long fundId, final String json) {
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters);
return this.fromCommandJsonDeserializer.commandFromCommandJson(roleId, json);
return this.fromCommandJsonDeserializer.commandFromCommandJson(fundId, json);
}
@Override
@@ -60,8 +60,8 @@ public final class FundCommandFromApiJsonDeserializer implements FromApiJsonDese
}
@Override
public String serializedCommandJsonFromApiJson(final Long roleId, final String json) {
final FundCommand command = commandFromApiJson(roleId, json);
public String serializedCommandJsonFromApiJson(final Long fundId, final String json) {
final FundCommand command = commandFromApiJson(fundId, json);
return this.commandSerializerService.serializeCommandToJson(command);
}
}
@@ -19,11 +19,9 @@ import javax.ws.rs.core.UriInfo;
import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService;
import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper;
import org.mifosplatform.infrastructure.core.api.PortfolioApiDataConversionService;
import org.mifosplatform.infrastructure.core.data.EntityIdentifier;
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.mifosplatform.infrastructure.core.serialization.CommandSerializer;
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
import org.mifosplatform.organisation.monetary.data.CurrencyData;
@@ -32,9 +30,9 @@ import org.mifosplatform.portfolio.charge.data.ChargeData;
import org.mifosplatform.portfolio.charge.service.ChargeReadPlatformService;
import org.mifosplatform.portfolio.fund.data.FundData;
import org.mifosplatform.portfolio.fund.service.FundReadPlatformService;
import org.mifosplatform.portfolio.loanproduct.command.LoanProductCommand;
import org.mifosplatform.portfolio.loanproduct.data.LoanProductData;
import org.mifosplatform.portfolio.loanproduct.data.TransactionProcessingStrategyData;
import org.mifosplatform.portfolio.loanproduct.serialization.LoanProductCommandFromApiJsonDeserializer;
import org.mifosplatform.portfolio.loanproduct.service.LoanDropdownReadPlatformService;
import org.mifosplatform.portfolio.loanproduct.service.LoanProductReadPlatformService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -61,20 +59,19 @@ public class LoanProductsApiResource {
private final ChargeReadPlatformService chargeReadPlatformService;
private final CurrencyReadPlatformService currencyReadPlatformService;
private final FundReadPlatformService fundReadPlatformService;
private final LoanProductCommandFromApiJsonDeserializer fromApiJsonDeserializer;
private final DefaultToApiJsonSerializer<LoanProductData> toApiJsonSerializer;
private final ApiRequestParameterHelper apiRequestParameterHelper;
private final LoanDropdownReadPlatformService dropdownReadPlatformService;
private final PortfolioApiDataConversionService apiDataConversionService;
private final CommandSerializer commandSerializerService;
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
@Autowired
public LoanProductsApiResource(final PlatformSecurityContext context, final LoanProductReadPlatformService readPlatformService,
final ChargeReadPlatformService chargeReadPlatformService, final CurrencyReadPlatformService currencyReadPlatformService,
final FundReadPlatformService fundReadPlatformService, final LoanDropdownReadPlatformService dropdownReadPlatformService,
final LoanProductCommandFromApiJsonDeserializer fromApiJsonDeserializer,
final DefaultToApiJsonSerializer<LoanProductData> toApiJsonSerializer,
final ApiRequestParameterHelper apiRequestParameterHelper, final PortfolioApiDataConversionService apiDataConversionService,
final CommandSerializer commandSerializerService,
final ApiRequestParameterHelper apiRequestParameterHelper,
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService) {
this.context = context;
this.loanProductReadPlatformService = readPlatformService;
@@ -82,10 +79,9 @@ public class LoanProductsApiResource {
this.currencyReadPlatformService = currencyReadPlatformService;
this.fundReadPlatformService = fundReadPlatformService;
this.dropdownReadPlatformService = dropdownReadPlatformService;
this.fromApiJsonDeserializer = fromApiJsonDeserializer;
this.toApiJsonSerializer = toApiJsonSerializer;
this.apiRequestParameterHelper = apiRequestParameterHelper;
this.apiDataConversionService = apiDataConversionService;
this.commandSerializerService = commandSerializerService;
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
}
@@ -98,9 +94,7 @@ public class LoanProductsApiResource {
"CREATE_LOANPRODUCT");
context.authenticatedUser().validateHasPermissionTo("CREATE_LOANPRODUCT", allowedPermissions);
final LoanProductCommand command = this.apiDataConversionService.convertApiRequestJsonToLoanProductCommand(null,
apiRequestBodyAsJson);
final String commandSerializedAsJson = this.commandSerializerService.serializeCommandToJson(command);
final String commandSerializedAsJson = this.fromApiJsonDeserializer.serializedCommandJsonFromApiJson(apiRequestBodyAsJson);
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("CREATE", "loanproducts", null,
commandSerializedAsJson);
@@ -164,11 +158,10 @@ public class LoanProductsApiResource {
"UPDATE_LOANPRODUCT");
context.authenticatedUser().validateHasPermissionTo("UPDATE_LOANPRODUCT", allowedPermissions);
final LoanProductCommand command = this.apiDataConversionService.convertApiRequestJsonToLoanProductCommand(productId,
final String commandSerializedAsJson = this.fromApiJsonDeserializer.serializedCommandJsonFromApiJson(productId,
apiRequestBodyAsJson);
final String commandSerializedAsJson = this.commandSerializerService.serializeCommandToJson(command);
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("UPDATE", "loanproducts", null,
final EntityIdentifier result = this.commandsSourceWritePlatformService.logCommandSource("UPDATE", "loanproducts", productId,
commandSerializedAsJson);
return this.toApiJsonSerializer.serialize(result);
@@ -8,43 +8,35 @@ import java.util.Set;
*/
public class LoanProductCommand {
private final String name;
private final String description;
private final Long fundId;
private final Long transactionProcessingStrategyId;
private final String currencyCode;
private final Integer digitsAfterDecimal;
private final BigDecimal principal;
private final BigDecimal inArrearsTolerance;
private final Integer numberOfRepayments;
private final Integer repaymentEvery;
private final BigDecimal interestRatePerPeriod;
private final Integer repaymentFrequencyType;
private final Integer interestRateFrequencyType;
private final Integer amortizationType;
private final Integer interestType;
private final Integer interestCalculationPeriodType;
private final String[] charges;
private final transient Set<String> modifiedParameters;
private final transient Set<String> parametersPassedInRequest;
private final transient boolean makerCheckerApproval;
private final transient Long id;
public LoanProductCommand(final Set<String> modifiedParameters,
final boolean makerCheckerApproval, final Long id, final String name, final String description,
final Long fundId, final Long transactionProcessingStrategyId, final String currencyCode, final Integer digitsAfterDecimal,
final BigDecimal principal, final BigDecimal inArrearsTolerance, final Integer numberOfRepayments,
final Integer repaymentEvery, final BigDecimal interestRatePerPeriod, final Integer repaymentFrequencyType,
final Integer interestRateFrequencyType, final Integer amortizationType, final Integer interestType,
final Integer interestCalculationPeriodType, final String[] charges) {
this.modifiedParameters = modifiedParameters;
public LoanProductCommand(final Set<String> parametersPassedInRequest, final boolean makerCheckerApproval, final Long id,
final String name, final String description, final Long fundId, final Long transactionProcessingStrategyId,
final String currencyCode, final Integer digitsAfterDecimal, final BigDecimal principal, final BigDecimal inArrearsTolerance,
final Integer numberOfRepayments, final Integer repaymentEvery, final BigDecimal interestRatePerPeriod,
final Integer repaymentFrequencyType, final Integer interestRateFrequencyType, final Integer amortizationType,
final Integer interestType, final Integer interestCalculationPeriodType, final String[] charges) {
this.parametersPassedInRequest = parametersPassedInRequest;
this.makerCheckerApproval = makerCheckerApproval;
this.id = id;
this.name = name;
@@ -143,73 +135,73 @@ public class LoanProductCommand {
}
public boolean isNameChanged() {
return this.modifiedParameters.contains("name");
return this.parametersPassedInRequest.contains("name");
}
public boolean isDescriptionChanged() {
return this.modifiedParameters.contains("description");
return this.parametersPassedInRequest.contains("description");
}
public boolean isFundChanged() {
return this.modifiedParameters.contains("fundId");
return this.parametersPassedInRequest.contains("fundId");
}
public boolean isTransactionProcessingStrategyChanged() {
return this.modifiedParameters.contains("transactionProcessingStrategyId");
return this.parametersPassedInRequest.contains("transactionProcessingStrategyId");
}
public boolean isCurrencyCodeChanged() {
return this.modifiedParameters.contains("currencyCode");
return this.parametersPassedInRequest.contains("currencyCode");
}
public boolean isDigitsAfterDecimalChanged() {
return this.modifiedParameters.contains("digitsAfterDecimal");
return this.parametersPassedInRequest.contains("digitsAfterDecimal");
}
public boolean isPrincipalChanged() {
return this.modifiedParameters.contains("principal");
return this.parametersPassedInRequest.contains("principal");
}
public boolean isInArrearsToleranceChanged() {
return this.modifiedParameters.contains("inArrearsTolerance");
return this.parametersPassedInRequest.contains("inArrearsTolerance");
}
public boolean isNumberOfRepaymentsChanged() {
return this.modifiedParameters.contains("numberOfRepayments");
return this.parametersPassedInRequest.contains("numberOfRepayments");
}
public boolean isRepaymentEveryChanged() {
return this.modifiedParameters.contains("repaymentEvery");
return this.parametersPassedInRequest.contains("repaymentEvery");
}
public boolean isRepaymentFrequencyTypeChanged() {
return this.modifiedParameters.contains("repaymentFrequencyType");
return this.parametersPassedInRequest.contains("repaymentFrequencyType");
}
public boolean isAmortizationTypeChanged() {
return this.modifiedParameters.contains("amortizationType");
return this.parametersPassedInRequest.contains("amortizationType");
}
public boolean isInterestTypeChanged() {
return this.modifiedParameters.contains("interestType");
return this.parametersPassedInRequest.contains("interestType");
}
public boolean isInterestRatePerPeriodChanged() {
return this.modifiedParameters.contains("interestRatePerPeriod");
return this.parametersPassedInRequest.contains("interestRatePerPeriod");
}
public boolean isInterestRateFrequencyTypeChanged() {
return this.modifiedParameters.contains("interestRateFrequencyType");
return this.parametersPassedInRequest.contains("interestRateFrequencyType");
}
public boolean isInterestCalculationPeriodTypeChanged() {
return this.modifiedParameters.contains("interestCalculationPeriodType");
return this.parametersPassedInRequest.contains("interestCalculationPeriodType");
}
public boolean isChargesChanged() {
return this.modifiedParameters.contains("charges");
return this.parametersPassedInRequest.contains("charges");
}
public boolean isApprovedByChecker() {
return this.makerCheckerApproval;
}
@@ -0,0 +1,108 @@
package org.mifosplatform.portfolio.loanproduct.serialization;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.mifosplatform.infrastructure.core.serialization.CommandSerializer;
import org.mifosplatform.infrastructure.core.serialization.FromApiJsonDeserializer;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
import org.mifosplatform.portfolio.loanproduct.command.LoanProductCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
/**
* Implementation of {@link FromApiJsonDeserializer} for
* {@link LoanProductCommand}'s.
*/
@Component
public final class LoanProductCommandFromApiJsonDeserializer implements FromApiJsonDeserializer<LoanProductCommand> {
/**
* The parameters supported for this command.
*/
private final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("name", "description", "fundId",
"transactionProcessingStrategyId", "currencyCode", "digitsAfterDecimal", "principal", "inArrearsTolerance",
"interestRatePerPeriod", "repaymentEvery", "numberOfRepayments", "repaymentFrequencyType", "interestRateFrequencyType",
"amortizationType", "interestType", "interestCalculationPeriodType", "charges", "locale"));
private final FromJsonHelper fromApiJsonHelper;
private final CommandSerializer commandSerializerService;
@Autowired
public LoanProductCommandFromApiJsonDeserializer(final FromJsonHelper fromApiJsonHelper,
final CommandSerializer commandSerializerService) {
this.fromApiJsonHelper = fromApiJsonHelper;
this.commandSerializerService = commandSerializerService;
}
@Override
public LoanProductCommand commandFromApiJson(final String json) {
return commandFromApiJson(null, json);
}
@Override
public LoanProductCommand commandFromApiJson(final Long loanProductId, final String json) {
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters);
final Set<String> parametersPassedInRequest = new HashSet<String>();
final JsonElement element = fromApiJsonHelper.parse(json);
final String name = fromApiJsonHelper.extractStringNamed("name", element, parametersPassedInRequest);
final String description = fromApiJsonHelper.extractStringNamed("description", element, parametersPassedInRequest);
final Long fundId = fromApiJsonHelper.extractLongNamed("fundId", element, parametersPassedInRequest);
final Long transactionProcessingStrategyId = fromApiJsonHelper.extractLongNamed("transactionProcessingStrategyId", element,
parametersPassedInRequest);
final String currencyCode = fromApiJsonHelper.extractStringNamed("currencyCode", element, parametersPassedInRequest);
final Integer digitsAfterDecimal = fromApiJsonHelper.extractIntegerWithLocaleNamed("digitsAfterDecimal", element,
parametersPassedInRequest);
final BigDecimal principal = fromApiJsonHelper.extractBigDecimalWithLocaleNamed("principal", element, parametersPassedInRequest);
final BigDecimal inArrearsTolerance = fromApiJsonHelper.extractBigDecimalWithLocaleNamed("inArrearsTolerance", element,
parametersPassedInRequest);
final BigDecimal interestRatePerPeriod = fromApiJsonHelper.extractBigDecimalWithLocaleNamed("interestRatePerPeriod", element,
parametersPassedInRequest);
final Integer repaymentEvery = fromApiJsonHelper
.extractIntegerWithLocaleNamed("repaymentEvery", element, parametersPassedInRequest);
final Integer numberOfRepayments = fromApiJsonHelper.extractIntegerWithLocaleNamed("numberOfRepayments", element,
parametersPassedInRequest);
final Integer repaymentFrequencyType = fromApiJsonHelper.extractIntegerWithLocaleNamed("repaymentFrequencyType", element,
parametersPassedInRequest);
final Integer interestRateFrequencyType = fromApiJsonHelper.extractIntegerWithLocaleNamed("interestRateFrequencyType", element,
parametersPassedInRequest);
final Integer amortizationType = fromApiJsonHelper.extractIntegerWithLocaleNamed("amortizationType", element,
parametersPassedInRequest);
final Integer interestType = fromApiJsonHelper.extractIntegerWithLocaleNamed("interestType", element, parametersPassedInRequest);
final Integer interestCalculationPeriodType = fromApiJsonHelper.extractIntegerWithLocaleNamed("interestCalculationPeriodType",
element, parametersPassedInRequest);
final String[] charges = fromApiJsonHelper.extractArrayNamed("charges", element, parametersPassedInRequest);
return new LoanProductCommand(parametersPassedInRequest, false, loanProductId, name, description, fundId,
transactionProcessingStrategyId, currencyCode, digitsAfterDecimal, principal, inArrearsTolerance, numberOfRepayments,
repaymentEvery, interestRatePerPeriod, repaymentFrequencyType, interestRateFrequencyType, amortizationType, interestType,
interestCalculationPeriodType, charges);
}
@Override
public String serializedCommandJsonFromApiJson(final String json) {
final LoanProductCommand command = commandFromApiJson(json);
return this.commandSerializerService.serializeCommandToJson(command);
}
@Override
public String serializedCommandJsonFromApiJson(final Long loanProductId, final String json) {
final LoanProductCommand command = commandFromApiJson(loanProductId, json);
return this.commandSerializerService.serializeCommandToJson(command);
}
}
@@ -0,0 +1,77 @@
package org.mifosplatform.portfolio.loanproduct.serialization;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.mifosplatform.infrastructure.core.exception.InvalidJsonException;
import org.mifosplatform.infrastructure.core.serialization.FromCommandJsonDeserializer;
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
import org.mifosplatform.portfolio.loanproduct.command.LoanProductCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.google.gson.JsonElement;
@Component
public final class LoanProductCommandFromCommandJsonDeserializer implements FromCommandJsonDeserializer<LoanProductCommand> {
private final FromJsonHelper fromJsonHelper;
@Autowired
public LoanProductCommandFromCommandJsonDeserializer(final FromJsonHelper fromApiJsonHelper) {
this.fromJsonHelper = fromApiJsonHelper;
}
@Override
public LoanProductCommand commandFromCommandJson(final String commandAsJson) {
return commandFromCommandJson(null, commandAsJson);
}
@Override
public LoanProductCommand commandFromCommandJson(final Long loanProductId, final String commandAsJson) {
return commandFromCommandJson(loanProductId, commandAsJson, false);
}
@Override
public LoanProductCommand commandFromCommandJson(final Long loanProductId, final String commandAsJson,
final boolean makerCheckerApproval) {
if (StringUtils.isBlank(commandAsJson)) { throw new InvalidJsonException(); }
final Set<String> parametersPassedInRequest = new HashSet<String>();
final JsonElement element = fromJsonHelper.parse(commandAsJson);
final String name = fromJsonHelper.extractStringNamed("name", element, parametersPassedInRequest);
final String description = fromJsonHelper.extractStringNamed("description", element, parametersPassedInRequest);
final Long fundId = fromJsonHelper.extractLongNamed("fundId", element, parametersPassedInRequest);
final Long transactionProcessingStrategyId = fromJsonHelper.extractLongNamed("transactionProcessingStrategyId", element,
parametersPassedInRequest);
final String currencyCode = fromJsonHelper.extractStringNamed("currencyCode", element, parametersPassedInRequest);
final Integer digitsAfterDecimal = fromJsonHelper.extractIntegerNamed("digitsAfterDecimal", element, parametersPassedInRequest);
final BigDecimal principal = fromJsonHelper.extractBigDecimalNamed("principal", element.getAsJsonObject(),
parametersPassedInRequest);
final BigDecimal inArrearsTolerance = fromJsonHelper.extractBigDecimalNamed("inArrearsTolerance", element.getAsJsonObject(),
parametersPassedInRequest);
final BigDecimal interestRatePerPeriod = fromJsonHelper.extractBigDecimalNamed("interestRatePerPeriod", element.getAsJsonObject(),
parametersPassedInRequest);
final Integer repaymentEvery = fromJsonHelper.extractIntegerNamed("repaymentEvery", element, parametersPassedInRequest);
final Integer numberOfRepayments = fromJsonHelper.extractIntegerNamed("numberOfRepayments", element, parametersPassedInRequest);
final Integer repaymentFrequencyType = fromJsonHelper.extractIntegerNamed("repaymentFrequencyType", element,
parametersPassedInRequest);
final Integer interestRateFrequencyType = fromJsonHelper.extractIntegerNamed("interestRateFrequencyType", element,
parametersPassedInRequest);
final Integer amortizationType = fromJsonHelper.extractIntegerNamed("amortizationType", element, parametersPassedInRequest);
final Integer interestType = fromJsonHelper.extractIntegerNamed("interestType", element, parametersPassedInRequest);
final Integer interestCalculationPeriodType = fromJsonHelper.extractIntegerNamed("interestCalculationPeriodType", element,
parametersPassedInRequest);
final String[] charges = fromJsonHelper.extractArrayNamed("charges", element, parametersPassedInRequest);
return new LoanProductCommand(parametersPassedInRequest, makerCheckerApproval, loanProductId, name, description, fundId,
transactionProcessingStrategyId, currencyCode, digitsAfterDecimal, principal, inArrearsTolerance, numberOfRepayments,
repaymentEvery, interestRatePerPeriod, repaymentFrequencyType, interestRateFrequencyType, amortizationType, interestType,
interestCalculationPeriodType, charges);
}
}