From 02bdfef647b3aa4e21207cdb3811afdb49383515 Mon Sep 17 00:00:00 2001
From: Julio Arrieta <julioarrieta23@gmail.com>
Date: Sun, 8 Sep 2019 11:08:04 -0300
Subject: [PATCH] Alta video terminado! listo para probar

---
 .../src/Presentacion/Video/frmAltaVideo.form  |  35 ++--
 .../src/Presentacion/Video/frmAltaVideo.java  | 154 +++++++++---------
 2 files changed, 91 insertions(+), 98 deletions(-)

diff --git a/UyTube_aplicacion/src/Presentacion/Video/frmAltaVideo.form b/UyTube_aplicacion/src/Presentacion/Video/frmAltaVideo.form
index 355438b..b5268cf 100644
--- a/UyTube_aplicacion/src/Presentacion/Video/frmAltaVideo.form
+++ b/UyTube_aplicacion/src/Presentacion/Video/frmAltaVideo.form
@@ -28,25 +28,18 @@
   <Layout>
     <DimensionLayout dim="0">
       <Group type="103" groupAlignment="0" attributes="0">
-          <EmptySpace min="0" pref="980" max="32767" attributes="0"/>
-          <Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
-              <Group type="102" attributes="0">
-                  <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                  <Component id="jPanel14" min="-2" pref="980" max="-2" attributes="0"/>
-                  <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-              </Group>
+          <Group type="102" alignment="1" attributes="0">
+              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
+              <Component id="jPanel14" min="-2" pref="980" max="-2" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
     <DimensionLayout dim="1">
       <Group type="103" groupAlignment="0" attributes="0">
-          <EmptySpace min="0" pref="550" max="32767" attributes="0"/>
-          <Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
-              <Group type="102" attributes="0">
-                  <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                  <Component id="jPanel14" min="-2" pref="550" max="-2" attributes="0"/>
-                  <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-              </Group>
+          <Group type="102" alignment="1" attributes="0">
+              <EmptySpace max="32767" attributes="0"/>
+              <Component id="jPanel14" min="-2" pref="550" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
@@ -280,7 +273,7 @@
             </Property>
           </Properties>
           <Events>
-            <EventHandler event="focusGained" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="spSegundosFocusGained"/>
+            <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="spSegundosStateChanged"/>
           </Events>
           <Constraints>
             <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
@@ -288,24 +281,30 @@
             </Constraint>
           </Constraints>
         </Component>
-        <Component class="javax.swing.JSpinner" name="spHora">
+        <Component class="javax.swing.JSpinner" name="spHoras">
           <Properties>
             <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
               <SpinnerModel initial="0" maximum="5" minimum="0" numberType="java.lang.Integer" stepSize="1" type="number"/>
             </Property>
           </Properties>
+          <Events>
+            <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="spHorasStateChanged"/>
+          </Events>
           <Constraints>
             <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
               <AbsoluteConstraints x="420" y="120" width="60" height="-1"/>
             </Constraint>
           </Constraints>
         </Component>
-        <Component class="javax.swing.JSpinner" name="spMinuto">
+        <Component class="javax.swing.JSpinner" name="spMinutos">
           <Properties>
             <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
               <SpinnerModel initial="0" maximum="60" minimum="0" numberType="java.lang.Integer" stepSize="1" type="number"/>
             </Property>
           </Properties>
+          <Events>
+            <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="spMinutosStateChanged"/>
+          </Events>
           <Constraints>
             <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
               <AbsoluteConstraints x="490" y="120" width="60" height="-1"/>
@@ -396,7 +395,7 @@
         <Component class="javax.swing.JLabel" name="lbMsjDuracion">
           <Constraints>
             <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="420" y="140" width="200" height="15"/>
+              <AbsoluteConstraints x="340" y="140" width="330" height="15"/>
             </Constraint>
           </Constraints>
         </Component>
