From 5a48f885865c8fe4f0e57f6f77ebd79097477113 Mon Sep 17 00:00:00 2001 From: Nayan Ambali Date: Wed, 13 Mar 2013 22:02:48 +0530 Subject: [PATCH] Incorp review comments --- .../group/api/GroupsApiResource.java | 17 +++--- .../group/api/GroupsLevelApiResource.java | 12 ++--- .../GroupCommandFromApiJsonDeserializer.java | 6 +-- .../GroupLevelReadPlatformService.java | 4 +- .../GroupLevelReadPlatformServiceImpl.java | 52 ++++++++++++++++--- .../service/GroupReadPlatformServiceImpl.java | 4 +- .../service/GroupWritePlatformService.java | 5 -- 7 files changed, 69 insertions(+), 31 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsApiResource.java index fdbf7e228..a99f56e38 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsApiResource.java @@ -74,11 +74,12 @@ public class GroupsApiResource { @Produces({ MediaType.APPLICATION_JSON }) public String retrieveAllGroups(@Context final UriInfo uriInfo, @QueryParam("sqlSearch") final String sqlSearch, @QueryParam("officeId") final Long officeId, @QueryParam("externalId") final String externalId, - @QueryParam("name") final String name, @QueryParam("underHierarchy") final String hierarchy) { + @QueryParam("name") final String name, @QueryParam("underHierarchy") final String hierarchy, + @QueryParam("levelId") final Long levelId) { this.context.authenticatedUser().validateHasReadPermission("GROUP"); - final String extraCriteria = getGroupExtraCriteria(sqlSearch, officeId, externalId, name, hierarchy); + final String extraCriteria = getGroupExtraCriteria(sqlSearch, officeId, externalId, name, hierarchy, levelId); final Collection groups = this.groupReadPlatformService.retrieveAllGroups(extraCriteria); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); @@ -202,7 +203,7 @@ public class GroupsApiResource { // clause is ambiguous // caused by the same name of columns in m_office and m_group tables private String getGroupExtraCriteria(String sqlSearch, final Long officeId, final String externalId, final String name, - final String hierarchy) { + final String hierarchy, final Long levelId) { String extraCriteria = ""; @@ -213,15 +214,19 @@ public class GroupsApiResource { } if (officeId != null) { - extraCriteria += " and office_id = " + officeId; + extraCriteria += " and g.office_id = " + officeId; + } + + if (levelId != null) { + extraCriteria += " and g.level_Id = " + levelId; } if (externalId != null) { - extraCriteria += " and g.external_id like " + ApiParameterHelper.sqlEncodeString(externalId); + extraCriteria += " and g.external_id = " + ApiParameterHelper.sqlEncodeString(externalId); } if (name != null) { - extraCriteria += " and g.name = " + ApiParameterHelper.sqlEncodeString(name); + extraCriteria += " and g.name like " + ApiParameterHelper.sqlEncodeString(name + "%"); } if (hierarchy != null) { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsLevelApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsLevelApiResource.java index 3dbf8bc19..6a4fc6e46 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsLevelApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/GroupsLevelApiResource.java @@ -22,7 +22,7 @@ import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper; import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; import org.mifosplatform.infrastructure.core.serialization.ToApiJsonSerializer; import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; -import org.mifosplatform.portfolio.group.domain.GroupLevel; +import org.mifosplatform.portfolio.group.data.GroupLevelData; import org.mifosplatform.portfolio.group.service.GroupLevelReadPlatformService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; @@ -33,17 +33,17 @@ import org.springframework.stereotype.Component; @Scope("singleton") public class GroupsLevelApiResource { - private static final Set GROUPLEVEL_DATA_PARAMETERS = new HashSet(Arrays.asList("parentId", "isSuperParent", "levelId", - "levelName", "recursable", "canHaveClients")); + private static final Set GROUPLEVEL_DATA_PARAMETERS = new HashSet(Arrays.asList("levelId", "levelName", "parentLevelId", + "parentLevelName", "childLevelId", "childLevelName" , "superParent" , "recursable" , "canHaveClients")); private final PlatformSecurityContext context; private final GroupLevelReadPlatformService groupLevelReadPlatformService; - private final ToApiJsonSerializer toApiJsonSerializer; + private final ToApiJsonSerializer toApiJsonSerializer; private final ApiRequestParameterHelper apiRequestParameterHelper; @Autowired public GroupsLevelApiResource(final PlatformSecurityContext context, final GroupLevelReadPlatformService groupLevelReadPlatformService, - final ToApiJsonSerializer toApiJsonSerializer, final ApiRequestParameterHelper apiRequestParameterHelper) { + final ToApiJsonSerializer toApiJsonSerializer, final ApiRequestParameterHelper apiRequestParameterHelper) { this.context = context; this.groupLevelReadPlatformService = groupLevelReadPlatformService; this.toApiJsonSerializer = toApiJsonSerializer; @@ -57,7 +57,7 @@ public class GroupsLevelApiResource { this.context.authenticatedUser().validateHasReadPermission("GROUP"); - final Collection groupLevel = this.groupLevelReadPlatformService.retrieveAllLevels(); + final Collection groupLevel = this.groupLevelReadPlatformService.retrieveAllLevels(); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); return this.toApiJsonSerializer.serialize(settings, groupLevel, GROUPLEVEL_DATA_PARAMETERS); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/serialization/GroupCommandFromApiJsonDeserializer.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/serialization/GroupCommandFromApiJsonDeserializer.java index 92f86083d..eaeee4d3b 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/serialization/GroupCommandFromApiJsonDeserializer.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/serialization/GroupCommandFromApiJsonDeserializer.java @@ -99,7 +99,7 @@ public final class GroupCommandFromApiJsonDeserializer extends AbstractFromApiJs baseDataValidator.reset().parameter(parentIdParameterName).value(parentId).notNull().integerGreaterThanZero(); } - final String staffIdParameterName = "stafftId"; + final String staffIdParameterName = "staffId"; if (this.fromApiJsonHelper.parameterExists(staffIdParameterName, element)) { final Long staffId = this.fromApiJsonHelper.extractLongNamed(staffIdParameterName, element); baseDataValidator.reset().parameter(staffIdParameterName).value(staffId).notNull().integerGreaterThanZero(); @@ -140,7 +140,7 @@ public final class GroupCommandFromApiJsonDeserializer extends AbstractFromApiJs baseDataValidator.reset().parameter(parentIdParameterName).value(parentId).notNull().integerGreaterThanZero(); } - final String staffIdParameterName = "stafftId"; + final String staffIdParameterName = "staffId"; if (this.fromApiJsonHelper.parameterExists(staffIdParameterName, element)) { final Long staffId = this.fromApiJsonHelper.extractLongNamed(staffIdParameterName, element); baseDataValidator.reset().parameter(staffIdParameterName).value(staffId).notNull().integerGreaterThanZero(); @@ -167,7 +167,7 @@ public final class GroupCommandFromApiJsonDeserializer extends AbstractFromApiJs final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("group"); - final String staffIdParameterName = "stafftId"; + final String staffIdParameterName = "staffId"; if (this.fromApiJsonHelper.parameterExists(staffIdParameterName, element)) { final Long staffId = this.fromApiJsonHelper.extractLongNamed(staffIdParameterName, element); baseDataValidator.reset().parameter(staffIdParameterName).value(staffId).notNull().integerGreaterThanZero(); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupLevelReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupLevelReadPlatformService.java index abdb11e5a..93f350945 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupLevelReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupLevelReadPlatformService.java @@ -7,10 +7,10 @@ package org.mifosplatform.portfolio.group.service; import java.util.Collection; -import org.mifosplatform.portfolio.group.domain.GroupLevel; +import org.mifosplatform.portfolio.group.data.GroupLevelData; public interface GroupLevelReadPlatformService { - Collection retrieveAllLevels(); + Collection retrieveAllLevels(); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupLevelReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupLevelReadPlatformServiceImpl.java index afe331876..8cb88b206 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupLevelReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupLevelReadPlatformServiceImpl.java @@ -5,29 +5,67 @@ */ package org.mifosplatform.portfolio.group.service; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.Collection; +import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource; import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; -import org.mifosplatform.portfolio.group.domain.GroupLevel; -import org.mifosplatform.portfolio.group.domain.GroupLevelRepository; +import org.mifosplatform.portfolio.group.data.GroupLevelData; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; @Service public class GroupLevelReadPlatformServiceImpl implements GroupLevelReadPlatformService { private final PlatformSecurityContext context; - private final GroupLevelRepository groupLevelRepository; + private final JdbcTemplate jdbcTemplate; + @Autowired - public GroupLevelReadPlatformServiceImpl(final PlatformSecurityContext context, final GroupLevelRepository groupRepository) { + public GroupLevelReadPlatformServiceImpl(final PlatformSecurityContext context , final TenantAwareRoutingDataSource dataSource) { this.context = context; - this.groupLevelRepository = groupRepository; + this.jdbcTemplate = new JdbcTemplate(dataSource); } @Override - public Collection retrieveAllLevels() { + public Collection retrieveAllLevels() { this.context.authenticatedUser(); - return this.groupLevelRepository.findAll(); + + final GroupLevelDataMapper rm = new GroupLevelDataMapper(); + final String sql = "select " + rm.groupLevelSchema(); + return this.jdbcTemplate.query(sql, rm); + } + + private static final class GroupLevelDataMapper implements RowMapper { + + public String groupLevelSchema() { + return "gl.id as id, gl.level_name as levelName , gl.parent_id as parentLevelId , pgl.level_name as parentName , " + + "cgl.id as childLevelId,cgl.level_name as childLevelName,gl.super_parent as superParent ," + + " gl.recursable as recursable , gl.can_have_clients as canHaveClients from m_group_level gl " + + " left join m_group_level pgl on pgl.id = gl.parent_id left join m_group_level cgl on gl.id = cgl.parent_id"; + } + + @Override + public GroupLevelData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException { + + final Long levelId = rs.getLong("id"); + final String levelName = rs.getString("levelName"); + final Long parentLevelId = rs.getLong("parentLevelId"); + final String parentLevelName = rs.getString("parentName"); + final Long childLevelId = rs.getLong("childLevelId"); + final String childLevelName = rs.getString("childLevelName"); + final boolean superParent = rs.getBoolean("superParent"); + final boolean recursable = rs.getBoolean("recursable"); + final boolean canHaveClients = rs.getBoolean("canHaveClients"); + + return new GroupLevelData(levelId, levelName, parentLevelId, parentLevelName, childLevelId, childLevelName, superParent, + recursable, canHaveClients); + } + + } + } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformServiceImpl.java index f642ec6e6..4dee80941 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupReadPlatformServiceImpl.java @@ -338,9 +338,9 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService { final Long officeId = rs.getLong("officeId"); final String officeName = rs.getString("officeName"); final Long groupLevel = rs.getLong("groupLevel"); - final Long parentId = rs.getLong("parentId"); + final Long parentId = JdbcSupport.getLong(rs, "parentId"); final String parentName = rs.getString("parentName"); - final Long staffId = rs.getLong("staffId"); + final Long staffId = JdbcSupport.getLong(rs, "staffId"); final String staffName = rs.getString("staffName"); final String hierarchy = rs.getString("hierarchy"); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupWritePlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupWritePlatformService.java index f0d990bf4..536b79422 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupWritePlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupWritePlatformService.java @@ -7,20 +7,15 @@ package org.mifosplatform.portfolio.group.service; import org.mifosplatform.infrastructure.core.api.JsonCommand; import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; -import org.springframework.security.access.prepost.PreAuthorize; public interface GroupWritePlatformService { - @PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'CREATE_GROUP')") CommandProcessingResult createGroup(JsonCommand command); - @PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'UPDATE_GROUP')") CommandProcessingResult updateGroup(Long grouptId, JsonCommand command); - @PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'DELETE_GROUP')") CommandProcessingResult deleteGroup(Long groupId); - @PreAuthorize(value = "hasAnyRole('ALL_FUNCTIONS', 'UPDATE_GROUP')") CommandProcessingResult unassignStaff(Long grouptId, JsonCommand command); }