wip audit view search

This commit is contained in:
John Woodlock
2012-12-13 00:33:33 +00:00
parent e21a8266d1
commit 8424d52325
3 changed files with 116 additions and 83 deletions
@@ -33,104 +33,137 @@ import org.springframework.stereotype.Component;
@Scope("singleton") @Scope("singleton")
public class AuditApiResource { public class AuditApiResource {
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "apiOperation", "resource", "resourceId", private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(
"maker", "madeOnDate", "checker", "checkedOnDate", "commandAsJson")); 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 PlatformSecurityContext context;
private final AuditReadPlatformService auditReadPlatformService; private final AuditReadPlatformService auditReadPlatformService;
private final ApiRequestParameterHelper apiRequestParameterHelper; private final ApiRequestParameterHelper apiRequestParameterHelper;
private final DefaultToApiJsonSerializer<AuditData> toApiJsonSerializer; private final DefaultToApiJsonSerializer<AuditData> toApiJsonSerializer;
private final DefaultToApiJsonSerializer<AuditSearchData> toApiJsonSerializerSearchTemplate; private final DefaultToApiJsonSerializer<AuditSearchData> toApiJsonSerializerSearchTemplate;
@Autowired @Autowired
public AuditApiResource(final PlatformSecurityContext context, final AuditReadPlatformService auditReadPlatformService, public AuditApiResource(
final ApiRequestParameterHelper apiRequestParameterHelper, final DefaultToApiJsonSerializer<AuditData> toApiJsonSerializer, final PlatformSecurityContext context,
final DefaultToApiJsonSerializer<AuditSearchData> toApiJsonSerializerSearchTemplate) { final AuditReadPlatformService auditReadPlatformService,
this.context = context; final ApiRequestParameterHelper apiRequestParameterHelper,
this.auditReadPlatformService = auditReadPlatformService; final DefaultToApiJsonSerializer<AuditData> toApiJsonSerializer,
this.apiRequestParameterHelper = apiRequestParameterHelper; final DefaultToApiJsonSerializer<AuditSearchData> toApiJsonSerializerSearchTemplate) {
this.toApiJsonSerializer = toApiJsonSerializer; this.context = context;
this.toApiJsonSerializerSearchTemplate = toApiJsonSerializerSearchTemplate; this.auditReadPlatformService = auditReadPlatformService;
} this.apiRequestParameterHelper = apiRequestParameterHelper;
this.toApiJsonSerializer = toApiJsonSerializer;
this.toApiJsonSerializerSearchTemplate = toApiJsonSerializerSearchTemplate;
}
@GET @GET
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
public String retrieveAuditEntries(@Context final UriInfo uriInfo, @QueryParam("apiOperation") final String apiOperation, public String retrieveAuditEntries(@Context final UriInfo uriInfo,
@QueryParam("resource") final String resource, @QueryParam("resourceId") final Long resourceId, @QueryParam("apiOperation") final String apiOperation,
@QueryParam("makerId") final Long makerId, @QueryParam("checkerId") final Long checkerId) { @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<AuditData> auditEntries = this.auditReadPlatformService.retrieveAuditEntries(extraCriteria, final Collection<AuditData> auditEntries = this.auditReadPlatformService
settings.isIncludeJson()); .retrieveAuditEntries(extraCriteria, settings.isIncludeJson());
return this.toApiJsonSerializer.serialize(settings, auditEntries, RESPONSE_DATA_PARAMETERS); return this.toApiJsonSerializer.serialize(settings, auditEntries,
} RESPONSE_DATA_PARAMETERS);
}
@GET @GET
@Path("{auditId}") @Path("{auditId}")
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
public String retrieveAuditEntry(@PathParam("auditId") final Long auditId, @Context final UriInfo uriInfo) { 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()); final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper
return this.toApiJsonSerializer.serialize(settings, auditEntry, RESPONSE_DATA_PARAMETERS); .process(uriInfo.getQueryParameters());
} return this.toApiJsonSerializer.serialize(settings, auditEntry,
RESPONSE_DATA_PARAMETERS);
}
@GET @GET
@Path("/searchtemplate") @Path("/searchtemplate")
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
public String retrieveAuditSearchTemplate(@Context final UriInfo uriInfo) { 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<String> RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE = new HashSet<String>(Arrays.asList("appUsers", "apiOperations", final Set<String> RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE = new HashSet<String>(
"resources")); 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) { if (apiOperation != null) {
extraCriteria += " and aud.api_operation = " + ApiParameterHelper.sqlEncodeString(apiOperation); extraCriteria += " and aud.api_operation = "
} + ApiParameterHelper.sqlEncodeString(apiOperation);
if (resource != null) { }
extraCriteria += " and aud.api_resource = " + ApiParameterHelper.sqlEncodeString(resource); 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 (StringUtils.isNotBlank(extraCriteria)) { if (resourceId != null) {
extraCriteria = extraCriteria.substring(4); 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;
}
} }
@@ -1,6 +1,6 @@
package org.mifosplatform.audit.data; package org.mifosplatform.audit.data;
import org.joda.time.LocalDate; import org.joda.time.DateTime;
/** /**
* Immutable data object representing client data. * Immutable data object representing client data.
@@ -18,16 +18,16 @@ public final class AuditData {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final String maker; private final String maker;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final LocalDate madeOnDate; private final DateTime madeOnDate;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final String checker; private final String checker;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final LocalDate checkedOnDate; private final DateTime checkedOnDate;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final String commandAsJson; private final String commandAsJson;
public AuditData(final Long id, final String apiOperation, final String resource, final Long resourceId, final String maker, 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.id = id;
this.apiOperation = apiOperation; this.apiOperation = apiOperation;
@@ -6,7 +6,7 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import org.apache.commons.lang.StringUtils; 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.AuditData;
import org.mifosplatform.audit.data.AuditSearchData; import org.mifosplatform.audit.data.AuditSearchData;
import org.mifosplatform.infrastructure.core.domain.JdbcSupport; import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
@@ -55,9 +55,9 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
final String resource = rs.getString("resource"); final String resource = rs.getString("resource");
final Long resourceId = JdbcSupport.getLong(rs, "resourceId"); final Long resourceId = JdbcSupport.getLong(rs, "resourceId");
final String maker = rs.getString("maker"); 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 String checker = rs.getString("checker");
final LocalDate checkedOnDate = JdbcSupport.getLocalDate(rs, "checkedOnDate"); final DateTime checkedOnDate = JdbcSupport.getDateTime(rs, "checkedOnDate");
String commandAsJson; String commandAsJson;
// commandAsJson might not be on the select list of columns // commandAsJson might not be on the select list of columns
try { try {