diff --git a/UyTube_aplicacion/src/Presentacion/Video/frmAltaVideo.java b/UyTube_aplicacion/src/Presentacion/Video/frmAltaVideo.java
index 6464290..335c824 100644
--- a/UyTube_aplicacion/src/Presentacion/Video/frmAltaVideo.java
+++ b/UyTube_aplicacion/src/Presentacion/Video/frmAltaVideo.java
@@ -3,20 +3,15 @@ package Presentacion.Video;
 
 import Logica.Clases.Fabrica;
 import Logica.Clases.Video;
-import Logica.DataType.DtCategoria;
-import Logica.DataType.DtUsuario;
 import Logica.DataType.DtVideo;
 import Logica.Enumerados.Privacidad;
 import Logica.Interfaces.IAdmin;
 import java.awt.Color;
-//
 import java.sql.Time;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
-import java.util.Iterator;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.swing.BorderFactory;
@@ -58,23 +53,23 @@ public class frmAltaVideo extends javax.swing.JDialog {
         descripcion = "";
     }
     
-    private boolean validarDuracion(int _segundos){
-        if (_segundos <= 0) {
-            lbMsjDescripcion.setText(" La duración no puede ser cero");
-            lbMsjDuracion.setOpaque(true);
-            lbMsjDuracion.setForeground(Color.WHITE);
-            lbMsjDuracion.setBackground(colorError);              
-            return false;
+    private boolean validarDuracion(int s, int m, int h){
+        if ( s > 0 || m > 0 || h > 0) {             
+            return true;
         }
-        return true;
+        lbMsjDuracion.setOpaque(true);
+        lbMsjDuracion.setForeground(Color.WHITE);
+        lbMsjDuracion.setBackground(colorError);
+        lbMsjDuracion.setText(" El campo duración es obligatorio");
+        return false;                   
     }
     
     private void limpiarCampos(){
         txtNombre.setText("");
         txtDescripcion.setText("");
         txtUrl.setText("");
-        spHora.setValue(0);
-        spMinuto.setValue(0);
+        spHoras.setValue(0);
+        spMinutos.setValue(0);
         spSegundos.setValue(0);
         usrSeleccionado="";
         categoria = "";
@@ -109,10 +104,10 @@ public class frmAltaVideo extends javax.swing.JDialog {
         return false;        
     }
     
-    private boolean validarTxt(JTextField txt, int largo,JLabel lb,String nombreCampo){
+    private boolean validarTxt(JTextField txt, int max,JLabel lb,String nombreCampo){
         try{
-            if(txt.getText().length() > largo ){
-                lb.setText(" El campo supera los "+largo+" caracteres");
+            if(txt.getText().length() > max ){
+                lb.setText(" El campo supera los "+max+" caracteres");
                 cambiarColoresError(txt, lb);
                 return false;
             }
@@ -121,12 +116,7 @@ public class frmAltaVideo extends javax.swing.JDialog {
                 cambiarColoresError(txt, lb);
                 return false;
             }            
-            else if(nombreCampo.equals("Nombre") ){
-//                if(!validarNombres(nombre)){
-//                    lb.setText(" El nombre \"" + nombre + "\" no es válido");
-//                    cambiarColoresError(txt, lb);
-//                    return false;
-//                }
+            else if(nombreCampo.equals("Nombre") ){                
                 for (DtVideo video : sys.listarVideosDeUsuario()) {
                     if(video.getNombre().equals(nombre)){
                         lb.setText(" El nombre del video ya existe");
@@ -185,8 +175,8 @@ public class frmAltaVideo extends javax.swing.JDialog {
         btnAceptar = new javax.swing.JButton();
         btnCancelar = new javax.swing.JButton();
         spSegundos = new javax.swing.JSpinner();
-        spHora = new javax.swing.JSpinner();
-        spMinuto = new javax.swing.JSpinner();
+        spHoras = new javax.swing.JSpinner();
+        spMinutos = new javax.swing.JSpinner();
         jLabel135 = new javax.swing.JLabel();
         jLabel136 = new javax.swing.JLabel();
         jLabel137 = new javax.swing.JLabel();
@@ -294,18 +284,28 @@ public class frmAltaVideo extends javax.swing.JDialog {
         jPanel14.add(btnCancelar, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 463, 290, 70));
 
         spSegundos.setModel(new javax.swing.SpinnerNumberModel(0, 0, 60, 1));
-        spSegundos.addFocusListener(new java.awt.event.FocusAdapter() {
-            public void focusGained(java.awt.event.FocusEvent evt) {
-                spSegundosFocusGained(evt);
+        spSegundos.addChangeListener(new javax.swing.event.ChangeListener() {
+            public void stateChanged(javax.swing.event.ChangeEvent evt) {
+                spSegundosStateChanged(evt);
             }
         });
         jPanel14.add(spSegundos, new org.netbeans.lib.awtextra.AbsoluteConstraints(560, 120, 60, -1));
 
-        spHora.setModel(new javax.swing.SpinnerNumberModel(0, 0, 5, 1));
-        jPanel14.add(spHora, new org.netbeans.lib.awtextra.AbsoluteConstraints(420, 120, 60, -1));
+        spHoras.setModel(new javax.swing.SpinnerNumberModel(0, 0, 5, 1));
+        spHoras.addChangeListener(new javax.swing.event.ChangeListener() {
+            public void stateChanged(javax.swing.event.ChangeEvent evt) {
+                spHorasStateChanged(evt);
+            }
+        });
+        jPanel14.add(spHoras, new org.netbeans.lib.awtextra.AbsoluteConstraints(420, 120, 60, -1));
 
-        spMinuto.setModel(new javax.swing.SpinnerNumberModel(0, 0, 60, 1));
-        jPanel14.add(spMinuto, new org.netbeans.lib.awtextra.AbsoluteConstraints(490, 120, 60, -1));
+        spMinutos.setModel(new javax.swing.SpinnerNumberModel(0, 0, 60, 1));
+        spMinutos.addChangeListener(new javax.swing.event.ChangeListener() {
+            public void stateChanged(javax.swing.event.ChangeEvent evt) {
+                spMinutosStateChanged(evt);
+            }
+        });
+        jPanel14.add(spMinutos, new org.netbeans.lib.awtextra.AbsoluteConstraints(490, 120, 60, -1));
 
         jLabel135.setText("Duración:");
         jPanel14.add(jLabel135, new org.netbeans.lib.awtextra.AbsoluteConstraints(340, 100, -1, -1));
@@ -326,27 +326,22 @@ public class frmAltaVideo extends javax.swing.JDialog {
         jPanel14.add(lbMsjUrl, new org.netbeans.lib.awtextra.AbsoluteConstraints(340, 200, 330, 15));
         jPanel14.add(lbMsjFecha, new org.netbeans.lib.awtextra.AbsoluteConstraints(340, 430, 250, 15));
         jPanel14.add(lbMsjDescripcion, new org.netbeans.lib.awtextra.AbsoluteConstraints(340, 370, 330, 15));
-        jPanel14.add(lbMsjDuracion, new org.netbeans.lib.awtextra.AbsoluteConstraints(420, 140, 200, 15));
+        jPanel14.add(lbMsjDuracion, new org.netbeans.lib.awtextra.AbsoluteConstraints(340, 140, 330, 15));
 
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
         getContentPane().setLayout(layout);
         layout.setHorizontalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 980, Short.MAX_VALUE)
-            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                .addGroup(layout.createSequentialGroup()
-                    .addGap(0, 0, Short.MAX_VALUE)
-                    .addComponent(jPanel14, javax.swing.GroupLayout.PREFERRED_SIZE, 980, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addGap(0, 0, Short.MAX_VALUE)))
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addGap(0, 0, Short.MAX_VALUE)
+                .addComponent(jPanel14, javax.swing.GroupLayout.PREFERRED_SIZE, 980, javax.swing.GroupLayout.PREFERRED_SIZE))
         );
         layout.setVerticalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 550, Short.MAX_VALUE)
-            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                .addGroup(layout.createSequentialGroup()
-                    .addGap(0, 0, Short.MAX_VALUE)
-                    .addComponent(jPanel14, javax.swing.GroupLayout.PREFERRED_SIZE, 550, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addGap(0, 0, Short.MAX_VALUE)))
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(jPanel14, javax.swing.GroupLayout.PREFERRED_SIZE, 550, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap())
         );
 
         pack();
@@ -359,8 +354,8 @@ public class frmAltaVideo extends javax.swing.JDialog {
         nombre = txtNombre.getText().trim();//Obtiene el nombre y quita los espacios de los extremos
         descripcion = txtDescripcion.getText().trim();//Obtiene la descripcion y quita los espacios de los extremos
         url = txtUrl.getText().trim();//Obtiene la url y quita los espacios de los extremos
-        int horas = (Integer)spHora.getValue();
-        int minutos = (Integer)spMinuto.getValue();
+        int horas = (Integer)spHoras.getValue();
+        int minutos = (Integer)spMinutos.getValue();
         int segundos = (Integer)spSegundos.getValue();
         Time duracion = new Time(horas, minutos, segundos);
         java.sql.Date fecha = null;
@@ -368,11 +363,10 @@ public class frmAltaVideo extends javax.swing.JDialog {
         if( jDateChooser1.getDate() != null){
             java.util.Date utilDate = jDateChooser1.getDate();//Obtiene la fecha del JDateChooser en formato Date        
             fecha = new java.sql.Date(utilDate.getTime());//Lo combierte al tipo Date sql
-        }
-        
+        }        
         //Arrays para validaciones campos de texto   
         JTextField v1[] = {txtNombre,txtUrl}; //campos a validar
-        int[] v2= {30,2083}; //Largos de los campos
+        int[] v2= {30,2083}; //Largos maximos de los campos Nombre y URL
         JLabel[] v3= { lbMsjNombre, lbMsjUrl}; //labels para mostrar mensajes       
         String[] v4 ={"Nombre","URL","Descricion"};//Nombre del campo
         boolean[] v5 ={false,false,false};//Estado inicial de las validaciones, cada elemento es una validacion de un campo especifico
@@ -381,7 +375,7 @@ public class frmAltaVideo extends javax.swing.JDialog {
                 v5[i] = true;
             }
         }         
-        if(validarDuracion(segundos)){
+        if(validarDuracion(segundos, minutos, horas)){
            v5[2] = true;
         }        
         if (fecha == null) {
@@ -393,19 +387,12 @@ public class frmAltaVideo extends javax.swing.JDialog {
         }
         if(v5[0]==false|| v5[1]==false || v5[2]==false){
             return;            
-        }
-
-        
+        }        
         try {
             DtVideo dtVideo = new DtVideo(Video.getNuevoId(), nombre, descripcion, duracion, fecha, url, Privacidad.PRIVADO, categoria, 0, 0);
             int opcion=JOptionPane.showConfirmDialog(null, 
-                        "Desea guardar el video con los siguientes datos?\n"+
-                            "Usuario: "+usrSeleccionado+"\n"+
-                            "Nombre: "+nombre+"\n"+
-                            "Descripción: "+descripcion+"\n"+
-                            "Duración: "+duracion+"\n"+
-                            "fecha de publicacón: "+fecha
-                        , "Confirmar alt de Video", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
+                        "¿Desea guardar el video \""+nombre+"\"?"
+                        , "Confirmar alta de Video", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
             if(opcion==0){
                 System.out.println("nomre: "+nombre+" descripcion: "+descripcion+" duracion: "+duracion+" fecha: "+ fecha+" url: "+url+" privacidad: "+Privacidad.PRIVADO+" categoria: "+categoria);
                 sys.altaVideo(dtVideo);
@@ -430,17 +417,6 @@ public class frmAltaVideo extends javax.swing.JDialog {
         Calendar c = new GregorianCalendar();//Objeto de tipo calendario con la fecha actual
         java.util.Date fechaActual = new Date(c.get(Calendar.YEAR)-1900,c.get(Calendar.MONTH),c.get(Calendar.DATE));//Obtiene la fecha actual del calendario     
         jDateChooser1.setDate(fechaActual);//Setea el JDateChooser con la fecha actual
-        //Se obtienen los valores de la fecha actual para su validacion
-//        anioActual = c.get(Calendar.YEAR);
-//        mesActual = c.get(Calendar.MONTH);
-//        diaActual = c.get(Calendar.DATE);
-//        System.out.println("dia actual"+diaActual);
-//        Calendar max = Calendar.getInstance();    
-//        max.set(Calendar.YEAR,anioActual);    
-//        max.set(Calendar.MONTH,mesActual);    
-//        max.set(Calendar.DATE,diaActual);    
-//        jDateChooser1.setMaxSelectableDate(max.getTime()); 
-   //     jDateChooser1.setMaxSelectableDate(fechaActual.getTime());
         try {
             // Obtengo todos los nickname y los cargo en el listDuenioVideo(Lista de dueños de videos)
             limpiarLstCategorias();
@@ -519,11 +495,29 @@ public class frmAltaVideo extends javax.swing.JDialog {
         lbMsjUrl.setOpaque(false); 
     }//GEN-LAST:event_txtUrlFocusGained
 
-    private void spSegundosFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_spSegundosFocusGained
-        // TODO add your handling code here:
-        lbMsjDuracion.setText("");
-        lbMsjDuracion.setOpaque(false);
-    }//GEN-LAST:event_spSegundosFocusGained
+    private void spSegundosStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spSegundosStateChanged
+        // Al cambiar el valor verifica y restaura los valores
+        if(validarDuracion((Integer)spSegundos.getValue(),(Integer)spMinutos.getValue(),(Integer)spHoras.getValue())){
+            lbMsjDuracion.setText("");
+            lbMsjDuracion.setOpaque(false);
+        }
+    }//GEN-LAST:event_spSegundosStateChanged
+
+    private void spMinutosStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spMinutosStateChanged
+        // Al cambiar el valor verifica y restaura los valores
+        if(validarDuracion((Integer)spSegundos.getValue(),(Integer)spMinutos.getValue(),(Integer)spHoras.getValue())){
+            lbMsjDuracion.setText("");
+            lbMsjDuracion.setOpaque(false);
+        }
+    }//GEN-LAST:event_spMinutosStateChanged
+
+    private void spHorasStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spHorasStateChanged
+        // Al cambiar el valor verifica y restaura los valores
+        if(validarDuracion((Integer)spSegundos.getValue(),(Integer)spMinutos.getValue(),(Integer)spHoras.getValue())){
+            lbMsjDuracion.setText("");
+            lbMsjDuracion.setOpaque(false);
+        }
+    }//GEN-LAST:event_spHorasStateChanged
     
     
     // Variables declaration - do not modify//GEN-BEGIN:variables
@@ -552,8 +546,8 @@ public class frmAltaVideo extends javax.swing.JDialog {
     private javax.swing.JLabel lbMsjUrl;
     private javax.swing.JList<String> lstAsignarCategoria;
     private javax.swing.JList<String> lstDuenioVideo;
-    private javax.swing.JSpinner spHora;
-    private javax.swing.JSpinner spMinuto;
+    private javax.swing.JSpinner spHoras;
+    private javax.swing.JSpinner spMinutos;
     private javax.swing.JSpinner spSegundos;
     private javax.swing.JTextArea txtDescripcion;
     private javax.swing.JTextField txtNombre;
-- 
GitLab