diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/RolesApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/RolesApiResource.java index 7da8a5d68..8e42bb1a4 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/RolesApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/RolesApiResource.java @@ -16,6 +16,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriInfo; import org.mifosng.platform.accounting.api.commands.RolePermissionCommand; +import org.mifosng.platform.api.commands.RoleCommand; import org.mifosng.platform.api.data.CommandSourceData; import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.PermissionUsageData; @@ -87,14 +88,6 @@ public class RolesApiResource { return this.apiJsonSerializerService.serializeEntityIdentifier(result); } - // TODO - General thing to fix about REST API is if use partial response - // approach of fields=id,name,selectedPermissions - // It will return just id,name parameters of RoleData and ignore - // description, however as PermissionData used in selectedPermissions - // collection - // also has a field called description it gets ignored also. This is because - // of the implementation of ParameterListExclusionStrategy which doesnt take - // into account the Object its looking at. @GET @Path("{roleId}") @Consumes({ MediaType.APPLICATION_JSON }) @@ -110,13 +103,23 @@ public class RolesApiResource { RoleData role = this.roleReadPlatformService.retrieveRole(roleId); if (commandId != null) { - // currentChanges = - // handleRequestToIntegrateProposedChangesFromCommand(roleId, - // commandId); + RoleData currentChanges = handleRequestToIntegrateProposedChangesFromRoleCommand(roleId, commandId); + + role = RoleData.integrateChanges(role, currentChanges); } return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, role); } + + private RoleData handleRequestToIntegrateProposedChangesFromRoleCommand(final Long roleId, final Long commandId) { + final CommandSourceData entry = this.commandSourceReadPlatformService.retrieveById(commandId); + return assembleRoleChanges(roleId, entry); + } + + private RoleData assembleRoleChanges(final Long roleId, final CommandSourceData entry) { + final RoleCommand changesOnly = this.commandDeserializerService.deserializeRoleCommand(roleId, entry.json(), false); + return RoleData.changes(changesOnly.getName(), changesOnly.getDescription()); + } @PUT @Path("{roleId}") @@ -149,9 +152,7 @@ public class RolesApiResource { currentChanges = handleRequestToIntegrateProposedChangesFromCommand(roleId, commandId); } - Collection> allChanges = retrieveAllUnprocessedDataChanges(roleId); - - final RolePermissionsData permissionsData = role.toRolePermissionData(permissionUsageData, currentChanges, allChanges); + final RolePermissionsData permissionsData = role.toRolePermissionData(permissionUsageData, currentChanges); return this.apiJsonSerializerService.serializeRolePermissionDataToJson(prettyPrint, responseParameters, permissionsData); } @@ -177,27 +178,6 @@ public class RolesApiResource { return proposedChanges; } - private Collection> retrieveAllUnprocessedDataChanges(final Long roleId) { - Collection> allChanges = new ArrayList>(); - - final Collection unprocessedChanges = this.commandSourceReadPlatformService - .retrieveUnprocessChangesByResourceId("roles", roleId); - for (CommandSourceData commandSourceData : unprocessedChanges) { - - if (commandSourceData.isRoleResource() && commandSourceData.isUpdateRolePermissions()) { - Collection dataChanges = assemblePermissionChanges(roleId, commandSourceData); - - allChanges.add(dataChanges); - } - } - - if (allChanges.isEmpty()) { - allChanges = null; - } - - return allChanges; - } - @PUT @Path("{roleId}/permissions") @Consumes({ MediaType.APPLICATION_JSON }) diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RoleData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RoleData.java index 9a3efc064..8af7c095c 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RoleData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RoleData.java @@ -10,26 +10,22 @@ public class RoleData { private final Long id; private final String name; private final String description; + @SuppressWarnings("unused") + private final RoleData currentChanges; + + public static RoleData changes(final String name, final String description) { + return new RoleData(null, name, description, null); + } + + public static RoleData integrateChanges(final RoleData role, final RoleData currentChanges) { + return new RoleData(role.id, role.name, role.description, currentChanges); + } - // @SuppressWarnings("unused") - // private final Collection currentChanges; - - public RoleData(final Long id, final String name, final String description) { + public RoleData(final Long id, final String name, final String description, final RoleData currentChanges) { this.id = id; this.name = name; this.description = description; - } - - public RoleData() { - this.id = null; - this.name = null; - this.description = null; - } - - public RoleData(final RoleData role) { - this.id = role.id; - this.name = role.name; - this.description = role.description; + this.currentChanges = currentChanges; } @Override @@ -43,8 +39,7 @@ public class RoleData { return this.id.hashCode(); } - public RolePermissionsData toRolePermissionData(final Collection permissionUsageData, - final Collection currentChanges, final Collection> allChanges) { - return new RolePermissionsData(id, name, description, permissionUsageData, currentChanges, allChanges); + public RolePermissionsData toRolePermissionData(final Collection permissionUsageData, final Collection currentChanges) { + return new RolePermissionsData(id, name, description, permissionUsageData, currentChanges); } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RolePermissionsData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RolePermissionsData.java index f621e6f62..be7bf026f 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RolePermissionsData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RolePermissionsData.java @@ -18,17 +18,13 @@ public class RolePermissionsData { private final Collection permissionUsageData; @SuppressWarnings("unused") private final Collection currentChanges; - @SuppressWarnings("unused") - private final Collection> allChanges; public RolePermissionsData(final Long id, final String name, final String description, - final Collection permissionUsageData, final Collection currentChanges, - final Collection> allChanges) { + final Collection permissionUsageData, final Collection currentChanges) { this.id = id; this.name = name; this.description = description; this.permissionUsageData = permissionUsageData; this.currentChanges = currentChanges; - this.allChanges = allChanges; } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java index 390758a95..047454ee5 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java @@ -73,6 +73,6 @@ public class Role extends AbstractAuditableCustom { } public RoleData toData() { - return new RoleData(this.getId(), this.name, this.description); + return new RoleData(this.getId(), this.name, this.description, null); } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleReadPlatformServiceImpl.java index d7ccad90f..fd641186b 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleReadPlatformServiceImpl.java @@ -60,7 +60,7 @@ public class RoleReadPlatformServiceImpl implements RoleReadPlatformService { final String name = rs.getString("name"); final String description = rs.getString("description"); - return new RoleData(id, name, description); + return new RoleData(id, name, description, null); } public String schema() { diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleWritePlatformServiceJpaRepositoryImpl.java index 1eed8bd05..57ffc1b90 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/RoleWritePlatformServiceJpaRepositoryImpl.java @@ -26,7 +26,7 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf // FIXME - kw - this value is hardcoded for now but will be retrieved from // configuration - private boolean makerCheckerEnabledForTask = false; + private boolean makerCheckerEnabledForTask = true; @Autowired public RoleWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, final RoleRepository roleRepository,