wip audit view search
This commit is contained in:
@@ -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) {
|
if (resourceId != null) {
|
||||||
extraCriteria += " and aud.resource_id = " + resourceId;
|
extraCriteria += " and aud.resource_id = " + resourceId;
|
||||||
}
|
}
|
||||||
if (makerId != null) {
|
if (makerId != null) {
|
||||||
extraCriteria += " and aud.maker_id = " + makerId;
|
extraCriteria += " and aud.maker_id = " + makerId;
|
||||||
}
|
}
|
||||||
if (checkerId != null) {
|
if (checkerId != null) {
|
||||||
extraCriteria += " and aud.checker_id = " + checkerId;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(extraCriteria)) {
|
if (StringUtils.isNotBlank(extraCriteria)) {
|
||||||
extraCriteria = extraCriteria.substring(4);
|
extraCriteria = extraCriteria.substring(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
return extraCriteria;
|
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;
|
||||||
|
|||||||
+3
-3
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user