Code Monster

Have you ever seen a Code Monster?

Well, here you go! :-)

What follows below is a single class method taken from real code that is live on a server somewhere on the Internet right now. And this is just a "baby monster". The more you feed it, the bigger it grows!

Imagine this scenario for a moment… You receive a phone call from your boss telling you to run to the office for a new project. All you need to do, he says, is to add a small piece of functionality to a class method… maybe just that… at least for today…

public ArrayList eseguiAnalisi() {
    ArrayList listaSegnalazioni = new ArrayList();
    
    List  domande = null;
    Domanda domanda = null;
    List  risposte = null;
    
    DAOReques req  = new DAOReques();
    DAOArea ar = new DAOArea();
    ar.setIdQuestionario(getIdQuestionario());
    
    boolean quizDomandaNonForzata = false; // warning 7
    
    try {
        //set Aree e
        if (getArea()==1){
            List aree = ar.getAree();
            Area area = null;
            
            for (int i=0; i<aree.size(); i++){
                area = (Area) aree.get(i);
                domande = req.getDomande(getIdQuestionario(),area.getIdArea());
                if (domande != null){
                    for (int j=0; j<domande.size(); j++){
                        domanda = (Domanda) domande.get(j);
                        risposte = req.getRisposteDomanda(getIdQuestionario(),domanda.getIdDomanda());
                        if (risposte != null)
                        domanda.setRisposte(risposte);
                        area.setDomandeArea(domande);
                    }
                }
            }
            if (aree!=null)
            setAreeDomande(aree);
            }//else{
            // set ListaDomande
            domande = req.getDomande(getIdQuestionario());
            
            
            for (int i=0; i<domande.size(); i++){
                domanda = (Domanda) domande.get(i);
                risposte = req.getRisposteDomanda(getIdQuestionario(),domanda.getIdDomanda());
                if (risposte != null)
                domanda.setRisposte(risposte);
            }
            if (domande!=null)
            setDomande(domande);
        //}
        } catch (DAOException de) {
        de.printStackTrace();
    }
    
    if (getDomande()==null || getDomande().size()==0){
        Segnalazione segn = new Segnalazione();
        segn.setTipoSegnalazione(Segnalazione.ERROR);
        segn.setDescrSegnalazione("Non sono state definite domande per il questionario.");
        listaSegnalazioni.add(segn);
    }
    
    // W1
    if (!(getDataPubblicazione()==null)) {
        Segnalazione segn = new Segnalazione();
        segn.setTipoSegnalazione(Segnalazione.WARNING);
        segn.setDescrSegnalazione("Questionario già pubblicato in data [" + getDataPubblicazione() + "]");
        listaSegnalazioni.add(segn);
        if (!(getDataCessazione()==null) && !getDataCessazione().equals("")) {
            SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
            java.util.Date dataCessazione = null;
            try {
                dataCessazione = sdf.parse(getDataCessazione());
                } catch (ParseException pe) {
            }
            java.util.Date date = new java.util.Date();
            if (dataCessazione.before(date)) {
                segn = new Segnalazione();
                segn.setTipoSegnalazione(Segnalazione.WARNING);
                segn.setDescrSegnalazione("Questionario già cessato in data [" + getDataCessazione() + "]");
                listaSegnalazioni.add(segn);
                } else {
                segn = new Segnalazione();
                segn.setTipoSegnalazione(Segnalazione.WARNING);
                segn.setDescrSegnalazione("Cessazione questionario prevista per il [" 
+ getDataCessazione() + "]");
                listaSegnalazioni.add(segn);
            }
        }
    }
    
    /*if (hasAree()>0&&(!(getDomande()==null))) {
        Segnalazione segn = new Segnalazione();
        segn.setTipoSegnalazione(Segnalazione.WARNING);
        segn.setDescrSegnalazione("Si é scelto di suddividere il questionario per aree,
 ma si sono definite domande non appartenenti ad alcuna area.");
        listaSegnalazioni.add(segn);
    }*/
    // W3
    int[] tipiRisp = new int[5];
    int tipiDiRisp=0;
    //if (!(getDomande()==null)) {
        if (hasAree()==0) {
            if (getDomande()!=null) {
                
                for (int i=0; i<getDomande().size(); i++) {
                    Domanda dom = (Domanda)getDomande().get(i);
                    try {
                        Risposta ris = ((Risposta)dom.getRisposte().get(0));
                        tipiRisp[ris.getIdTipoRisposta()]++;
                        if (ris.getIdTipoRisposta()>0) {
                            if ( (ris.getComponenteRisposta()==null || ris.getComponenteRisposta().size()==0) && 
ris.getTabDiSistema()==null ) {
                                // ERROR 4
                                Segnalazione segn = new Segnalazione();
                                segn.setTipoSegnalazione(Segnalazione.ERROR);
                                segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [non specificata] non ha sufficienti componenti di
 risposta definiti.");
                                listaSegnalazioni.add(segn);
                            }
                            
                            chiusuraRamo(listaSegnalazioni,ris,dom,"non specificata");
                            
                            if (ris.getIdTipoRisposta()==3) {
                                if (ris.getScalaFrequenza()== null) {
                                    Segnalazione segn = new Segnalazione();
                                    segn.setTipoSegnalazione(Segnalazione.ERROR);
                                    segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [non specificata] non ha una scala di frequenza
 definita.");
                                    listaSegnalazioni.add(segn);
                                    } else {
                                    int scala = ris.getScalaFrequenza().size();
                                    if (scala <2) {
                                        // ERROR 6
                                        Segnalazione segn = new Segnalazione();
                                        segn.setTipoSegnalazione(Segnalazione.ERROR);
                                        segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [non specificata] non ha una scala di frequenza
 correttamente definita.");
                                        listaSegnalazioni.add(segn);
                                        } else if (scala > 9) {
                                        // WARNING 5
                                        Segnalazione segn = new Segnalazione();
                                        segn.setTipoSegnalazione(Segnalazione.WARNING);
                                        segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [non specificata] ha una scala di frequenza troppo
 dettagliata. Si consiglia di ridurre il numero di scelte possibili.");
                                        listaSegnalazioni.add(segn);
                                    }
                                    if (!(scala % 2 == 0)) {
                                        Segnalazione segn = new Segnalazione();
                                        segn.setTipoSegnalazione(Segnalazione.WARNING);
                                        segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [non specificata] ha una scala di frequenza che consente
 la scelta intermedia. In questo caso si consente all'intervistato di non prendere una
 posizione preponderante.");
                                        listaSegnalazioni.add(segn);
                                    }
                                }
                            }
                        }
                        
                        if (ris.getIdTipoRisposta()==1){
                            // ERROR 5
                            filtroSenzaDestinazione(listaSegnalazioni,ris,dom,
"non specificata");
                        }
                        
                        if (isTestQuiz()){
                            if (ris.getIdTipoRisposta()!=0) {
                                esisteRispostaCorretta(listaSegnalazioni, ris, dom, 
"non specificata");
                            }
                            if (ris.getIdTipoRisposta()!=1) {
                                // WARNING 7
                                if (!quizDomandaNonForzata){
                                    Segnalazione segn = new Segnalazione();
                                    segn.setTipoSegnalazione(Segnalazione.WARNING);
                                    segn.setDescrSegnalazione("Il questionario di tipo
 Test/Quiz comprende domande di tipo diverso da: Chiusa a scelta forzata.");
                                    listaSegnalazioni.add(segn);
                                    quizDomandaNonForzata = true;
                                }
                            }
                            // if (isTestQuiz()) non deve avere risposte con dati da tabella
                            rispDatiDaTabella(listaSegnalazioni,ris,dom, 
"non specificata") ;
                        }
                        
                        } catch (Exception e) {
                        Segnalazione segn = new Segnalazione();
                        segn.setTipoSegnalazione(Segnalazione.ERROR);
                        segn.setDescrSegnalazione("La domanda [" + dom.getTesto() + "]
dell'area [non specificata] non ha risposte abbinate.");
                        listaSegnalazioni.add(segn);
                    }
                }
            }
            
            // Controllo esito
            for (int i=0; i<tipiRisp.length; i++) {
                if (tipiRisp[i] > 0) tipiDiRisp++;
            }
            
            if (tipiDiRisp>1) {
                // WARNING 3
                Segnalazione segn = new Segnalazione();
                segn.setTipoSegnalazione(Segnalazione.WARNING);
                segn.setDescrSegnalazione("L'area [non specificata] contiene 
risposte di tipo non omogeneo. Si consiglia di utilizzare all'interno della 
stessa area tipologia di risposte il più possibile omogenee.");
                listaSegnalazioni.add(segn);
            }
            } else if (!(getAreeDomande()==null)) {
            for (int j=0; j<getAreeDomande().size(); j++) {
                Area singArea = (Area)getAreeDomande().get(j);
                tipiRisp = new int[5];
                for (int i=0; i<singArea.getDomandeArea().size(); i++) {
                    Domanda dom = (Domanda)singArea.getDomandeArea().get(i);
                    try {
                        Risposta ris = ((Risposta)dom.getRisposte().get(0));
                        tipiRisp[ris.getIdTipoRisposta()]++;
                        // Controllo componenti di risposta
                        if (ris.getIdTipoRisposta()>0) {
                            if ((ris.getComponenteRisposta()==null || ris.getComponenteRisposta().size()==0) 
&& ris.getTabDiSistema()==null ) {
                                // ERROR 4
                                Segnalazione segn = new Segnalazione();
                                segn.setTipoSegnalazione(Segnalazione.ERROR);
                                segn.setDescrSegnalazione("La domanda [" + 
dom.getTesto() + "] dell'area [" + singArea.getDescrizione() + "] non ha sufficienti
 componenti di risposta definiti.");
                                listaSegnalazioni.add(segn);
                            }
                            
                            chiusuraRamo(listaSegnalazioni,ris,dom, singArea.getDescrizione());
                            
                            if (ris.getIdTipoRisposta()==3) {
                                // Controllo Scale di frequenza
                                if (ris.getScalaFrequenza()== null) {
                                    // ERROR 6
                                    Segnalazione segn = new Segnalazione();
                                    segn.setTipoSegnalazione(Segnalazione.ERROR);
                                    segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [" + singArea.getDescrizione() + "] 
non ha una scala di frequenza definita.");
                                    listaSegnalazioni.add(segn);
                                    } else {
                                    int scala = ris.getScalaFrequenza().size();
                                    if (scala <2) {
                                        // ERROR 6
                                        Segnalazione segn = new Segnalazione();
                                        segn.setTipoSegnalazione(Segnalazione.ERROR);
                                        segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [" + singArea.getDescrizione() + "] 
non ha una scala di frequenza correttamente definita.");
                                        listaSegnalazioni.add(segn);
                                        } else if (scala > 9) {
                                        // WARNING 5
                                        Segnalazione segn = new Segnalazione();
                                        segn.setTipoSegnalazione(Segnalazione.WARNING);
                                        segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [" + singArea.getDescrizione() + "] ha una scala di
 frequenza troppo dettagliata. Si consiglia di ridurre il numero di scelte possibili.");
                                        listaSegnalazioni.add(segn);
                                    }
                                    if (!(scala % 2 == 0)) {
                                        // WARNING 4
                                        Segnalazione segn = new Segnalazione();
                                        segn.setTipoSegnalazione(Segnalazione.WARNING);
                                        segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [" + singArea.getDescrizione() + "] ha una scala di 
frequenza che consente la scelta intermedia. In questo caso si consente all'intervistato 
di non prendere una posizione preponderante.");
                                        listaSegnalazioni.add(segn);
                                    }
                                    
                                }
                            }
                        }
                        
                        if (ris.getIdTipoRisposta()==1){
                            // ERROR 5
                            filtroSenzaDestinazione(listaSegnalazioni,ris,dom, singArea.getDescrizione());
                        }
                        
                        // ERROR 3
                        if (isTestQuiz()){
                            if (ris.getIdTipoRisposta()!=0) {
                                esisteRispostaCorretta(listaSegnalazioni, ris, dom, singArea.getDescrizione());
                            }
                            if (ris.getIdTipoRisposta()!=1) {
                                // WARNING 7
                                if (!quizDomandaNonForzata){
                                    Segnalazione segn = new Segnalazione();
                                    segn.setTipoSegnalazione(Segnalazione.WARNING);
                                    segn.setDescrSegnalazione("Il questionario di tipo
 Test/Quiz comprende domande di tipo diverso da: Chiusa a scelta forzata.");
                                    listaSegnalazioni.add(segn);
                                    quizDomandaNonForzata = true;
                                }
                            }
                            rispDatiDaTabella(listaSegnalazioni,ris,dom, singArea.getDescrizione()) ;
                        }
                        
                        } catch (Exception e) {
                        Segnalazione segn = new Segnalazione();
                        segn.setTipoSegnalazione(Segnalazione.ERROR);
                        segn.setDescrSegnalazione("La domanda [" + dom.getTesto() + "]
 dell'area [" + singArea.getDescrizione() + "] non ha risposte abbinate.");
                        listaSegnalazioni.add(segn);
                    }
                }
                tipiDiRisp=0;
                for (int i=0; i<tipiRisp.length; i++) {
                    if (tipiRisp[i] > 0) tipiDiRisp++;
                }
                if (tipiDiRisp>1) {
                    // WARNING 3
                    Segnalazione segn = new Segnalazione();
                    segn.setTipoSegnalazione(Segnalazione.WARNING);
                    segn.setDescrSegnalazione("L'area [" + singArea.getDescrizione() +
 "] contiene risposte di tipo non omogeneo. Si consiglia di utilizzare all'interno della
 stessa area tipologia di risposte il più possibile omogenee.");
                    listaSegnalazioni.add(segn);
                }
            } 
            
            Domanda dom = null;
            boolean domandeSenzaArea = false;
            for (int i=0; i<domande.size(); i++ ){
                dom = (Domanda)domande.get(i);
                if(dom.getIdArea()==null || "".equals(dom.getIdArea().trim())){
                    domandeSenzaArea = true;
                    try {
                        Risposta ris = ((Risposta)dom.getRisposte().get(0));
                        tipiRisp[ris.getIdTipoRisposta()]++;
                        // (only for per type CHIUSA A SCELTA FORZATA, 
                        // but I check everything the same. )
                        if (ris.getIdTipoRisposta()>0) {
                            if ( (ris.getComponenteRisposta()==null ||
 ris.getComponenteRisposta().size()==0) 
&& ris.getTabDiSistema()==null ) {
                                // ERROR 4
                                Segnalazione segn = new Segnalazione();
                                segn.setTipoSegnalazione(Segnalazione.ERROR);
                                segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [non specificata] non ha sufficienti componenti di
 risposta definiti.");
                                listaSegnalazioni.add(segn);
                            }
                            
                            //ERROR 9
                            chiusuraRamo(listaSegnalazioni,ris,dom, "non specificata");
                            
                            if (ris.getIdTipoRisposta()==3) {
                                if (ris.getScalaFrequenza()== null) {
                                    // ERROR 6
                                    Segnalazione segn = new Segnalazione();
                                    segn.setTipoSegnalazione(Segnalazione.ERROR);
                                    segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [non specificata] non ha una scala di frequenza
 definita.");
                                    listaSegnalazioni.add(segn);
                                    } else {
                                    int scala = ris.getScalaFrequenza().size();
                                    if (scala <2) {
                                        // ERROR 6
                                        Segnalazione segn = new Segnalazione();
                                        segn.setTipoSegnalazione(Segnalazione.ERROR);
                                        segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [non specificata] non ha una scala di frequenza
 correttamente definita.");
                                        listaSegnalazioni.add(segn);
                                        } else if (scala > 9) {
                                        // WARNING 5
                                        Segnalazione segn = new Segnalazione();
                                        segn.setTipoSegnalazione(Segnalazione.WARNING);
                                        segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [non specificata] ha una scala di frequenza troppo
 dettagliata. Si consiglia di ridurre il numero di scelte possibili.");
                                        listaSegnalazioni.add(segn);
                                    }
                                    if (!(scala % 2 == 0)) {
                                        // WARNING 4
                                        Segnalazione segn = new Segnalazione();
                                        segn.setTipoSegnalazione(Segnalazione.WARNING);
                                        segn.setDescrSegnalazione("La domanda [" +
 dom.getTesto() + "] dell'area [non specificata] ha una scala di frequenza che consente
 la scelta intermedia. In questo caso si consente all'intervistato di non prendere una
 posizione preponderante.");
                                        listaSegnalazioni.add(segn);
                                    }
                                    
                                }
                            }
                        }
                        
                        if (ris.getIdTipoRisposta()==1){
                            // ERROR 5
                            filtroSenzaDestinazione(listaSegnalazioni,ris,dom,
"non specificata");
                        }
                        
                        // ERROR 3
                        if (isTestQuiz()){
                            if (ris.getIdTipoRisposta()!=0) {
                                esisteRispostaCorretta(listaSegnalazioni, ris, dom, 
"non specificata");
                            }
                            if (ris.getIdTipoRisposta()!=1) {
                                // WARNING 7
                                if (!quizDomandaNonForzata){
                                    Segnalazione segn = new Segnalazione();
                                    segn.setTipoSegnalazione(Segnalazione.WARNING);
                                    segn.setDescrSegnalazione(
"Il questionario di tipo Test/Quiz comprende domande di tipo diverso da: Chiusa a scelta forzata.");
                                    listaSegnalazioni.add(segn);
                                    quizDomandaNonForzata = true;
                                }
                            }
                            rispDatiDaTabella(listaSegnalazioni,ris,dom, 
"non specificata") ;
                        }
                        
                        } catch (Exception e) {
                        // ERROR 2
                        Segnalazione segn = new Segnalazione();
                        segn.setTipoSegnalazione(Segnalazione.ERROR);
                        segn.setDescrSegnalazione("La domanda [" + dom.getTesto() + 
"] dell'area [non specificata] non ha risposte abbinate.");
                        listaSegnalazioni.add(segn);
                    }
                }
            }
            if (domandeSenzaArea){
                // WARNING 2
                Segnalazione segn = new Segnalazione();
                segn.setTipoSegnalazione(Segnalazione.WARNING);
                segn.setDescrSegnalazione("Si é scelto di suddividere il questionario
 per aree, ma si sono definite domande non appartenenti ad alcuna area.");
                listaSegnalazioni.add(segn);
            }
            
            
            
            } else {
            //ERROR 1
            Segnalazione segn = new Segnalazione();
            segn.setTipoSegnalazione(Segnalazione.ERROR);
            segn.setDescrSegnalazione("Non sono state definite domande per il
 questionario.");
            listaSegnalazioni.add(segn);
        }
        
        // W6
        if (isTestQuiz()) {
            if (getSogliaSuperamento()== 0){
                // WARNING 6
                Segnalazione segn = new Segnalazione();
                segn.setTipoSegnalazione(Segnalazione.WARNING);
                segn.setDescrSegnalazione("Il test/quiz non ha una soglia di 
superamento correttamente definita.");
                listaSegnalazioni.add(segn);
            }
        }
        
        return listaSegnalazioni;
    }