From a6e655761f173ddd0e69d6e855452274d3515e11 Mon Sep 17 00:00:00 2001 From: ashok-conflux Date: Tue, 16 Apr 2013 20:26:24 +0530 Subject: [PATCH] wip: group and center API changes --- .../group/api/CentersApiResource.java | 9 ++- .../portfolio/group/data/CenterData.java | 14 +++-- .../service/CenterReadPlatformService.java | 2 + .../CenterReadPlatformServiceImpl.java | 59 +++++++++++++++---- ...WritePlatformServiceJpaRepositoryImpl.java | 14 +++-- 5 files changed, 74 insertions(+), 24 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/CentersApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/CentersApiResource.java index 7dd4acf6c..6f003d7be 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/CentersApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/api/CentersApiResource.java @@ -109,7 +109,8 @@ public class CentersApiResource { public String retrieveOne(@Context final UriInfo uriInfo, @PathParam("centerId") final Long centerId) { this.context.authenticatedUser().validateHasReadPermission(GroupingTypesApiConstants.CENTER_RESOURCE_NAME); - + final Set associationParameters = ApiParameterHelper.extractAssociationsForResponseIfProvided(uriInfo.getQueryParameters()); + CenterData center = this.centerReadPlatformService.retrieveOne(centerId); final boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters()); @@ -117,6 +118,12 @@ public class CentersApiResource { final CenterData templateCenter = this.centerReadPlatformService.retrieveTemplate(center.officeId()); center = CenterData.withTemplate(templateCenter, center); } + + if (!associationParameters.isEmpty()) { + if (associationParameters.contains("groups")) { + center = CenterData.setGroups(center, this.centerReadPlatformService.retriveAssociatedGroups(centerId)); + } + } final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); return this.centerApiJsonSerializer.serialize(settings, center, GroupingTypesApiConstants.CENTER_RESPONSE_DATA_PARAMETERS); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/data/CenterData.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/data/CenterData.java index 3ce0f270b..26b5731ba 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/data/CenterData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/data/CenterData.java @@ -34,12 +34,12 @@ public class CenterData { public static CenterData template(final Long officeId, final Collection officeOptions, final Collection staffOptions) { - return new CenterData(null, null, null, officeId, null, null, null, null, officeOptions, staffOptions); + return new CenterData(null, null, null, officeId, null, null, null, null, officeOptions, staffOptions, null); } public static CenterData withTemplate(final CenterData templateCenter, final CenterData center) { return new CenterData(center.id, center.name, center.externalId, center.officeId, center.officeName, center.staffId, - center.staffName, center.hierarchy, templateCenter.officeOptions, templateCenter.staffOptions); + center.staffName, center.hierarchy, templateCenter.officeOptions, templateCenter.staffOptions, null); } public static CenterData instance(final Long id, final String name, final String externalId, final Long officeId, @@ -48,12 +48,16 @@ public class CenterData { final Collection officeOptions = null; final Collection staffOptions = null; - return new CenterData(id, name, externalId, officeId, officeName, staffId, staffName, hierarchy, officeOptions, staffOptions); + return new CenterData(id, name, externalId, officeId, officeName, staffId, staffName, hierarchy, officeOptions, staffOptions, null); + } + + public static CenterData setGroups(final CenterData centerData, final Collection groups){ + return new CenterData(centerData.id, centerData.name, centerData.externalId, centerData.officeId, centerData.officeName, centerData.staffId, centerData.staffName, centerData.hierarchy, centerData.officeOptions, centerData.staffOptions, groups); } private CenterData(final Long id, final String name, final String externalId, final Long officeId, final String officeName, final Long staffId, final String staffName, final String hierarchy, final Collection officeOptions, - final Collection staffOptions) { + final Collection staffOptions, final Collection groups) { this.id = id; this.name = name; this.externalId = externalId; @@ -65,7 +69,7 @@ public class CenterData { this.officeOptions = officeOptions; this.staffOptions = staffOptions; - this.groups = null; + this.groups = groups; } public Long officeId() { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformService.java index 2ca782e1a..3caf71da7 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformService.java @@ -21,4 +21,6 @@ public interface CenterReadPlatformService { Collection retrieveAll(SearchParameters searchCriteria); GroupGeneralData retrieveCenterGroupTemplate(Long centerId); + + Collection retriveAssociatedGroups(Long centerId); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformServiceImpl.java index 243777fbf..567d48c57 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/CenterReadPlatformServiceImpl.java @@ -42,6 +42,7 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService private final OfficeReadPlatformService officeReadPlatformService; private final StaffReadPlatformService staffReadPlatformService; private final CenterDataMapper centerMapper = new CenterDataMapper(); + private final GroupDataMapper groupDataMapper = new GroupDataMapper(); @Autowired public CenterReadPlatformServiceImpl(final PlatformSecurityContext context, final TenantAwareRoutingDataSource dataSource, @@ -94,23 +95,22 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService return extraCriteria; } - + + private static final String sqlQuery = "g.id as id, g.external_id as externalId, g.name as name, " + + "g.office_id as officeId, o.name as officeName, " + + "g.staff_id as staffId, s.display_name as staffName, " + + "g.hierarchy as hierarchy " + + "from m_group g " + + "join m_office o on o.id = g.office_id " + + "left join m_staff s on s.id = g.staff_id "; + private static final class CenterDataMapper implements RowMapper { private final String schemaSql; public CenterDataMapper() { - final StringBuilder sqlBuilder = new StringBuilder(400); - - sqlBuilder.append("g.id as id, g.external_id as externalId, g.name as name, "); - sqlBuilder.append("g.office_id as officeId, o.name as officeName, "); - sqlBuilder.append("g.staff_id as staffId, s.display_name as staffName, "); - sqlBuilder.append("g.hierarchy as hierarchy "); - sqlBuilder.append("from m_group g "); - sqlBuilder.append("join m_office o on o.id = g.office_id "); - sqlBuilder.append("left join m_staff s on s.id = g.staff_id "); - - this.schemaSql = sqlBuilder.toString(); + + this.schemaSql = sqlQuery; } public String schema() { @@ -133,6 +133,35 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService } } + private static final class GroupDataMapper implements RowMapper { + + private final String schemaSql; + + public GroupDataMapper() { + + this.schemaSql = sqlQuery; + } + + public String schema() { + return this.schemaSql; + } + + @Override + public GroupGeneralData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException { + + final Long id = rs.getLong("id"); + final String name = rs.getString("name"); + final String externalId = rs.getString("externalId"); + final Long officeId = rs.getLong("officeId"); + final String officeName = rs.getString("officeName"); + final Long staffId = JdbcSupport.getLong(rs, "staffId"); + final String staffName = rs.getString("staffName"); + final String hierarchy = rs.getString("hierarchy"); + + return GroupGeneralData.instance(id, name, externalId, officeId, officeName, null, null, staffId, staffName, hierarchy); + } + } + @Override public Collection retrieveAll(final SearchParameters searchCriteria) { @@ -231,4 +260,10 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService return GroupGeneralData.template(centerOfficeId, center.getId(), center.getName(), staffId, staffName, centerOptions, officeOptions, staffOptions, clientOptions); } + + @Override + public Collection retriveAssociatedGroups(Long centerId) { + String sql = "select " + this.groupDataMapper.schema() + " where g.parent_id = ? "; + return this.jdbcTemplate.query(sql, groupDataMapper, new Object[] { centerId }); + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupWritePlatformServiceJpaRepositoryImpl.java index 8cd246e57..a6499a9a9 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/group/service/GroupWritePlatformServiceJpaRepositoryImpl.java @@ -115,13 +115,14 @@ public class GroupWritePlatformServiceJpaRepositoryImpl implements GroupWritePla clientMembers = assembleSetOfClients(officeId, command); } - Set childGroups = null; + //TODO -AA: Not sure about children are added at the time of group creation + /*Set childGroups = null; if (groupLevel.isRecursable()) { childGroups = assembleSetOfChildGroups(officeId, command); - } + }*/ final Group newGroup = Group - .newGroup(groupOffice, staff, parentGroup, groupLevel, name, externalId, clientMembers, childGroups); + .newGroup(groupOffice, staff, parentGroup, groupLevel, name, externalId, clientMembers, null); // pre-save to generate id for use in group hierarchy this.groupRepository.save(newGroup); @@ -261,7 +262,8 @@ public class GroupWritePlatformServiceJpaRepositoryImpl implements GroupWritePla return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // .withOfficeId(groupForUpdate.getId()) // - .withGroupId(groupForUpdate.getOfficeId()) // + //apart from group context group id does not make much sense + .withGroupId(groupForUpdate.getId()) .withEntityId(groupForUpdate.getId()) // .with(actualChanges) // .build(); @@ -358,7 +360,7 @@ public class GroupWritePlatformServiceJpaRepositoryImpl implements GroupWritePla return clientMembers; } - private Set assembleSetOfChildGroups(final Long officeId, final JsonCommand command) { + /*private Set assembleSetOfChildGroups(final Long officeId, final JsonCommand command) { final Set childGroups = new HashSet(); final String[] childGroupsArray = command.arrayValueOfParameterNamed("childGroups"); @@ -377,7 +379,7 @@ public class GroupWritePlatformServiceJpaRepositoryImpl implements GroupWritePla } return childGroups; - } + }*/ private String[] getClientIds(final Set clients) {