From d95a190efba0604841fae179d081a75ef2aa0b8c Mon Sep 17 00:00:00 2001 From: John Woodlock Date: Mon, 10 Dec 2012 12:26:48 +0000 Subject: [PATCH] WIP Audit views --- .../audit/api/AuditApiResource.java | 87 +++++++++++++------ .../audit/api/AuditReadPlatformService.java | 2 +- .../api/AuditReadPlatformServiceImpl.java | 13 ++- .../staff/api/StaffApiResource.java | 4 +- .../client/api/ClientsApiResource.java | 4 +- 5 files changed, 76 insertions(+), 34 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditApiResource.java index 49f97b607..2b6f8b9f9 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditApiResource.java @@ -9,10 +9,13 @@ import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriInfo; +import org.apache.commons.lang.StringUtils; +import org.mifosplatform.infrastructure.core.api.ApiParameterHelper; import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper; import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer; @@ -26,39 +29,71 @@ import org.springframework.stereotype.Component; @Scope("singleton") public class AuditApiResource { - private final Set RESPONSE_DATA_PARAMETERS = new HashSet(Arrays.asList("id", "apiOperation", "resource", "resourceId", - "maker", "madeOnDate", "checker", "checkedOnDate", "commandAsJson")); - private final String resourceNameForPermissions = "AUDIT"; + private final Set RESPONSE_DATA_PARAMETERS = new HashSet( + Arrays.asList("id", "apiOperation", "resource", "resourceId", + "maker", "madeOnDate", "checker", "checkedOnDate", + "commandAsJson")); + private final String resourceNameForPermissions = "AUDIT"; - private final PlatformSecurityContext context; - private final AuditReadPlatformService auditReadPlatformService; - private final ApiRequestParameterHelper apiRequestParameterHelper; - private final DefaultToApiJsonSerializer toApiJsonSerializer; + private final PlatformSecurityContext context; + private final AuditReadPlatformService auditReadPlatformService; + private final ApiRequestParameterHelper apiRequestParameterHelper; + private final DefaultToApiJsonSerializer toApiJsonSerializer; - @Autowired - public AuditApiResource(final PlatformSecurityContext context, final AuditReadPlatformService auditReadPlatformService, - final ApiRequestParameterHelper apiRequestParameterHelper, final DefaultToApiJsonSerializer toApiJsonSerializer) { - this.context = context; - this.auditReadPlatformService = auditReadPlatformService; - this.apiRequestParameterHelper = apiRequestParameterHelper; - this.toApiJsonSerializer = toApiJsonSerializer; - } + @Autowired + public AuditApiResource(final PlatformSecurityContext context, + final AuditReadPlatformService auditReadPlatformService, + final ApiRequestParameterHelper apiRequestParameterHelper, + final DefaultToApiJsonSerializer toApiJsonSerializer) { + this.context = context; + this.auditReadPlatformService = auditReadPlatformService; + this.apiRequestParameterHelper = apiRequestParameterHelper; + this.toApiJsonSerializer = toApiJsonSerializer; + } - @GET - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) - public String retrieveAuditEntries(@Context final UriInfo uriInfo) { + @GET + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + public String retrieveAuditEntries(@Context final UriInfo uriInfo, + @QueryParam("apiOperation") final String apiOperation, + @QueryParam("resource") final String resource, + @QueryParam("resourceId") final Long resourceId) { - context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions); + context.authenticatedUser().validateHasReadPermission( + resourceNameForPermissions); - // final String extraCriteria = getCriteria(sqlSearch, officeId, - // externalId, displayName, firstName, lastName, hierarchy); + final String extraCriteria = getExtraCriteria(apiOperation, resource, resourceId); - final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - - final Collection auditEntries = this.auditReadPlatformService.retrieveAuditEntries(settings.isIncludeJson()); + final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper + .process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, auditEntries, RESPONSE_DATA_PARAMETERS); + final Collection auditEntries = this.auditReadPlatformService + .retrieveAuditEntries(extraCriteria, settings.isIncludeJson()); + + return this.toApiJsonSerializer.serialize(settings, auditEntries, + RESPONSE_DATA_PARAMETERS); + } + + private String getExtraCriteria(String apiOperation, String resource, Long resourceId) { + + String extraCriteria = ""; + + if (apiOperation != null) { + extraCriteria += " and api_operation like " + ApiParameterHelper.sqlEncodeString(apiOperation); + } + if (resource != null) { + extraCriteria += " and api_resource like " + ApiParameterHelper.sqlEncodeString(resource); + } + if (resourceId != null) { + extraCriteria += " and resource_id = " + resourceId; + } + + + if (StringUtils.isNotBlank(extraCriteria)) { + extraCriteria = extraCriteria.substring(4); + } + + return extraCriteria; } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditReadPlatformService.java index 4bf1a56f3..ff8d3daff 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditReadPlatformService.java @@ -4,6 +4,6 @@ import java.util.Collection; public interface AuditReadPlatformService { - Collection retrieveAuditEntries(boolean includeJson); + Collection retrieveAuditEntries(String extraCriteria, boolean includeJson); } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditReadPlatformServiceImpl.java index 912b202dc..665654fbf 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/audit/api/AuditReadPlatformServiceImpl.java @@ -4,6 +4,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; +import org.apache.commons.lang.StringUtils; import org.joda.time.LocalDate; import org.mifosplatform.infrastructure.core.domain.JdbcSupport; import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource; @@ -62,13 +63,19 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { } @Override - public Collection retrieveAuditEntries(boolean includeJson) { + public Collection retrieveAuditEntries(String extraCriteria, boolean includeJson) { context.authenticatedUser(); final AuditMapper rm = new AuditMapper(); - final String sql = "select " + rm.schema(includeJson) + + + + + + String sql = "select " + rm.schema(includeJson); + if (StringUtils.isNotBlank(extraCriteria)) sql += " where (" + extraCriteria + ")"; // + " where mc.checker_id is null order by mc.made_on_date DESC, mc.api_resource ASC, mc.api_operation ASC"; - + " order by id DESC"; + sql += " order by id DESC"; return this.jdbcTemplate.query(sql, rm, new Object[] {}); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/api/StaffApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/api/StaffApiResource.java index b59345546..c9d183ccb 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/api/StaffApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/api/StaffApiResource.java @@ -74,7 +74,7 @@ public class StaffApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) public String retrieveStaff(@Context final UriInfo uriInfo, @QueryParam("sqlSearch") final String sqlSearch, - @QueryParam("officeId") final Integer officeId) { + @QueryParam("officeId") final Long officeId) { context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions); @@ -137,7 +137,7 @@ public class StaffApiResource { return this.toApiJsonSerializer.serialize(result); } - private String getStaffCriteria(final String sqlSearch, final Integer officeId) { + private String getStaffCriteria(final String sqlSearch, final Long officeId) { String extraCriteria = ""; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientsApiResource.java index 32bd92de3..bd1a4bbf3 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/api/ClientsApiResource.java @@ -81,7 +81,7 @@ public class ClientsApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) public String retrieveAllIndividualClients(@Context final UriInfo uriInfo, @QueryParam("sqlSearch") final String sqlSearch, - @QueryParam("officeId") final Integer officeId, @QueryParam("externalId") final String externalId, + @QueryParam("officeId") final Long officeId, @QueryParam("externalId") final String externalId, @QueryParam("displayName") final String displayName, @QueryParam("firstName") final String firstName, @QueryParam("lastName") final String lastName, @QueryParam("underHierarchy") final String hierarchy) { @@ -95,7 +95,7 @@ public class ClientsApiResource { return this.toApiJsonSerializer.serialize(settings, clients, CLIENT_DATA_PARAMETERS); } - private String getClientCriteria(String sqlSearch, Integer officeId, String externalId, String displayName, String firstName, + private String getClientCriteria(String sqlSearch, Long officeId, String externalId, String displayName, String firstName, String lastName, String hierarchy) { String extraCriteria = "";