/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package administrador;

import administrador.datos.*;
import java.util.*;

public class FormSelectorColasVisibles extends javax.swing.JDialog {

   private ColeccionRegistros colas;
   PanelServidor panel;
   ListaColasFavoritas listaColas;
   String nombre;

   public FormSelectorColasVisibles(FormPrincipal principal, String nombrePanel) {
      super(principal, true);
      initComponents();
      panel = (PanelServidor) principal.panelSeleccionado;
      listaColas = panel.listaColas;
      nombre = nombrePanel;
   }

   public void cargarDatos(ColeccionRegistros colas) {
      int n = colas.numTotal();
      String[] nombresColas = new String[n];
      int i = 0;
      for (Iterator it = colas.iteradorValores(); it.hasNext();) {
         RegistroCola cola = (RegistroCola) it.next();
         nombresColas[i++] = cola.getId() + " " + cola.getDescripcion();
      }
      lista.setListData(nombresColas);
      this.colas = colas;
      cargar();
   }

   void pulsadoAceptar() {
      int i = 0;
      for (Iterator it = colas.iteradorValores(); it.hasNext();) {
         RegistroCola cola = (RegistroCola) it.next();
         cola.setVisible(lista.getChecked(i++));
      }
      guardar();
      setVisible(false);
   }

   void pulsadoCancelar() {
      setVisible(false);
   }

   void guardar() {
      try {
         int i = 0;
         ArrayList<String> arrColas = new ArrayList<>();
         for (Iterator it = colas.iteradorValores(); it.hasNext();) {
            RegistroCola cola = (RegistroCola) it.next();
            if (lista.getChecked(i++)) {
               arrColas.add(cola.getId());
            }
         }
         listaColas.guardar(nombre, arrColas);
      } catch (Exception exc) {
         exc.printStackTrace();
      }
   }

   void activarTodos() {
      int i = 0;
      for (Iterator it = colas.iteradorValores(); it.hasNext();) {
         RegistroCola cola = (RegistroCola) it.next();
         lista.setChecked(i++, !cola.estaDesconectado());
      }
   }

   void cargar() {
      try {
         if (listaColas.noExiste) {
            activarTodos();
         } else {
            HashMap favoritas = listaColas.colasServidor(nombre);
            if (favoritas == null) {
               activarTodos();
            } else {
                int i = 0;
                for (Iterator it = colas.iteradorValores(); it.hasNext();) {
                   RegistroCola cola = (RegistroCola) it.next();
                   lista.setChecked(i++, favoritas.containsKey(cola.getId()));
                }
            }
         }
      } catch (Exception exc) {
         activarTodos();
      }
   }

   void pulsadoTodas(boolean marcar) {
      int n = lista.getModel().getSize();
      for (int i = 0; i < n; i++) {
         lista.setChecked(i, marcar);
      }
   }

   /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        lista = new javax.swing.CheckBoxList();
        btAceptar = new javax.swing.JButton();
        btCancelar = new javax.swing.JButton();
        btTodas = new javax.swing.JButton();
        btNinguna = new javax.swing.JButton();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Selecci\u00f3n de colas mostrables");
        lista.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        jScrollPane1.setViewportView(lista);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(8, 8, 381, 348);

        btAceptar.setText("Aceptar");
        btAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btAceptarActionPerformed(evt);
            }
        });

        getContentPane().add(btAceptar);
        btAceptar.setBounds(20, 368, 123, 41);

        btCancelar.setText("Cancelar");
        btCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btCancelarActionPerformed(evt);
            }
        });

        getContentPane().add(btCancelar);
        btCancelar.setBounds(160, 368, 126, 41);

        btTodas.setText("Todas");
        btTodas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btTodasActionPerformed(evt);
            }
        });

        getContentPane().add(btTodas);
        btTodas.setBounds(296, 368, 92, 20);

        btNinguna.setText("Ninguna");
        btNinguna.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btNingunaActionPerformed(evt);
            }
        });

        getContentPane().add(btNinguna);
        btNinguna.setBounds(296, 392, 92, 20);

        pack();
    }// </editor-fold>//GEN-END:initComponents
    private void btNingunaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btNingunaActionPerformed
       pulsadoTodas(false);
    }//GEN-LAST:event_btNingunaActionPerformed

    private void btTodasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btTodasActionPerformed
       pulsadoTodas(true);
    }//GEN-LAST:event_btTodasActionPerformed

    private void btCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelarActionPerformed
       pulsadoCancelar();
    }//GEN-LAST:event_btCancelarActionPerformed

    private void btAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAceptarActionPerformed
       pulsadoAceptar();
    }//GEN-LAST:event_btAceptarActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btAceptar;
    private javax.swing.JButton btCancelar;
    private javax.swing.JButton btNinguna;
    private javax.swing.JButton btTodas;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.CheckBoxList lista;
    // End of variables declaration//GEN-END:variables
}
