Como eu diminuo a complexidade ciclomática deste código por exemplo: a finalidade dele é habilitar um botão validar (exibí-lo ou não).
public boolean habilitaBotaoValidar() {
if (listaPostoDeTrabalhoSelecionado != null) {
for (PostoDeTrabalho posto : listaPostoDeTrabalhoSelecionado) {
if (posto != null && posto.getListaPessoaDTO() != null) {
for (PessoaDTO pessoaDTO : posto.getListaPessoaDTO()) {
if (pessoaDTO != null && pessoaDTO.getListaRetencao() != null) {
for (Retencao re : pessoaDTO.getListaRetencao()) {
if (re != null && re.getDataValidouRetencao() == null
&& re.getDataAprovouRetencao() == null) {
return true;
}
}
}
}
}
}
}
return false;
}
<p:column headerText="Ação" style="text-align: center;">
<p:commandButton actionListener="#{validarRetencaoAction.selecionar(pessoaDTO, retencao)}" icon="ui-icon-refresh" update="@all" process="@all"
title="Recalcular" disabled="#{validarRetencaoAction.habilitaBotaoValidar() eq false or retencao.dataValidouRetencao ne null}" />
</p:column>
O valor da complexidade está em 15.
Em outra parte do código, tbm estou com o mesmo problema:
<p:commandButton action="#{validarRetencaoAction.validar()}" icon="ui-icon-check" value="Validar" update="@all" style="float: left;" disabled="#{validarRetencaoAction.habilitaBotaoValidar() eq false}">
<p:confirm header="Confirmação" message="Validar esta retenção?" icon="ui-icon-alert" style="position: absolute; top: 50px !important"/>
</p:commandButton>
public void validar() throws Exception {
Usuario usuarioLogado = new Usuario(usuarioSessao.getLogin());
Date dataAtual = new Date();
if (listaPostoDeTrabalhoSelecionado != null) {
for (PostoDeTrabalho posto : listaPostoDeTrabalhoSelecionado) {
if (posto != null && posto.getListaPessoaDTO() != null) {
for (PessoaDTO pessoaDTO : posto.getListaPessoaDTO()) {
if (pessoaDTO != null && pessoaDTO.getListaRetencao() != null) {
for (Retencao re : pessoaDTO.getListaRetencao()) {
if (re != null && re.getDataValidouRetencao() == null
&& re.getDataAprovouRetencao() == null) {
re.setDataValidouRetencao(dataAtual);
re.setUsuarioValidouRetencao(usuarioLogado);
retencaoDAO.merge(re);
}
}
}
}
}
}
...
}
}
Se alguém puder dar sugestão de como melhorar, obrigado!