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")
public class AuditApiResource {
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "apiOperation", "resource", "resourceId",
"maker", "madeOnDate", "checker", "checkedOnDate", "commandAsJson"));
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(
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<AuditData> toApiJsonSerializer;
private final DefaultToApiJsonSerializer<AuditSearchData> toApiJsonSerializerSearchTemplate;
private final PlatformSecurityContext context;
private final AuditReadPlatformService auditReadPlatformService;
private final ApiRequestParameterHelper apiRequestParameterHelper;
private final DefaultToApiJsonSerializer<AuditData> toApiJsonSerializer;
private final DefaultToApiJsonSerializer<AuditSearchData> toApiJsonSerializerSearchTemplate;
@Autowired
public AuditApiResource(final PlatformSecurityContext context, final AuditReadPlatformService auditReadPlatformService,
final ApiRequestParameterHelper apiRequestParameterHelper, final DefaultToApiJsonSerializer<AuditData> toApiJsonSerializer,
final DefaultToApiJsonSerializer<AuditSearchData> 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<AuditData> toApiJsonSerializer,
final DefaultToApiJsonSerializer<AuditSearchData> 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<AuditData> auditEntries = this.auditReadPlatformService.retrieveAuditEntries(extraCriteria,
settings.isIncludeJson());
final Collection<AuditData> 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<String> RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE = new HashSet<String>(Arrays.asList("appUsers", "apiOperations",
"resources"));
final Set<String> RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE = new HashSet<String>(
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;
}
}
@@ -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;
@@ -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 {