private void calculateVersion(EntityAuditEvent auditedEntity) { log.trace("Version calculation. for update/remove"); Integer lastCommitVersion = auditingEntityRepository.findMaxCommitVersion( auditedEntity.getEntityType(), auditedEntity.getEntityId()); log.trace("Last commit version of entity => {}", lastCommitVersion); if (lastCommitVersion != null && lastCommitVersion != 0) { log.trace("Present. Adding version.."); auditedEntity.setCommitVersion(lastCommitVersion + 1); } else { log.trace("No entities.. Adding new version 1"); auditedEntity.setCommitVersion(1); } }
/** * Method to prepare auditing entity * * @param entity * @param action * @return */ private EntityAuditEvent prepareAuditEntity(final Object entity, EntityAuditAction action) { EntityAuditEvent auditedEntity = new EntityAuditEvent(); Class<?> entityClass = entity.getClass(); // Retrieve entity class with reflection auditedEntity.setAction(action.value()); auditedEntity.setEntityType(entityClass.getName()); Long entityId; String entityData; log.trace("Getting Entity Id and Content"); try { Field privateLongField = entityClass.getDeclaredField("id"); privateLongField.setAccessible(true); entityId = (Long) privateLongField.get(entity); privateLongField.setAccessible(false); entityData = objectMapper.writeValueAsString(entity); } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException | IOException e) { log.error("Exception while getting entity ID and content {}", e); // returning null as we dont want to raise an application exception here return null; } auditedEntity.setEntityId(entityId); auditedEntity.setEntityValue(entityData); final AbstractAuditingEntity abstractAuditEntity = (AbstractAuditingEntity) entity; if (EntityAuditAction.CREATE.equals(action)) { auditedEntity.setModifiedBy(abstractAuditEntity.getCreatedBy()); auditedEntity.setModifiedDate(abstractAuditEntity.getCreatedDate()); auditedEntity.setCommitVersion(1); } else { auditedEntity.setModifiedBy(abstractAuditEntity.getLastModifiedBy()); auditedEntity.setModifiedDate(abstractAuditEntity.getLastModifiedDate()); calculateVersion(auditedEntity); } log.trace("Audit Entity --> {} ", auditedEntity.toString()); return auditedEntity; }