Ordinare le date

di il
15 risposte

Ordinare le date

Ragazzi, come faccio ad ordinare le date in ordine crescente?

ho scritto questo codice

package it.unibas.carosello.modello;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

public class Puntata implements Comparable {

  private Calendar data = new GregorianCalendar();
  private List<Spot> listaSpots = new ArrayList<Spot>();
  private int ascoltoMin;
  private int ascoltoMax;
  
  public Puntata(Calendar data, int ascoltoMin, int ascoltoMax) {
      this.data = data;
      this.data.setLenient(false);
      this.ascoltoMin = ascoltoMin;
      this.ascoltoMax = ascoltoMax;
      this.data.setLenient(false);
      this.data.getTime();
      
  }

    public Calendar getData() {
        return data;
    }

    public void setData(Calendar data) {
        this.data = data;
    }


    public List<Spot> getListaSpots() {
        return listaSpots;
    }

    public void setListaSpots(List<Spot> listaSpots) {
        this.listaSpots = listaSpots;
    }
    
    public void addListaSpots (Spot spot) {
        this.listaSpots.add(spot);
    }
    
    public String getStringData () {
        Date d = data.getTime();
        DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
        return df.format(d);
        
    }
    
    public int getAscoltoMin() {
        return ascoltoMin;
    }
    
    public int getAscoltoMax() {
        return ascoltoMax;
    }
    
    

    public String getAscoltoMinimo() {
        return Integer.toString(ascoltoMin);
    }

  
    public void setAscoltoMin(int ascoltoMin) {
        this.ascoltoMin = ascoltoMin;
    }

    public String getAscoltoMassimo() {
        return Integer.toString(ascoltoMax);
    }

  
    public void setAscoltoMax(int ascoltoMax) {
        this.ascoltoMax = ascoltoMax;
    }
    
    public int media () {
        int media = 0;
        return media = (ascoltoMin+ascoltoMax)/2;
    }
    
    public String getStringAscoltoMin() {
        return Integer.toString(ascoltoMin);
    }
    
      public String getStringAscoltoMax() {
        return Integer.toString(ascoltoMax);
    }
    
    @Override
    public String toString() { // Serve a dare un "nome" alla classe
        Date d = data.getTime();
        DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
        return df.format(d);
    }
    
    public String toStringPuntata() { // Stampa tutti di dati della Classe
        String stringa ="";
        stringa += " Data  : " + this.toString() + "\n";
        stringa += " Ascolto Minimo   : " + this.getAscoltoMinimo() + "\n";
        stringa += " Ascolto Massimo  : " + this.getAscoltoMassimo() + "\n";
        return stringa;
    }

  public int compareTo(Object o) {
        SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/YYYY"); 
        Date data1 = new Date();
        Date data2 = new Date();
           try {
        Puntata p =(Puntata)o;
        data1 = formatoData.parse(p.toString());
        data2=formatoData.parse(this.data.toString());
               } catch (ParseException ex1) {
                 //cosa ci metto qui?
                }
       return data1.compareTo(data2);
}
va bene così?
cosa metto nel catch?
dove devo chiamarlo poi?

Spero mi possiate aiutare.

15 Risposte

  • Re: Ordinare le date

    C'e' un bel po' di casino
    Devi studiare Java decisamente meglio, perche' ci sono delle cose assolutamente inutili.
    Molto probabilmente arrivi dal C, per come scrivi il codice

    Domanda:

