MIFOSX-9: ensure @Components are picked up in audit package. fix sql for retrieve of audit data.
This commit is contained in:
@@ -26,46 +26,38 @@ 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>(
|
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "apiOperation", "resource", "resourceId",
|
||||||
Arrays.asList("id", "apiOperation", "resource", "resourceId",
|
"makerId", "madeOnDate", "checkerId", "checkedOnDate", "commandAsJson"));
|
||||||
"makerId", "madeOnDate", "checkerId", "checkedOnDate",
|
private final String resourceNameForPermissions = "AUDIT";
|
||||||
"commandAsJson"));
|
|
||||||
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;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public AuditApiResource(final PlatformSecurityContext context,
|
public AuditApiResource(final PlatformSecurityContext context, final AuditReadPlatformService auditReadPlatformService,
|
||||||
final AuditReadPlatformService auditReadPlatformService,
|
final ApiRequestParameterHelper apiRequestParameterHelper, final DefaultToApiJsonSerializer<AuditData> toApiJsonSerializer) {
|
||||||
final ApiRequestParameterHelper apiRequestParameterHelper,
|
this.context = context;
|
||||||
final DefaultToApiJsonSerializer<AuditData> toApiJsonSerializer) {
|
this.auditReadPlatformService = auditReadPlatformService;
|
||||||
this.context = context;
|
this.apiRequestParameterHelper = apiRequestParameterHelper;
|
||||||
this.auditReadPlatformService = auditReadPlatformService;
|
this.toApiJsonSerializer = toApiJsonSerializer;
|
||||||
this.apiRequestParameterHelper = apiRequestParameterHelper;
|
}
|
||||||
this.toApiJsonSerializer = toApiJsonSerializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@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) {
|
public String retrieveAuditEntries(@Context final UriInfo uriInfo) {
|
||||||
|
|
||||||
context.authenticatedUser().validateHasReadPermission(
|
context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions);
|
||||||
resourceNameForPermissions);
|
|
||||||
|
|
||||||
// final String extraCriteria = getCriteria(sqlSearch, officeId,
|
// final String extraCriteria = getCriteria(sqlSearch, officeId,
|
||||||
// externalId, displayName, firstName, lastName, hierarchy);
|
// externalId, displayName, firstName, lastName, hierarchy);
|
||||||
|
|
||||||
final Collection<AuditData> auditEntries = this.auditReadPlatformService
|
final Collection<AuditData> auditEntries = this.auditReadPlatformService.retrieveAuditEntries();
|
||||||
.retrieveAuditEntries();
|
|
||||||
|
|
||||||
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper
|
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||||
.process(uriInfo.getQueryParameters());
|
return this.toApiJsonSerializer.serialize(settings, auditEntries, RESPONSE_DATA_PARAMETERS);
|
||||||
return this.toApiJsonSerializer.serialize(settings, auditEntries,
|
}
|
||||||
RESPONSE_DATA_PARAMETERS);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -7,66 +7,36 @@ import org.joda.time.LocalDate;
|
|||||||
*/
|
*/
|
||||||
final public class AuditData {
|
final public class AuditData {
|
||||||
|
|
||||||
private final Long id;
|
@SuppressWarnings("unused")
|
||||||
private final String apiOperation;
|
private final Long id;
|
||||||
private final String resource;
|
@SuppressWarnings("unused")
|
||||||
private final Long resourceId;
|
private final String apiOperation;
|
||||||
private final String maker;
|
@SuppressWarnings("unused")
|
||||||
private final LocalDate madeOnDate;
|
private final String resource;
|
||||||
private final String checker;
|
@SuppressWarnings("unused")
|
||||||
private final LocalDate checkedOnDate;
|
private final Long resourceId;
|
||||||
private final String commandAsJson;
|
@SuppressWarnings("unused")
|
||||||
|
private final String maker;
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private final LocalDate madeOnDate;
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private final String checker;
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private final LocalDate checkedOnDate;
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private final String commandAsJson;
|
||||||
|
|
||||||
public AuditData(final Long id, final String apiOperation,
|
public AuditData(final Long id, final String apiOperation, final String resource, final Long resourceId, final String maker,
|
||||||
final String resource, final Long resourceId, final String maker,
|
final LocalDate madeOnDate, final String checker, final LocalDate checkedOnDate, final String commandAsJson) {
|
||||||
final LocalDate madeOnDate, final String checker,
|
|
||||||
final LocalDate checkedOnDate, final String commandAsJson) {
|
|
||||||
|
|
||||||
this.id = id;
|
|
||||||
this.apiOperation = apiOperation;
|
|
||||||
this.resource = resource;
|
|
||||||
this.resourceId = resourceId;
|
|
||||||
this.maker = maker;
|
|
||||||
this.madeOnDate = madeOnDate;
|
|
||||||
this.checker = checker;
|
|
||||||
this.checkedOnDate = checkedOnDate;
|
|
||||||
this.commandAsJson = commandAsJson;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return this.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getApiOperation() {
|
|
||||||
return this.apiOperation;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getResource() {
|
|
||||||
return this.resource;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getResourceId() {
|
|
||||||
return this.resourceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMaker() {
|
|
||||||
return this.maker;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LocalDate getMadeOnDate() {
|
|
||||||
return this.madeOnDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getChecker() {
|
|
||||||
return this.checker;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LocalDate getCheckedOnDate() {
|
|
||||||
return this.checkedOnDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCommandAsJson() {
|
|
||||||
return this.commandAsJson;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
this.id = id;
|
||||||
|
this.apiOperation = apiOperation;
|
||||||
|
this.resource = resource;
|
||||||
|
this.resourceId = resourceId;
|
||||||
|
this.maker = maker;
|
||||||
|
this.madeOnDate = madeOnDate;
|
||||||
|
this.checker = checker;
|
||||||
|
this.checkedOnDate = checkedOnDate;
|
||||||
|
this.commandAsJson = commandAsJson;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -4,6 +4,6 @@ import java.util.Collection;
|
|||||||
|
|
||||||
public interface AuditReadPlatformService {
|
public interface AuditReadPlatformService {
|
||||||
|
|
||||||
Collection<AuditData> retrieveAuditEntries();
|
Collection<AuditData> retrieveAuditEntries();
|
||||||
|
|
||||||
}
|
}
|
||||||
+36
-44
@@ -16,57 +16,49 @@ import org.springframework.stereotype.Service;
|
|||||||
@Service
|
@Service
|
||||||
public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
|
public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
|
||||||
|
|
||||||
private final JdbcTemplate jdbcTemplate;
|
private final JdbcTemplate jdbcTemplate;
|
||||||
private final PlatformSecurityContext context;
|
private final PlatformSecurityContext context;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public AuditReadPlatformServiceImpl(final PlatformSecurityContext context,
|
public AuditReadPlatformServiceImpl(final PlatformSecurityContext context, final TenantAwareRoutingDataSource dataSource) {
|
||||||
final TenantAwareRoutingDataSource dataSource) {
|
this.context = context;
|
||||||
this.context = context;
|
this.jdbcTemplate = new JdbcTemplate(dataSource);
|
||||||
this.jdbcTemplate = new JdbcTemplate(dataSource);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private static final class AuditMapper implements RowMapper<AuditData> {
|
private static final class AuditMapper implements RowMapper<AuditData> {
|
||||||
|
|
||||||
public String schema() {
|
public String schema() {
|
||||||
return " mc.id as id, mc.api_operation as apiOperation, mc.api_resource as resource, mc.resource_id as resourceId,"
|
return " mc.id as id, mc.api_operation as apiOperation, mc.api_resource as resource, mc.resource_id as resourceId,"
|
||||||
+ " mk.username as maker, mc.made_on_date as madeOnDate, ck.username as checker, mc.checked_on_date as checkedOnDate, mc.command_as_json as commandAsJson "
|
+ " mk.username as maker, mc.made_on_date as madeOnDate, ck.username as checker, mc.checked_on_date as checkedOnDate, mc.command_as_json as commandAsJson "
|
||||||
+ " from m_portfolio_command_source mc "
|
+ " from m_portfolio_command_source mc " + " left join m_appuser mk on mk.id = mc.maker_id"
|
||||||
+ " left join m_appuser mk on mk.id = mc.maker_id"
|
+ " left join m_appuser ck on ck.id = mc.checker_id";
|
||||||
+ " left join m_appuser ck on ck.id = mc.checker_id";
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AuditData mapRow(final ResultSet rs,
|
public AuditData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
|
||||||
@SuppressWarnings("unused") final int rowNum)
|
|
||||||
throws SQLException {
|
|
||||||
|
|
||||||
final Long id = rs.getLong("id");
|
final Long id = rs.getLong("id");
|
||||||
final String apiOperation = rs.getString("apiOperation");
|
final String apiOperation = rs.getString("apiOperation");
|
||||||
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,
|
final LocalDate madeOnDate = JdbcSupport.getLocalDate(rs, "madeOnDate");
|
||||||
"madeOnDate");
|
final String checker = rs.getString("checker");
|
||||||
final String checker = rs.getString("checker");
|
final LocalDate checkedOnDate = JdbcSupport.getLocalDate(rs, "checkedOnDate");
|
||||||
final LocalDate checkedOnDate = JdbcSupport.getLocalDate(rs,
|
final String commandAsJson = rs.getString("commandAsJson");
|
||||||
"checkedOnDate");
|
return new AuditData(id, apiOperation, resource, resourceId, maker, madeOnDate, checker, checkedOnDate, commandAsJson);
|
||||||
final String taskJson = rs.getString("taskJson");
|
}
|
||||||
return new AuditData(id, apiOperation, resource, resourceId, maker,
|
}
|
||||||
madeOnDate, checker, checkedOnDate, taskJson);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<AuditData> retrieveAuditEntries() {
|
public Collection<AuditData> retrieveAuditEntries() {
|
||||||
context.authenticatedUser();
|
context.authenticatedUser();
|
||||||
|
|
||||||
final AuditMapper rm = new AuditMapper();
|
final AuditMapper rm = new AuditMapper();
|
||||||
final String sql = "select "
|
final String sql = "select " + rm.schema()
|
||||||
+ rm.schema()
|
+ " where mc.checker_id is null order by mc.made_on_date DESC, mc.api_resource ASC, mc.api_operation ASC";
|
||||||
+ " where mc.checker_id is null order by mc.made_on_date DESC, mc.api_resource ASC, mc.api_operation ASC";
|
|
||||||
|
|
||||||
return this.jdbcTemplate.query(sql, rm, new Object[] {});
|
return this.jdbcTemplate.query(sql, rm, new Object[] {});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
<context:component-scan base-package="org.mifosplatform.accounting.*,
|
<context:component-scan base-package="org.mifosplatform.accounting.*,
|
||||||
org.mifosplatform.commands.*,
|
org.mifosplatform.commands.*,
|
||||||
|
org.mifosplatform.audit.*,
|
||||||
org.mifosplatform.infrastructure.*,
|
org.mifosplatform.infrastructure.*,
|
||||||
org.mifosplatform.organisation.*,
|
org.mifosplatform.organisation.*,
|
||||||
org.mifosplatform.portfolio.loanaccount.*,
|
org.mifosplatform.portfolio.loanaccount.*,
|
||||||
|
|||||||
Reference in New Issue
Block a user