MIFOSX-9: ensure @Components are picked up in audit package. fix sql for retrieve of audit data.

This commit is contained in:
Keith Woodlock
2012-12-08 01:02:22 +00:00
parent 3b27bcc4d1
commit 3901a06ad8
5 changed files with 94 additions and 139 deletions
@@ -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;
}
} }
@@ -4,6 +4,6 @@ import java.util.Collection;
public interface AuditReadPlatformService { public interface AuditReadPlatformService {
Collection<AuditData> retrieveAuditEntries(); Collection<AuditData> retrieveAuditEntries();
} }
@@ -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.*,