    1) secondo te, le date sono ordinabili? Non pensare a come le rappresenti, ma in generale!
    2) supponiamo, per ipotesi, che siano ordinabili, serve convertirle in stringa per confrontarle?
    3) supponiamo che non sia necessario convertirle in stringa, ma mantieni separati i campi [giorno, mese, anno]. Se hai due date in questo formato, quando e' che una dara e' precedente/uguale/successiva all'altra?

    E sopprattutto, studia le proprieta' (metodi) degli oggetti che usi, perche' certe cose non serve proprio farle.
  • Re: Ordinare le date

    CRTVLB ha scritto:


    Ragazzi, come faccio ad ordinare le date in ordine crescente?
    Innanzitutto sfrutta bene e in modo completo i "generics" (non solo per la lista degli spot!). Esistono ormai da un sacco di tempo (fin da Java 5) ed è praticamente d'obbligo conoscerli e usarli ... almeno a livello basilare.

    Quindi non solo
    implements Comparable

    ma
    implements Comparable<Puntata>

    e il tuo compareTo dovrà avere il parametro come Puntata ... non Object.

    Veniamo alla questione delle date, tu hai un campo data di tipo Calendar e vuoi ordinare per questo campo.
    Tutto il giro che hai fatto di toString ... parse ecc... è assolutamente inutile, brutto e fumoso. Hai guardato la documentazione di Calendar?? Direi di no ....

    Calendar ha un compareTo(Calendar) perché è Comparable<Calendar> e quindi i calendar sono oggetti "comparabili" tra di loro.

    Ora che sai del compareTo(Calendar) quali sono i tuoi eventuali dubbi?
  • Re: Ordinare le date

    @Migliorabili

    Si, ci hai preso, è vero devo studiare sicuramente meglio java e spero che tu e gli altri presenti in questo forum possiate darmi una mano anche in questo. E ci hai preso di nuovo, è altrettanto varo che vengo dal c; però mantenere la sintassi del c è stata una mia decisione perché credo, forse sbagliando, che il codice sia più leggibile da altri scritto in quel modo( Poi magari sbaglio XD ).

    Il di più che vedi serve per altro nell'applicazione che sto sviluppando, ho postato tutta la classe.

    per rispondere alle tue domande

    1. Secondo me sono ordinabili

    2.Non credo sia necessario convertirle in stringhe per compararle, ma siccome a me serve che vengano visualizzate in una comboBox in questo modo: 10 marzo 2015 le ho convertite in stringhe.

    3. se le avessi in quel formato confronterei prima gli anni, se sono uguali i mesi e se anche i mesi sono gli stessi confronterei i giorni.

    @Migliorabili
    @andbim

    ho riscritto il codice in questo modo
    
    public class Puntata implements Comparable <Puntata> {
    
      private Calendar data = new GregorianCalendar();
      private List<Spot> listaSpots = new ArrayList<Spot>();
    
      public Puntata(Calendar data) {
          this.data = data;
          this.data.setLenient(false);
          this.data.getTime();
          
      }
    
     public String toString() {
            Date d = data.getTime();
            DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
            return df.format(d);
        }
    
     public boolean equals(Puntata p) {
            return this.toString().equals(p.toString());
        }
    
        public int compareTo(Puntata p) {
            SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/YYYY"); 
            Date data1 = data.getTime();
            Date data2= p.data.getTime();
           return data1.compareTo(data2);
        }
    
    }
    
    
    Va bene? teoricamente dovrebbe funzionare o sbaglio?

    Ora, nel caso fosse scritto bene e funzionasse, esiste un metodo migliore per scriverlo e per snellire il codice?

    come faccio ad ordinare le date usando questo metodo? Lo chiamo nell'azione aggiungi? oppure faccio una nuova lista nella classe puntata che ordina in base alla data la lista puntate già esistente?



    @andbin e se invece volessi usare compareTo(Calendar) ho googolato un po' ma non ho trovato niente che mi potesse essere utile.
  • Re: Ordinare le date

    CRTVLB ha scritto:


    @andbin e se invece volessi usare compareTo(Calendar) ho googolato un po' ma non ho trovato niente che mi potesse essere utile.
    public class Puntata implements Comparable<Puntata> {
        .........
    
        public int compareTo(Puntata altraPuntata) {
            return getData().compareTo(altraPuntata.getData());
        }
    }
    Sì ... è proprio tutto qui!
    Sembra così difficile?
  • Re: Ordinare le date

    Adesso no XD

    avrei un'altra domanda adesso come faccia a far si che quando inserisco una nuova data mi compaia ordinata e non come ultimo elemento nella comboBox ?
  • Re: Ordinare le date

    CRTVLB ha scritto:


    ma siccome a me serve che vengano visualizzate in una comboBox in questo modo: 10 marzo 2015 le ho convertite in stringhe.

    CRTVLB ha scritto:


    come faccia a far si che quando inserisco una nuova data mi compaia ordinata e non come ultimo elemento nella comboBox ?
    Se in una combobox si vuole presentare delle date, in un certo formato, allora innanzitutto un approccio molto valido è quello di creare una classe es. DateItem che incapsula ad esempio un Calendar/Date (quello che ti è utile, insomma) e dove il toString() di DateItem fornisce appunto la data formattata. Ciò che vedi nella combo è appunto il risultato dei toString() sugli oggetti presenti nel model.

    Se poi si vuole mantenere ordinato il model ad ogni aggiunta di un elemento, allora si può pensare di implementare un ComboBoxModel custom in cui un tuo metodo specifico es. addItem(DateItem) utilizza la tecnica del "binary search" applicata ad un List per inserire l'elemento nel punto "giusto" affinché tutto resti ordinato.

    P.S. tra i miei nuovi Java Examples ho realizzato un sorted list model (quindi per JList) come esempio. Per un combo box model è una cosa molto, molto simile.
  • Re: Ordinare le date

    Grazie andbin, ora do un'occhiata.

    Poi provo a scrivere un po' di codice e vedo se funziona, nel caso non ci riesca puoi darmi una mano?
  • Re: Ordinare le date

    @andbin alla fine ci sono riuscito.

    Grazie mille per l'aiuto.
  • Re: Ordinare le date

    CRTVLB ha scritto:


    alla fine ci sono riuscito.
    Se vuoi postare codice o descrive come, vediamo anche se è buono/appropriato.
  • Re: Ordinare le date

    Il codice è questo
    
    public class Puntata implements Comparable <Puntata> {
    
      private Calendar data = new GregorianCalendar();
      private List<Spot> listaSpots = new ArrayList<Spot>();
     
      private int ascoltoMin;
      private int ascoltoMax;
      
      public Puntata(Calendar data) {
          this.data = data;
          this.data.setLenient(false);
          this.data.getTime();
          
      }
    
    public int compareTo(Puntata altraPuntata) { // serve ad inserire le date in or
            SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/YYYY"); 
            return getData().compareTo(altraPuntata.getData());
    }
    
    }
    
    
    
    public class Carosello {
        
    private List<Puntata> listaPuntate = new ArrayList<Puntata>();
    
    public void ordinaPuntate() {
             Collections.sort(listaPuntate);
    }
    
    }
    
    
    chiamo il metodo ordinaPuntate nell'azione aggiungi dopo aver inserito una nuova puntata e poi ho creato un altro metodo ripulisciComboBox che ripulisce la comboBox dove vengono visualizzate tutte le date e poi le ricariche con la nuova listaPuntate e lo chiamo subito dopo ordinaPuntate

    Va bene?

    Ora come faccio a fare una convalida sulla data? cioè quando inserisco una nuova puntata con una nuova data voglio che mi esce l'avviso che la data è già presente.

    P.s. avrei un altro problema, spero di non scocciarti ma se puoi dargli un'occhiata.

    https://www.iprogrammatori.it/forum-programmazione/java/problemi-elimina-t24380.html
  • Re: Ordinare le date

    CRTVLB ha scritto:


    chiamo il metodo ordinaPuntate nell'azione aggiungi dopo aver inserito una nuova puntata e poi ho creato un altro metodo ripulisciComboBox che ripulisce la comboBox dove vengono visualizzate tutte le date e poi le ricariche con la nuova listaPuntate e lo chiamo subito dopo ordinaPuntate

    Va bene?
    Per quanto hai detto, sì, ho capito l'approccio in generale. Va anche bene, è accettabile. Chiaramente non è l'approccio più "avanzato" che dicevo io, cioè un combo box model "sorted", mantenuto ordinato internamente.

    Ah, la parte
    SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/YYYY");

    nel compareTo NON ti serve.

    CRTVLB ha scritto:


    Ora come faccio a fare una convalida sulla data? cioè quando inserisco una nuova puntata con una nuova data voglio che mi esce l'avviso che la data è già presente.
    Fai una ricerca nella lista delle puntate per vedere se c'è già quella data.
  • Re: Ordinare le date

    @Andbin

    potresti farmi un'esempio di codice di come l'avresti scritto tu? mi serve per capire l'approccio che devo avere.

    andbin ha scritto:


    Fai una ricerca nella lista delle puntate per vedere se c'è già quella data.
    potresti darmi una mano? ho scritto diverso codice e l'approccio è proprio quello, ma nessun metodo da me scritto ha dato i risultati sperati.
  • Re: Ordinare le date

    CRTVLB ha scritto:


    @Andbin

    potresti farmi un'esempio di codice di come l'avresti scritto tu? mi serve per capire l'approccio che devo avere.
    Non riesco subito (ma ho già idea di come farlo), te le posto domani o dopodomani.

    CRTVLB ha scritto:


    potresti darmi una mano? ho scritto diverso codice e l'approccio è proprio quello, ma nessun metodo da me scritto ha dato i risultati sperati.
    Purtroppo non mi è ovviamente chiaro il contesto generale della tua applicazione. Tu hai un oggetto Carosello che contiene N puntate, vuoi inserire una nuova puntata verificando prima se esiste già una qualunque puntata per la stessa data?
  • Re: Ordinare le date

    andbin ha scritto:



    Non riesco subito (ma ho già idea di come farlo), te le posto domani o dopodomani.
    ok grazie, davvero gentilissimo.

    andbin ha scritto:


    Purtroppo non mi è ovviamente chiaro il contesto generale della tua applicazione. Tu hai un oggetto Carosello che contiene N puntate, vuoi inserire una nuova puntata verificando prima se esiste già una qualunque puntata per la stessa data?
    ti posto il codice di Carosello, Puntata e dell'AzioneAggiungi, così forse ti è più chiaro tutto

    // Carosello Posto tutta la classe con tutti i metodi
    
    public class Carosello {
        
        private List<Azienda> listaAziende = new ArrayList<Azienda>();
        private List<Azienda> listaAziendeCercate = new ArrayList<Azienda>();
        private List<Puntata> listaPuntate = new ArrayList<Puntata>();
        private List<Puntata> listaPuntateCercate = new ArrayList<Puntata>();
        
        private List<Spot> listaSpots = new ArrayList<Spot>();
        private List<Spot> listaSpotsCercati = new ArrayList<Spot>();
      
        private Controllo controllo;
            
        public List<Azienda> getListaAziendeCercate() {
            return listaAziendeCercate;
        }
        
        public void ordinaPuntate() {
             Collections.sort(listaPuntate);
        }
    
        public void setListaAziendeCercate(List<Azienda> listaAziendeCercate) {
            this.listaAziendeCercate = listaAziendeCercate;
        }
    
        public List<Spot> getListaSpotsCercati() {
            return listaSpotsCercati;
        }
    
        public void setListaSpotsCercati(List<Spot> listaSpotsCercati) {
            this.listaSpotsCercati = listaSpotsCercati;
        }
    
        public List<Puntata> getListaPuntateCercate() {
            return listaPuntateCercate;
        }
    
        public void setListaPuntateCercate(List<Puntata> listaPuntateCercate) {
            this.listaPuntateCercate = listaPuntateCercate;
        }
    
        public List<Azienda> getListaAziende() {
            return listaAziende;
        }
    
        public void setListaAziende(List<Azienda> listaAziende) {
            this.listaAziende = listaAziende;
        }
    
        public List<Puntata> getListaPuntate() {
            return listaPuntate;
        }
    
        public void setListaPuntate(List<Puntata> listaPuntate) {
            this.listaPuntate = listaPuntate;
        }
    
        public List<Spot> getListaSpots() {
            return listaSpots;
        }
    
        public void setListaSpots(List<Spot> listaSpots) {
            this.listaSpots = listaSpots;
        }
        
        public void addListaSpots(Spot spot){
            this.listaSpots.add(spot);
        }
        
        public void addListaAziende(Azienda azienda){
            this.listaAziende.add(azienda);
        }
        
        public void addPuntata(Puntata puntata){
            this.listaPuntate.add(puntata);
        }
          
        public void removeSpotsCercati( int i ) {
            this.listaSpotsCercati.remove(i);      
        }
        
        public void removeSpot(int i) {
            this.listaSpots.remove(i);
        }
        
        public void rimuoviSpot(Puntata puntata) {
            List<Spot> cercatiS = new ArrayList<Spot>();
            for (Spot spot : listaSpots) {
                if ((spot.getPuntata()!=puntata)){
                    cercatiS.add(spot);
                }
            }
            this.listaSpots= cercatiS;  
        }
        
        public int getNumeroPuntate() {
            return this.listaPuntate.size();
        }
        
        public Puntata getPuntata(int i){
            return (Puntata) this.listaPuntate.get(i);
        }
        
        //metodi per cercare gli spot delle puntate
        
         public void cercaIta (Puntata puntata){
            List<Spot> cercatiS = new ArrayList<Spot>();
            for (Spot spot : listaSpots){
               if (spot.getPuntata()==puntata){
                    if (spot.getAzienda().isItaliana()==true){
                        cercatiS.add(spot);
                    }
               }
            }
            this.listaSpotsCercati = cercatiS;
            if(listaSpotsCercati.isEmpty()){ //           
                JOptionPane.showMessageDialog(null, "ATTENZIONE\n"+"Nessuno Spot Presente"); 
            }
        }
         
        public void cercaStra (Puntata puntata){
            List<Spot> cercatiS = new ArrayList<Spot>();
            
            for (Spot spot : listaSpots){
                if (spot.getPuntata()==puntata){
                    if (spot.getAzienda().isItaliana()==false){
                        cercatiS.add(spot);
                    }
                }
            }
            this.listaSpotsCercati = cercatiS;
            if(listaSpotsCercati.isEmpty()){            
                JOptionPane.showMessageDialog(null, "ATTENZIONE\n"+"Nessuno Spot Presente\n"); 
            }
        }
       
        public void cercaTutto (Puntata puntata){
            
            List<Spot> cercatiS = new ArrayList<Spot>();
            
            for (Spot spot : listaSpots){
               if (spot.getPuntata()==puntata){
                    cercatiS.add(spot);
               }
            }
            this.listaSpotsCercati = cercatiS;
            if(listaSpotsCercati.isEmpty()){            
                JOptionPane.showMessageDialog(null, "ATTENZIONE\n"+"Nessuno Spot Presente"); 
            }
        }
        
                
        // Cerca 
        public void cercaAzienda(String nomeAzienda) {
            List<Spot> cercatiS = new ArrayList<Spot>();
                for (Spot spot : listaSpots){
                   if (spot.getAzienda().getNomeAzienda().equals(nomeAzienda)){
                       cercatiS.add(spot);
                   } 
                }
            listaSpotsCercati = cercatiS;
            if(listaSpotsCercati.isEmpty()){  
                JOptionPane.showMessageDialog(null, "ATTENZIONE\n"+"\n"+"Nessuna Azienda Presente\n"+"\n"+"ATTENZIONE\n"+"\n"+" IL PROGRAMMA E' CASE SENSITIVE\n" +"\n"+"Controllare Maiuscole e Minuscole\n"+"\n"+"Esempio:Scavolini è diverso da scavolini"); 
            } 
        }
        
        public int mumeroPuntate (){
            int cont = 0;
            for (Puntata puntata : listaPuntate){
                for (Spot spot : listaSpotsCercati){
                    if (spot.getPuntata().equals(puntata)){
                        cont++;
                    }
                }
            }
            return cont;
        }
    }
    
    // Puntata anche qui posto tutta la classe
    
    public class Puntata implements Comparable <Puntata> {
    
      private Calendar data = new GregorianCalendar();
      private List<Spot> listaSpots = new ArrayList<Spot>();
     
      private int ascoltoMin;
      private int ascoltoMax;
      
      public Puntata(Calendar data, int ascoltoMin, int ascoltoMax) {
          this.data = data;
          this.ascoltoMin = ascoltoMin;
          this.ascoltoMax = ascoltoMax;
          this.data.setLenient(false);
          this.data.getTime();
          
      }
    
        public Calendar getData() {
            return data;
        }
    
        public void setData(Calendar data) {
            this.data = data;
        }
    
    
        public List<Spot> getListaSpots() {
            return listaSpots;
        }
    
        public void setListaSpots(List<Spot> listaSpots) {
            this.listaSpots = listaSpots;
        }
        
        public void addListaSpots (Spot spot) {
            this.listaSpots.add(spot);
        }
        
        public String getStringData () {
            Date d = data.getTime();
            DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
            return df.format(d);
            
        }
        
        public int getAscoltoMin() {
            return ascoltoMin;
        }
        
        public int getAscoltoMax() {
            return ascoltoMax;
        }
        
        
    
        public String getAscoltoMinimo() {
            return Integer.toString(ascoltoMin);
        }
    
      
        public void setAscoltoMin(int ascoltoMin) {
            this.ascoltoMin = ascoltoMin;
        }
    
        public String getAscoltoMassimo() {
            return Integer.toString(ascoltoMax);
        }
    
      
        public void setAscoltoMax(int ascoltoMax) {
            this.ascoltoMax = ascoltoMax;
        }
        
        public int media () {
            int media = 0;
            return media = (ascoltoMin+ascoltoMax)/2;
        }
        
        public String getStringAscoltoMin() {
            return Integer.toString(ascoltoMin);
        }
        
          public String getStringAscoltoMax() {
            return Integer.toString(ascoltoMax);
        }
        
        @Override
        public String toString() { // Serve a dare un "nome" alla classe
            Date d = data.getTime();
            DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
            return df.format(d);
        }
        
        public String toStringPuntata() { // Stampa tutti di dati della Classe
            String stringa ="";
            stringa += " Data  : " + this.toString() + "\n";
            stringa += " Ascolto Minimo   : " + this.getAscoltoMinimo() + "\n";
            stringa += " Ascolto Massimo  : " + this.getAscoltoMassimo() + "\n";
            return stringa;
        }
        
    
        public int compareTo(Puntata altraPuntata) { // serve ad inserire le date in or
            return getData().compareTo(altraPuntata.getData());
        }
    }
    
    //AzioneAggiungi
    
    public class AzioneAggiungi extends AbstractAction {
    
    private Controllo controllo;
    
    private Log logger = LogFactory.getLog(AzioneAggiungi.class);
        
        public AzioneAggiungi(Controllo controllo) {
           this.controllo = controllo;
           this.putValue(NAME,"Aggiungi");
           this.putValue(SHORT_DESCRIPTION,"Aggiungi Spot");
           this.putValue(MNEMONIC_KEY,KeyEvent.VK_U);
           this.putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("alt U"));
        }
    
        public void actionPerformed(ActionEvent e) {
            logger.info("\n eseguo l'azione\n "+ "Classe:" +" " + this.getClass().getName() +"\n");
            PannelloPrincipale pp = (PannelloPrincipale) this.controllo.getVista().getSottoViste(Costanti.PANNELLO_PRINCIPALE);
            FinestraAggiungi fa = (FinestraAggiungi) this.controllo.getVista().getSottoViste(Costanti.FINESTRA_AGGIUNGI);
            Carosello carosello = (Carosello) this.controllo.getModello().getBean(Costanti.CAROSELLO);
            
            String nomeAzienda = fa.getTextNomeAzienda().getText();
            String partitaIva = fa.getTextPartitaIva().getText();
            String telefono = fa.getTextTelefono().getText();
            boolean ita = fa.selezionaItaliana();
            
            String nomeSpot = fa.getTextNomeSpot().getText();
            String sottotitolo = fa.getTextSottotitolo().getText();
            String settore = fa.getTextSettore().getText();
            String percorsoFile = fa.getTextPercorsoFile().getText();
            String puntateMancanti = (String) fa.getTextPuntateMancanti().getSelectedItem();
            
            String stringaMinimo = (String) fa.getTextAscoltoMin().getText();
            String stringaMassimo =(String) fa.getTextAscoltoMax().getText();
            
            int giorno =  fa.getComboGiorno().getSelectedIndex();
            int mese = fa.getComboMese().getSelectedIndex();
            int anno = fa.getComboAnno().getSelectedIndex();
          
            Calendar data = new GregorianCalendar(anno+2000,mese,giorno+1);
            String erroriAzienda = this.convalidaAzienda(nomeAzienda, partitaIva, telefono);
            String erroriSpot = this.convalidaSpot(nomeSpot, sottotitolo,settore, percorsoFile);
            String erroriPuntata = this.convalidaPuntata(stringaMinimo, stringaMassimo);
            String erroriData = this.convalidaData(giorno, mese, anno);
            
            if(erroriAzienda.equals("")) {
                if (erroriSpot.equals("")) {
                    if(erroriPuntata.equals("")) {
                        if(erroriData.equals("")) {
                            int inserisciMin = Integer.parseInt(stringaMinimo);
                            int inserisciMax = Integer.parseInt(stringaMassimo);
                                Puntata puntata = new Puntata(data,inserisciMin,inserisciMax); 
                                Azienda azienda = new Azienda(nomeAzienda, partitaIva, telefono, ita);
                                Spot spot = new Spot(nomeSpot, sottotitolo, percorsoFile,settore, puntateMancanti, azienda, puntata);
                                carosello.addListaAziende(azienda);
                                carosello.addPuntata(puntata);
                                carosello.addListaSpots(spot);
                                carosello.ordinaPuntate();
                                pp.caricaComboBox();
                                fa.ripulisciTotale();
                                fa.nascondiFinestra();
                                fa.finestraInfoFinestra("Inserito Nuovo spot\n" +" " + azienda.toStringAzienda()+spot.toStringSpot()+puntata.toStringPuntata());
                                logger.info("\nNuovo spot Inserito\n");
                        }else{
                            fa.finestraErroriFinestra(erroriData);
                            logger.error("\nErrore inserimento Data\n");
                        }
                    }else{
                        fa.finestraErroriFinestra(erroriPuntata);
                        logger.info("\n Errore inserimento Puntata\n");
                    }
                }else{
                    fa.finestraErroriFinestra(erroriSpot);
                    logger.info("\n Errore inserimento Spot\n");
                }
            }else{
                fa.finestraErroriFinestra(erroriAzienda);
                logger.info("\n Errore inserimento Azienda\n");
            }
            
        }
    
        private String convalidaAzienda(String nomeAzienda, String partitaIva, String telefono) {
            String errori ="";
            int tel = 0;
            if ( nomeAzienda.equals("") ) {
                errori += "\n il campo Azienda non può essere vuoto ";
            }
            if ( partitaIva.equals("") ) {
                errori += "\n il campo Partita Iva non può essere vuoto ";
            }
            if (telefono.equals("") ) {
                errori += "\n il campo Telefono non può essere vuoto";
                } else {
                try {
                    tel = Integer.parseInt(telefono);
                } catch ( NumberFormatException nfe ) {
                    errori += "\n Il campo Telefono deve essere obbligatoriamente un numero";
                }
            }
            return errori;
        }
        
        private String convalidaSpot(String nomeSpot, String sottotitolo, String settore, String percorsoFile) {
            String errori ="";
            if ( nomeSpot.equals("") ) {
                errori += "\n il campo Spot non può essere vuoto ";
            }
            if ( sottotitolo.equals("") ) {
                errori += "\n il campo Descrizione non può essere vuoto ";
            }
            if (settore.equals("") ) {
                errori += "\n il campo Settore non può essere vuoto";
            }
            if (percorsoFile.equals("")) {
                errori += "\n il campo Percorso File non può essere vuoto";
            }
            
            return errori;
        
        }
    
        private String convalidaPuntata(String stringaMinimo, String stringaMassimo) {
            String errori ="";       
            int minimo = 0;
            int massimo = 0;
            
            if ( stringaMinimo.equals("")) {
                errori += "\n Il campo Ascolto Minimo non può essere vuoto ";
            } else {
                try {
                    minimo = Integer.parseInt(stringaMinimo);
                } catch ( NumberFormatException nfe ) {
                    errori += "\n Il campo Asconto Minimo deve essere obbligatoriamente un numero";
                }
            }
            if ( stringaMassimo.equals("")) {
                errori += "\n Il campo Asconto Massimo non può essere vuoto ";
            } else {
                try {
                    massimo = Integer.parseInt(stringaMassimo);
                } catch ( NumberFormatException nfe ) {
                    errori += "\n Il campo Ascolto Massimo deve essere obbligatoriamente un numero ";
                }
            }
            if (minimo>massimo) {
                errori += "\n Il campo Ascolto Minimo non può essere Minore di Ascolto Massimo.";
             
            }
            return errori;
        }
        
        
    
        private String convalidaData(int giorno, int mese, int anno) {
            FinestraAggiungi fa = (FinestraAggiungi) this.controllo.getVista().getSottoViste(Costanti.FINESTRA_AGGIUNGI);
            String errori = "";
            if ( errori.equals("") ) {
                GregorianCalendar data = new GregorianCalendar(anno+2000, mese, giorno+1 );
                data.setLenient(false);
                try {
                    data.getTime();
                } catch ( IllegalArgumentException iae ) {
                    errori += " La data inserita è scorretta ";
                    fa.ripulisciData();
                }
            }
            return errori;
        }
            
    }
    
    
    il mio approccio è stato questo scrivere, in carosello, un metodo booleano che verificasse la presenza di una data in questo modo
    
    public boolean verificaPuntata(Calendar data) {
            for(Puntata puntata : listaPuntate) {
                if(puntata.getData() == data) {
                    return true;
                }
            }
            return false;
        }
     }   
    
    poi chiamarlo nell'azione aggiungi dopo aver creato la data in questo modo
    
    .................
    
    boolena verifica = carosello.verificadata(data)
    
    if(verifica == true) {
        fa.finestraErrore("\nAttenzione Data Già Presente\n"+ "\n Inserire Nuova data"\n);
    }else{
        ........................... // il codice continua normalmente
    
Devi accedere o registrarti per scrivere nel forum
15 risposte