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 74c0a811d..77eebd933 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 @@ -33,104 +33,137 @@ 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 Set RESPONSE_DATA_PARAMETERS = new HashSet( + Arrays.asList("id", "apiOperation", "resource", "resourceId", + "maker", "madeOnDate", "checker", "checkedOnDate", + "commandAsJson")); - private final String resourceNameForPermissions = "AUDIT"; + private final String resourceNameForPermissions = "AUDIT"; - private final PlatformSecurityContext context; - private final AuditReadPlatformService auditReadPlatformService; - private final ApiRequestParameterHelper apiRequestParameterHelper; - private final DefaultToApiJsonSerializer toApiJsonSerializer; - private final DefaultToApiJsonSerializer toApiJsonSerializerSearchTemplate; + private final PlatformSecurityContext context; + private final AuditReadPlatformService auditReadPlatformService; + private final ApiRequestParameterHelper apiRequestParameterHelper; + private final DefaultToApiJsonSerializer toApiJsonSerializer; + private final DefaultToApiJsonSerializer toApiJsonSerializerSearchTemplate; - @Autowired - public AuditApiResource(final PlatformSecurityContext context, final AuditReadPlatformService auditReadPlatformService, - final ApiRequestParameterHelper apiRequestParameterHelper, final DefaultToApiJsonSerializer toApiJsonSerializer, - final DefaultToApiJsonSerializer toApiJsonSerializerSearchTemplate) { - this.context = context; - this.auditReadPlatformService = auditReadPlatformService; - this.apiRequestParameterHelper = apiRequestParameterHelper; - this.toApiJsonSerializer = toApiJsonSerializer; - this.toApiJsonSerializerSearchTemplate = toApiJsonSerializerSearchTemplate; - } + @Autowired + public AuditApiResource( + final PlatformSecurityContext context, + final AuditReadPlatformService auditReadPlatformService, + final ApiRequestParameterHelper apiRequestParameterHelper, + final DefaultToApiJsonSerializer toApiJsonSerializer, + final DefaultToApiJsonSerializer toApiJsonSerializerSearchTemplate) { + this.context = context; + this.auditReadPlatformService = auditReadPlatformService; + this.apiRequestParameterHelper = apiRequestParameterHelper; + this.toApiJsonSerializer = toApiJsonSerializer; + this.toApiJsonSerializerSearchTemplate = toApiJsonSerializerSearchTemplate; + } - @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, - @QueryParam("makerId") final Long makerId, @QueryParam("checkerId") final Long checkerId) { + @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, + @QueryParam("makerId") final Long makerId, + @QueryParam("makerDateTime") final String makerDateTime, + @QueryParam("checkerId") final Long checkerId, + @QueryParam("checkerDateTime") final String checkerDateTime) { - context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions); + context.authenticatedUser().validateHasReadPermission( + resourceNameForPermissions); - final String extraCriteria = getExtraCriteria(apiOperation, resource, resourceId, makerId, checkerId); + final String extraCriteria = getExtraCriteria(apiOperation, resource, + resourceId, makerId, makerDateTime, checkerId, checkerDateTime); - final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters()); + final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper + .process(uriInfo.getQueryParameters()); - final Collection auditEntries = this.auditReadPlatformService.retrieveAuditEntries(extraCriteria, - settings.isIncludeJson()); + final Collection auditEntries = this.auditReadPlatformService + .retrieveAuditEntries(extraCriteria, settings.isIncludeJson()); - return this.toApiJsonSerializer.serialize(settings, auditEntries, RESPONSE_DATA_PARAMETERS); - } + return this.toApiJsonSerializer.serialize(settings, auditEntries, + RESPONSE_DATA_PARAMETERS); + } - @GET - @Path("{auditId}") - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) - public String retrieveAuditEntry(@PathParam("auditId") final Long auditId, @Context final UriInfo uriInfo) { + @GET + @Path("{auditId}") + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + public String retrieveAuditEntry(@PathParam("auditId") final Long auditId, + @Context final UriInfo uriInfo) { - context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions); + context.authenticatedUser().validateHasReadPermission( + resourceNameForPermissions); - final AuditData auditEntry = this.auditReadPlatformService.retrieveAuditEntry(auditId); + final AuditData auditEntry = this.auditReadPlatformService + .retrieveAuditEntry(auditId); - final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, auditEntry, RESPONSE_DATA_PARAMETERS); - } + final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper + .process(uriInfo.getQueryParameters()); + return this.toApiJsonSerializer.serialize(settings, auditEntry, + RESPONSE_DATA_PARAMETERS); + } - @GET - @Path("/searchtemplate") - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) - public String retrieveAuditSearchTemplate(@Context final UriInfo uriInfo) { + @GET + @Path("/searchtemplate") + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + public String retrieveAuditSearchTemplate(@Context final UriInfo uriInfo) { - context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions); + context.authenticatedUser().validateHasReadPermission( + resourceNameForPermissions); - final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters()); + final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper + .process(uriInfo.getQueryParameters()); - final AuditSearchData auditSearchData = this.auditReadPlatformService.retrieveSearchTemplate(); + final AuditSearchData auditSearchData = this.auditReadPlatformService + .retrieveSearchTemplate(); - final Set RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE = new HashSet(Arrays.asList("appUsers", "apiOperations", - "resources")); + final Set RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE = new HashSet( + Arrays.asList("appUsers", "apiOperations", "resources")); - return this.toApiJsonSerializerSearchTemplate.serialize(settings, auditSearchData, RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE); - } + return this.toApiJsonSerializerSearchTemplate.serialize(settings, + auditSearchData, RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE); + } - private String getExtraCriteria(final String apiOperation, final String resource, final Long resourceId, final Long makerId, final Long checkerId) { + private String getExtraCriteria(final String apiOperation, + final String resource, final Long resourceId, final Long makerId, final String makerDateTime, + final Long checkerId, final String checkerDateTime) { - String extraCriteria = ""; + String extraCriteria = ""; - if (apiOperation != null) { - extraCriteria += " and aud.api_operation = " + ApiParameterHelper.sqlEncodeString(apiOperation); - } - if (resource != null) { - extraCriteria += " and aud.api_resource = " + ApiParameterHelper.sqlEncodeString(resource); - } - - if (resourceId != null) { - extraCriteria += " and aud.resource_id = " + resourceId; - } - if (makerId != null) { - extraCriteria += " and aud.maker_id = " + makerId; - } - if (checkerId != null) { - extraCriteria += " and aud.checker_id = " + checkerId; - } + if (apiOperation != null) { + extraCriteria += " and aud.api_operation = " + + ApiParameterHelper.sqlEncodeString(apiOperation); + } + if (resource != null) { + extraCriteria += " and aud.api_resource = " + + ApiParameterHelper.sqlEncodeString(resource); + } - if (StringUtils.isNotBlank(extraCriteria)) { - extraCriteria = extraCriteria.substring(4); - } + if (resourceId != null) { + extraCriteria += " and aud.resource_id = " + resourceId; + } + if (makerId != null) { + extraCriteria += " and aud.maker_id = " + makerId; + } + if (checkerId != null) { + extraCriteria += " and aud.checker_id = " + checkerId; + } + if (makerDateTime != null) { + extraCriteria += " and aud.made_on_date >= " + ApiParameterHelper.sqlEncodeString(makerDateTime); + } + if (checkerDateTime != null) { + extraCriteria += " and aud.checked_on_date >= " + ApiParameterHelper.sqlEncodeString(checkerDateTime); + } - return extraCriteria; - } + 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/data/AuditData.java b/mifosng-provider/src/main/java/org/mifosplatform/audit/data/AuditData.java index 2f3ea5eaa..b5e47ed14 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/audit/data/AuditData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/audit/data/AuditData.java @@ -1,6 +1,6 @@ package org.mifosplatform.audit.data; -import org.joda.time.LocalDate; +import org.joda.time.DateTime; /** * Immutable data object representing client data. @@ -18,16 +18,16 @@ public final class AuditData { @SuppressWarnings("unused") private final String maker; @SuppressWarnings("unused") - private final LocalDate madeOnDate; + private final DateTime madeOnDate; @SuppressWarnings("unused") private final String checker; @SuppressWarnings("unused") - private final LocalDate checkedOnDate; + private final DateTime checkedOnDate; @SuppressWarnings("unused") private final String commandAsJson; public AuditData(final Long id, final String apiOperation, final String resource, final Long resourceId, final String maker, - final LocalDate madeOnDate, final String checker, final LocalDate checkedOnDate, final String commandAsJson) { + final DateTime madeOnDate, final String checker, final DateTime checkedOnDate, final String commandAsJson) { this.id = id; this.apiOperation = apiOperation; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/audit/service/AuditReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/audit/service/AuditReadPlatformServiceImpl.java index 42f407d62..f8c239bc7 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/audit/service/AuditReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/audit/service/AuditReadPlatformServiceImpl.java @@ -6,7 +6,7 @@ import java.util.Collection; import java.util.List; import org.apache.commons.lang.StringUtils; -import org.joda.time.LocalDate; +import org.joda.time.DateTime; import org.mifosplatform.audit.data.AuditData; import org.mifosplatform.audit.data.AuditSearchData; import org.mifosplatform.infrastructure.core.domain.JdbcSupport; @@ -55,9 +55,9 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { final String resource = rs.getString("resource"); final Long resourceId = JdbcSupport.getLong(rs, "resourceId"); final String maker = rs.getString("maker"); - final LocalDate madeOnDate = JdbcSupport.getLocalDate(rs, "madeOnDate"); + final DateTime madeOnDate = JdbcSupport.getDateTime(rs, "madeOnDate"); final String checker = rs.getString("checker"); - final LocalDate checkedOnDate = JdbcSupport.getLocalDate(rs, "checkedOnDate"); + final DateTime checkedOnDate = JdbcSupport.getDateTime(rs, "checkedOnDate"); String commandAsJson; // commandAsJson might not be on the select list of columns try {