@ModelAttribute("navigaProgetti")
 public NavigaProgetti modelAttrNavigaProgetti() {
   NavigaProgetti navigaProgetti = new NavigaProgetti();
   String idNatura =
       (aggregataFacade.findNaturaByCod(codiNaturaOpenCUP) == null)
           ? "0"
           : aggregataFacade.findNaturaByCod(codiNaturaOpenCUP).getId().toString();
   navigaProgetti.setIdNatura(idNatura);
   return navigaProgetti;
 }
  private void initInModelMascheraRicerca(Model model, NavigaProgetti filtro) {

    // Carico la lista delle regioni
    List<AreaGeografica> listAreaGeografica = aggregataFacade.findAreaGeografica();
    model.addAttribute("listAreaGeografica", listAreaGeografica);

    if ((!"-1".equals(filtro.getIdAreaGeografica()))
        && (!"0".equals(filtro.getIdAreaGeografica()))) {
      // Regione selezionata carico le Province
      List<Regione> listRegione =
          aggregataFacade.findRegioniByIdAreaGeografica(
              Integer.valueOf(filtro.getIdAreaGeografica()));
      model.addAttribute("listRegione", listRegione);
    }

    if ((!"-1".equals(filtro.getIdRegione())) && (!"0".equals(filtro.getIdRegione()))) {
      // Regione selezionata carico le Province
      List<Provincia> listProvincia =
          aggregataFacade.findProvinciaByIdRegione(Integer.valueOf(filtro.getIdRegione()));
      model.addAttribute("listProvincia", listProvincia);
    }

    if ((!"-1".equals(filtro.getIdProvincia())) && (!"0".equals(filtro.getIdProvincia()))) {
      // Provincia selezionata carico i Comuni
      List<Comune> listComune =
          aggregataFacade.findComuneByIdProvincia(Integer.valueOf(filtro.getIdProvincia()));
      model.addAttribute("listComune", listComune);
    }

    // Carico la lista degli Anni Decisione
    List<AnnoDecisione> listaAnnoDecisione = aggregataFacade.findAnniDecisione();
    model.addAttribute("listaAnnoDecisione", listaAnnoDecisione);

    // Carico la lista delle Tipologia Intervento
    List<TipologiaIntervento> listaTipologiaIntervento = aggregataFacade.findTipologiaIntervento();
    model.addAttribute("listaTipologiaIntervento", listaTipologiaIntervento);

    // Carico la lista degli Stato Progetto
    List<StatoProgetto> listaStatoProgetto = aggregataFacade.findStatoProgetto();
    model.addAttribute("listaStatoProgetto", listaStatoProgetto);

    // Carico la lista della Aree Soggetto
    List<AreaSoggetto> listAreaSoggetto = aggregataFacade.findAreaSoggetto();
    model.addAttribute("listAreaSoggetto", listAreaSoggetto);

    if ((!"-1".equals(filtro.getIdAreaSoggetto())) && (!"0".equals(filtro.getIdAreaSoggetto()))) {
      // Carico la lista della Categoria Soggetto
      List<CategoriaSoggetto> listCategoriaSoggetto =
          aggregataFacade
              .findCategoriaSoggettoByIdAreaSoggetto(); // Integer.valueOf(
                                                        // filtro.getIdAreaSoggetto() ));
      model.addAttribute("listCategoriaSoggetto", listCategoriaSoggetto);
    }

    if ((!"-1".equals(filtro.getIdCategoriaSoggetto()))
        && (!"0".equals(filtro.getIdCategoriaSoggetto()))) {
      // Carico la lista della Sottocategoria Soggetto
      List<SottocategoriaSoggetto> listSottoCategoriaSoggetto =
          aggregataFacade.findSottocategoriaSoggetto(
              Integer.valueOf(filtro.getIdCategoriaSoggetto()));
      model.addAttribute("listSottoCategoriaSoggetto", listSottoCategoriaSoggetto);
    }

    // Carico le Aree d'intervednto
    List<AreaIntervento> listAreaIntervento = aggregataFacade.findAreaIntervento();
    model.addAttribute("listAreaIntervento", listAreaIntervento);

    if ((!"-1".equals(filtro.getIdAreaIntervento()))
        && (!"0".equals(filtro.getIdAreaIntervento()))) {
      // Settore intervento selezionata carico i sottosettori
      List<SottosettoreIntervento> listSottosettoreIntervento =
          aggregataFacade.findSottosettoreByArea(Integer.valueOf(filtro.getIdAreaIntervento()));
      model.addAttribute("listSottosettoreIntervento", listSottosettoreIntervento);
    }

    if (((!"-1".equals(filtro.getIdAreaIntervento()))
            && (!"-1".equals(filtro.getIdSottosettoreIntervento())))
        && ((!"0".equals(filtro.getIdAreaIntervento()))
            && (!"0".equals(filtro.getIdSottosettoreIntervento())))) {
      // Settore intervento e sottosettore intervento selezionati carico le categorie
      List<CategoriaIntervento> listaCategoriaIntervento =
          aggregataFacade.findCategoriaInterventoByAreaSottosettore(
              Integer.valueOf(filtro.getIdAreaIntervento()),
              Integer.valueOf(filtro.getIdSottosettoreIntervento()));
      model.addAttribute("listaCategoriaIntervento", listaCategoriaIntervento);
    }
  }
  @RenderMapping(params = "action=elencoProgetti")
  public String elencoProgettiRenderRequest(
      RenderRequest renderRequest,
      RenderResponse renderResponse,
      Model model,
      @ModelAttribute("navigaProgetti") NavigaProgetti navigaProgetti) {
    // ,@RequestParam(required=false, value="jsonnavigaprogetti") String jsonnavigaprogetti){

    // if(!StringUtils.isEmpty(jsonnavigaprogetti)){
    //	navigaProgetti = createModelProgettiFromJsonString(jsonnavigaprogetti);
    // }

    if (StringUtils.isEmpty(navigaProgetti.getCurrentAction())) {
      navigaProgetti.setCurrentAction("elencoProgetti");
    }

    model.addAttribute("currentAction", navigaProgetti.getCurrentAction());
    model.addAttribute("paginate", "true");

    // LISTA PROGETTI //
    // orderByCol is the column name passed in the request while sorting
    String orderByCol = ParamUtil.getString(renderRequest, "orderByCol");
    if (Validator.isNull(orderByCol) || Validator.equals("", orderByCol)) {
      orderByCol = "impoCostoProgetto";
    }

    // orderByType is passed in the request while sorting. It can be either asc or desc
    String orderByType = ParamUtil.getString(renderRequest, "orderByType");
    if (Validator.isNull(orderByType) || Validator.equals("", orderByType)) {
      orderByType = "desc";
    }

    // delta
    String sDelta = ParamUtil.getString(renderRequest, "delta");
    int delta = maxResult;
    if (!(Validator.isNull(sDelta) || Validator.equals("", sDelta))) {
      delta = Integer.parseInt(sDelta);
    }

    SearchContainer<Progetto> searchContainerElenco =
        new SearchContainer<Progetto>(
            renderRequest,
            renderResponse.createRenderURL(),
            null,
            "Nessun dato trovato per la selezione fatta");
    searchContainerElenco.setDelta(delta);

    searchContainerElenco.setOrderByCol(orderByCol);
    searchContainerElenco.setOrderByType(orderByType);

    // int size =  progettoFacade.sizeElencoProgetti( navigaProgetti ).getSize();

    navigaProgetti.setOrderByCol(searchContainerElenco.getOrderByCol());
    navigaProgetti.setOrderByType(searchContainerElenco.getOrderByType());
    navigaProgetti.setStart(searchContainerElenco.getStart());
    navigaProgetti.setDelta(delta);

    List<Progetto> elencoProgetti4Pag = progettoFacade.findElencoProgetti(navigaProgetti);
    // int size =  elencoProgetti.size();
    /*
    searchContainerElenco.setTotal(size);
    int fromIndex = searchContainerElenco.getStart();
    int toIndex = (((searchContainerElenco.getStart() + delta) > size)?size:(searchContainerElenco.getStart() + delta)) - 1;

    System.out.println( fromIndex );
    System.out.println( toIndex );

    List<Progetto> elencoProgetti4Pag = new ArrayList<Progetto>();
    for( Progetto tmp : elencoProgetti.subList(fromIndex, toIndex) ){
    	if( tmp.getAnagraficaCup().getFkDcupDcupIdMaster() != null ){
    		tmp.getAnagraficaCup().setAnagraficaCup(
    				progettoFacade.findAnagraficaCupById( tmp.getAnagraficaCup().getFkDcupDcupIdMaster() ) );
    	}
    	elencoProgetti4Pag.add(tmp);
    }
    */
    searchContainerElenco.setResults(elencoProgetti4Pag);

    model.addAttribute("pagDettaglioProgetto", paginaDettaglioProgetto);
    // FINE LISTA PROGETTI //

    // MASCHERA RICERCA PROGETTI //
    initInModelMascheraRicerca(model, navigaProgetti);
    model.addAttribute("navigaProgetti", navigaProgetti);
    // FINE RICERCA PROGETTI //

    // RIEPILOGO //
    // DATI TOTALI

    NavigaAggregata navigaAggregata = new NavigaAggregata();
    String idNatura =
        (aggregataFacade.findNaturaByCod(codiNaturaOpenCUP) == null)
            ? "0"
            : aggregataFacade.findNaturaByCod(codiNaturaOpenCUP).getId().toString();
    navigaAggregata.setIdNatura(idNatura);
    List<AggregataDTO> listaAggregataDTO = aggregataFacade.findAggregataByNatura(navigaAggregata);
    NavigaProgetti navigaProgettitot = new NavigaProgetti();
    navigaProgettitot.setIdNatura(idNatura);

    Double impoCostoProgetti = 0.0;
    Double impoImportoFinanziato = 0.0;

    long sizetot = 0; // progettoFacade.sizeElencoProgetti( navigaProgettitot ).getSize();

    for (AggregataDTO aggregataDTO : listaAggregataDTO) {
      impoCostoProgetti = impoCostoProgetti + aggregataDTO.getImpoCostoProgetti();
      impoImportoFinanziato = impoImportoFinanziato + aggregataDTO.getImpoImportoFinanziato();
      sizetot = sizetot + aggregataDTO.getNumeProgetti();
    }

    model.addAttribute("volumeDeiProgetti", sizetot);
    model.addAttribute("costoDeiProgetti", impoCostoProgetti);
    model.addAttribute("importoFinanziamenti", impoImportoFinanziato);

    //		if( size > (delta*2)){
    //			navigaAggregata = new NavigaAggregata();
    //			navigaAggregata.setIdNatura(idNatura);
    //			navigaAggregata.importa( navigaProgetti );
    //			//Gestione ANNI
    //			if( navigaProgetti.getIdAnnoDecisiones() != null &&
    // navigaProgetti.getIdAnnoDecisiones().size() > 0){
    //				if( navigaProgetti.getIdAnnoDecisiones().contains("-1") ){
    //					List<String> idAnnoAggregatos = new ArrayList<String>();
    //					idAnnoAggregatos.add("0");
    //					navigaAggregata.setIdAnnoAggregatos( idAnnoAggregatos );
    //				}else{
    //					List<String> idAnnoAggregatos = new ArrayList<String>();
    //					for( String tmp : navigaProgetti.getIdAnnoDecisiones() ){
    //
    //	idAnnoAggregatos.add((aggregataFacade.findAnniDecisione(Integer.valueOf(tmp))).getAnnoAggregato().getId().toString());
    //					}
    //					navigaAggregata.setIdAnnoAggregatos( idAnnoAggregatos );
    //				}
    //			}
    //			//FINE Gestione ANNI
    //
    //			listaAggregataDTO = aggregataFacade.findAggregataByNatura(navigaAggregata);
    //
    //			Double impoCostoProgettiProg = 0.0;
    //			Double impoImportoFinanziatoProg = 0.0;
    //
    //			for(AggregataDTO aggregataDTO : listaAggregataDTO){
    //				impoCostoProgettiProg = impoCostoProgettiProg + aggregataDTO.getImpoCostoProgetti();
    //				impoImportoFinanziatoProg = impoImportoFinanziatoProg +
    // aggregataDTO.getImpoImportoFinanziato();
    //			}
    //			model.addAttribute("costoDeiProgettiProg", impoCostoProgettiProg);
    //			model.addAttribute("importoFinanziamentiProg", impoImportoFinanziatoProg);
    //		}else{
    TotaliDTO totali = progettoFacade.sommaImpElencoProgetti(navigaProgetti);
    model.addAttribute("costoDeiProgettiProg", totali.getImpoCostoProgetto());
    model.addAttribute("importoFinanziamentiProg", totali.getImpoImportoFinanziato());
    model.addAttribute("volumeDeiProgettiProg", totali.getContaProgetti().intValue());
    //		}

    searchContainerElenco.setTotal(totali.getContaProgetti().intValue());

    model.addAttribute("searchContainerElenco", searchContainerElenco);

    /*
    System.out.println("STEP 4");

    Double impoCostoProgettiProg = 0.0;
    Double impoImportoFinanziatoProg = 0.0;

    for( Progetto p : elencoProgetti ){
    	impoCostoProgettiProg = impoCostoProgettiProg + p.getImpoCostoProgetto();
    	impoImportoFinanziatoProg = impoImportoFinanziatoProg + p.getImpoImportoFinanziato();
    }

    model.addAttribute("volumeDeiProgettiProg", size);
    model.addAttribute("costoDeiProgettiProg", impoCostoProgettiProg);
    model.addAttribute("importoFinanziamentiProg", impoImportoFinanziatoProg);
    */
    // FINE RIEPILOGO //

    model.addAttribute("valoreRicercaValido", "SI");

    return "elenco-progetti-view";
  }