P280 - Auditoria alterações (issue 8366)

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@66876 d1611594-4594-4d17-8e1d-87c2c4800839
master
alberto 2017-03-15 14:41:15 +00:00
parent 7281704506
commit 6af3cce27f
1 changed files with 63 additions and 60 deletions

View File

@ -32,10 +32,17 @@ public class AuditInterceptor extends EmptyInterceptor {
@Override
public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
final SessionFactory sessionFactory = DBUtil.getInstance().getSessionFactory();
final Session session = sessionFactory.openSession();
try {
genAudit(entity, EnumAuditAction.CRIACAO);
genAudit(session, entity, EnumAuditAction.CRIACAO);
} catch (Exception exception) {
log.error(exception.getStackTrace());
log.error(exception.getMessage(), exception);
}
if (session != null) {
session.close();
}
return super.onSave(entity, id, state, propertyNames, types);
@ -43,81 +50,50 @@ public class AuditInterceptor extends EmptyInterceptor {
@Override
public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
final SessionFactory sessionFactory = DBUtil.getInstance().getSessionFactory();
final Session session = sessionFactory.openSession();
try {
genAudit(entity, EnumAuditAction.ALTERACAO);
genAudit(session, entity, EnumAuditAction.ALTERACAO);
} catch (Exception exception) {
log.error(exception.getStackTrace());
log.error(exception.getMessage(), exception);
}
if (session != null) {
session.close();
}
return super.onFlushDirty(entity, id, currentState, previousState, propertyNames, types);
}
@Override
public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
final SessionFactory sessionFactory = DBUtil.getInstance().getSessionFactory();
final Session session = sessionFactory.openSession();
try {
genAudit(entity, EnumAuditAction.EXCLUSAO);
genAudit(session, entity, EnumAuditAction.EXCLUSAO);
} catch (Exception exception) {
log.error(exception.getStackTrace());
log.error(exception.getMessage(), exception);
}
if (session != null) {
session.close();
}
super.onDelete(entity, id, state, propertyNames, types);
}
private boolean getAuditModuleService() {
Session session = null;
try {
if (!AuditManager.getINSTANCE().getCheckModuleAudit()) {
return AuditManager.getINSTANCE().getCurrentService() != null ? true : false;
}
AuditService auditService = null;
SessionFactory sessionFactory = DBUtil.getInstance().getSessionFactory();
session = sessionFactory.openSession();
Criteria criteriaFuncionSistema = session.createCriteria(FuncionSistema.class);
criteriaFuncionSistema.add(Restrictions.eq("descruta", AuditManager.getINSTANCE().getCurrentActionService()));
FuncionSistema funcionSistema = (FuncionSistema) criteriaFuncionSistema.uniqueResult();
if (funcionSistema == null) {
Log.info("Função sistema " + funcionSistema + " não encontrada na base de dados.");
AuditManager.getINSTANCE().setCurrentService(auditService);
return false;
}
Criteria criteriaService = session.createCriteria(AuditService.class);
criteriaService.add(Restrictions.eq("funcionSistema", funcionSistema));
auditService = (AuditService) criteriaService.uniqueResult();
if (auditService == null) {
return false;
}
AuditManager.getINSTANCE().setCurrentService(auditService);
AuditManager.getINSTANCE().setCheckModuleAudit(Boolean.FALSE);
return true;
} finally {
if (session != null)
session.close();
}
}
private void genAudit(Object entity, EnumAuditAction action) {
if (!getAuditModuleService()) {
private void genAudit(final Session session, Object entity, EnumAuditAction action) {
if (!getAuditModuleService(session)) {
return;
}
Session session = null;
try {
/**
* Ignorado caso a entidade for de auditoria e se não for encontrado o módulo no banco
*/
if (!(entity instanceof AuditLog)) {
AuditService service = AuditManager.getINSTANCE().getCurrentService();
if (!(entity instanceof AuditLog) && service != null && service.getModule() != null) {
@ -138,9 +114,6 @@ public class AuditInterceptor extends EmptyInterceptor {
audit.setAction(action.getId());
audit.setUsuario(UsuarioLogado.getUsuarioLogado());
SessionFactory sessionFactory = DBUtil.getInstance().getSessionFactory();
session = sessionFactory.openSession();
session.persist(audit);
session.flush();
}
@ -148,10 +121,40 @@ public class AuditInterceptor extends EmptyInterceptor {
}
} catch (Exception exception) {
log.error(exception.getStackTrace());
} finally {
if (session != null)
session.close();
log.error(exception.getMessage(), exception);
}
}
private boolean getAuditModuleService(final Session session) {
if (!AuditManager.getINSTANCE().getCheckModuleAudit()) {
return AuditManager.getINSTANCE().getCurrentService() != null ? true : false;
}
AuditService auditService = null;
Criteria criteriaFuncionSistema = session.createCriteria(FuncionSistema.class);
criteriaFuncionSistema.add(Restrictions.eq("descruta", AuditManager.getINSTANCE().getCurrentActionService()));
FuncionSistema funcionSistema = (FuncionSistema) criteriaFuncionSistema.uniqueResult();
if (funcionSistema == null) {
Log.info("Função sistema " + funcionSistema + " não encontrada na base de dados.");
AuditManager.getINSTANCE().setCurrentService(auditService);
return false;
}
Criteria criteriaService = session.createCriteria(AuditService.class);
criteriaService.add(Restrictions.eq("funcionSistema", funcionSistema));
auditService = (AuditService) criteriaService.uniqueResult();
if (auditService == null) {
return false;
}
AuditManager.getINSTANCE().setCurrentService(auditService);
AuditManager.getINSTANCE().setCheckModuleAudit(Boolean.FALSE);
return true;
}
}