package interfaz;
import javax.swing.JPanel;

import java.awt.Component;
import java.awt.Frame;
import java.awt.BorderLayout;
import java.awt.Toolkit;

import javax.swing.JDialog;
import java.awt.GridBagLayout;
import javax.swing.JScrollPane;
import java.awt.Dimension;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;

import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JButton;
import javax.swing.SwingConstants;

import negocio.BloqueConstructivo;
import negocio.ComponenteBloque;
import negocio.ComponenteInstancia;
import negocio.ContenidoLista;
import negocio.Instancia;
import negocio.Plantilla;
import negocio.Proyecto;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.query.JRHibernateQueryExecuterFactory;
import net.sf.jasperreports.view.JasperViewer;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.exception.DataException;

import com.toedter.calendar.JDateChooser;

import persistencia.UtilidadHibernate;
import sun.awt.DefaultMouseInfoPeer;

import java.awt.Insets;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.zip.DataFormatException;

import javax.swing.BorderFactory;
import javax.swing.event.ListDataListener;
import javax.swing.text.DateFormatter;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.Serializable;
import java.awt.FlowLayout;
import java.awt.SystemColor;


public class RellenarInstancia extends JDialog {

	private static final long serialVersionUID = 1L;

	private JPanel jContentPane = null;

	private JScrollPane jScrollPane = null;

	public JPanel jPanel1 = null;
 
	private JLabel jLabel2 = null;
	
	private JList jList = null;
	
	private JTextField jTextField2 = null;
	
	private Integer x=0;  //  @jve:decl-index=0:
	private Integer y=0;  //  @jve:decl-index=0:

	private JPanel jPanel = null;

	private ArrayList<ComponenteBloque> listaComponentes = new ArrayList<ComponenteBloque>();  //  @jve:decl-index=0:
	
	private ArrayList<Object> listaTipos = new ArrayList<Object>();  //  @jve:decl-index=0:

	private MantenimientoBloque padreMantenimientoBloque;
	
	public MantenimientoInstancia padreMantenimientoInstancia;
	
	private Proyecto proyecto_seleccionado;

	public DefaultListModel modelolista = new DefaultListModel();
	
	public DefaultListModel modeloListaAñadida = new DefaultListModel();

	private JList lista_copia = new JList();
	
	private DefaultListModel modelo_lista_copia = new DefaultListModel();

	private JButton jButton = null;

	private JButton jButton1 = null;
	
	public String calculo_portafolio = null;
	
	public boolean portafolio_rellenado=false;
	
	private boolean desdePrincipal = false;
	
	private BloqueConstructivo padreBloque;
	
	private Instancia padreInstancia;  //  @jve:decl-index=0:
	
	private boolean desdeModoGuiado = false;
	
	private JLabel etiquetaPadre;
	
	private Principal padrePrincipal;
	
	int puntuacion_modelo_madurez;
	
	float total_media_parcial_modelo_madurez = 0;
	
	float total_media_global_modelo_madurez = 0;
	
	boolean flag_media_parcial = false;
	
	boolean flag_media_global = false;
	
	boolean flag_puntuacion = false;
	
	int num_instancias_con_media_parcial_modelo_madurez;
	
	boolean flag_no_existe_fecha_modelo_madurez = false;
	
	private String fecha_modelo_madurez;


	public RellenarInstancia(MantenimientoInstancia owner, MantenimientoBloque owner2) {
		super(owner);
		padreMantenimientoInstancia=owner;
		padreMantenimientoBloque=owner2;
		desdePrincipal=false;
		desdeModoGuiado=false;
		initialize();
	}
	
	public RellenarInstancia(MantenimientoInstancia owner, BloqueConstructivo owner2, Principal p) {
		super(owner);
		padreMantenimientoInstancia=owner;
		padreBloque=owner2;
		desdePrincipal=true;
		desdeModoGuiado=false;
		padrePrincipal=p;
		initialize();
	}
	
	public RellenarInstancia(Instancia owner, BloqueConstructivo owner2) {
		super();
		padreInstancia=owner;
		padreBloque=owner2;
		desdePrincipal=true;
		desdeModoGuiado=true;
		initialize();
	}
	
	public RellenarInstancia(Instancia owner, BloqueConstructivo owner2, JLabel e, Principal p) {
		super();
		padreInstancia=owner;
		padreBloque=owner2;
		padrePrincipal=p;
		desdePrincipal=true;
		desdeModoGuiado=true;
		etiquetaPadre=e;
		initialize();
	}
	
	
	
	public RellenarInstancia(JDialog owner) {
		super(owner);
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	
	private void CalculoMediaParcialModeloMadurez (Session session){
		
		boolean flag_existe_fecha = false;
		
		Transaction tx = session.beginTransaction();
		
		//Comprobar que existe el componente fecha
		List messages_fecha = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"' AND tipo = '7' order by id_bloque asc").list();
		if (messages_fecha.size()>0){
			for ( Iterator iter_fecha = messages_fecha.iterator(); iter_fecha.hasNext(); ) {
				ComponenteBloque componente_bloque_fecha = (ComponenteBloque) iter_fecha.next();
				
				List messages_instancia_fecha = session.createQuery("from ComponenteInstancia where id_componente_bloque = '"+componente_bloque_fecha.getIdComponenteBloque()+"' and id_instancia = '"+padreInstancia.getIdInstancia()+"'").list();
				for ( Iterator iter_instancia_fecha = messages_instancia_fecha.iterator(); iter_instancia_fecha.hasNext(); ) {
					ComponenteInstancia componente_instancia_fecha = (ComponenteInstancia) iter_instancia_fecha.next();
						
						if (componente_instancia_fecha.getFechaModeloMadurez()!=null){
							flag_existe_fecha = true;
						}
						else{
							//Ponemos a nulo el campo media parcial, ya que no está asociado a ninguna fecha
							List messages_tipo5 = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"' AND tipo = '5' order by id_bloque asc").list();
							for ( Iterator iter_tipo5 = messages_tipo5.iterator(); iter_tipo5.hasNext(); ) {
								ComponenteBloque componente_bloque_tipo5 = (ComponenteBloque) iter_tipo5.next();
								
								List messages_tipo5_instancia = session.createQuery("from ComponenteInstancia where id_componente_bloque = '"+componente_bloque_tipo5.getIdComponenteBloque()+"' and id_instancia = '"+padreInstancia.getIdInstancia()+"'").list();
								for ( Iterator iter_tipo5_instancia = messages_tipo5_instancia.iterator(); iter_tipo5_instancia.hasNext(); ) {
									ComponenteInstancia componente_instancia = (ComponenteInstancia) iter_tipo5_instancia.next();
									
									componente_instancia.setModeloMadurezMediaParcial(null);
									session.save(componente_instancia);
									tx.commit();
									break;
								}
								break;
							}
							if (padrePrincipal.idioma.equals("español"))
								JOptionPane.showMessageDialog(RellenarInstancia.this,"Debe rellenar el campo 'fecha Modelo de Madurez' (color verde) para calcular la media parcial.");
							else
								JOptionPane.showMessageDialog(RellenarInstancia.this,"You must fill the field 'date Maturity Model' (green colour) to calculate the partial average.");
						}
				}
			}
		}
		else{
			if (padrePrincipal.idioma.equals("español"))
				JOptionPane.showMessageDialog(RellenarInstancia.this,"Debes insertar un componente de tipo fecha Modelo de Madurez (color verde) para calcular las medias");
			else
				JOptionPane.showMessageDialog(RellenarInstancia.this,"You must insert a component of type date Maturity Model (colour green) to calculate the averages");
		}
		
		if (flag_existe_fecha){
			//Comprobar que existe el componente media parcial, si no existe, saltará el bucle
			List messages_tipo5 = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"' AND tipo = '5' order by id_bloque asc").list();
			for ( Iterator iter_tipo5 = messages_tipo5.iterator(); iter_tipo5.hasNext(); ) {
				ComponenteBloque componente_bloque_tipo5 = (ComponenteBloque) iter_tipo5.next();
				
				List messages_tipo5_instancia = session.createQuery("from ComponenteInstancia where id_componente_bloque = '"+componente_bloque_tipo5.getIdComponenteBloque()+"' and id_instancia = '"+padreInstancia.getIdInstancia()+"'").list();
				for ( Iterator iter_tipo5_instancia = messages_tipo5_instancia.iterator(); iter_tipo5_instancia.hasNext(); ) {
					ComponenteInstancia componente_instancia = (ComponenteInstancia) iter_tipo5_instancia.next();
					
					//Obtenemos el número de componentes de tipo Puntuación para el cálculo de la media
					List messages_ = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"' AND tipo = '4' order by id_bloque asc").list();
					Integer numero_componentes_tipo5 = messages_.size();
					
					Float total;
					if (numero_componentes_tipo5>0){
						total = (float) total_media_parcial_modelo_madurez / (float) numero_componentes_tipo5;
						
						componente_instancia.setModeloMadurezMediaParcial(total);
					}
					else{
						componente_instancia.setModeloMadurezMediaParcial(null);
					}
					
					componente_instancia.setFechaModeloMadurez(fecha_modelo_madurez);
					session.save(componente_instancia);
				}
				
			}
		tx.commit();
		}
		
	}
	
	private void CalculoMediaGlobalModeloMadurez (Session session, boolean flag_fecha, boolean flag_avisos){
		Transaction tx = session.beginTransaction();
		ComponenteInstancia componente_instancia = null;
		total_media_global_modelo_madurez = 0;
		num_instancias_con_media_parcial_modelo_madurez = 0;
		boolean flag_existe_fecha = false;
		ComponenteBloque componente_bloque_fecha = null;
		ComponenteInstancia componente_instancia_fecha = null;
		 
//		Comprobar que existe el componente fecha
		List messages_fecha = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"' AND tipo = '7' order by id_bloque asc").list();
		if (messages_fecha.size()>0){
			for ( Iterator iter_fecha = messages_fecha.iterator(); iter_fecha.hasNext(); ) {
				componente_bloque_fecha = (ComponenteBloque) iter_fecha.next();
				
				List messages_instancia_fecha = session.createQuery("from ComponenteInstancia where id_componente_bloque = '"+componente_bloque_fecha.getIdComponenteBloque()+"' and id_instancia = '"+padreInstancia.getIdInstancia()+"'").list();
				for ( Iterator iter_instancia_fecha = messages_instancia_fecha.iterator(); iter_instancia_fecha.hasNext(); ) {
					componente_instancia_fecha = (ComponenteInstancia) iter_instancia_fecha.next();
						
						if (componente_instancia_fecha.getFechaModeloMadurez()!=null){
							flag_existe_fecha = true;
						}
						else {
							//Ponemos a nulo el campo media global, ya que no está asociado a ninguna fecha
							List messages_tipo6 = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"' AND tipo = '6' order by id_bloque asc").list();
							for ( Iterator iter_tipo6 = messages_tipo6.iterator(); iter_tipo6.hasNext(); ) {
								ComponenteBloque componente_bloque_tipo6 = (ComponenteBloque) iter_tipo6.next();
								
								List messages_tipo6_instancia = session.createQuery("from ComponenteInstancia where id_componente_bloque = '"+componente_bloque_tipo6.getIdComponenteBloque()+"' and id_instancia = '"+padreInstancia.getIdInstancia()+"'").list();
								for ( Iterator iter_tipo6_instancia = messages_tipo6_instancia.iterator(); iter_tipo6_instancia.hasNext(); ) {
									ComponenteInstancia componente_instancia_ = (ComponenteInstancia) iter_tipo6_instancia.next();
									
									componente_instancia_.setModeloMadurezMediaGlobal(null);
									session.save(componente_instancia_);
									tx.commit();
									break;
								}
								break;
							}
							if (flag_avisos){
								if (padrePrincipal.idioma.equals("español"))
									JOptionPane.showMessageDialog(RellenarInstancia.this,"Debe rellenar el campo 'fecha Modelo de Madurez' (color verde) para calcular la media global.");
								else
									JOptionPane.showMessageDialog(RellenarInstancia.this,"You must fill the field 'date Maturity Model' (green colour) to calculate the global average.");
							}
						}
				}
			}
		}
		else if (flag_avisos){
			if (padrePrincipal.idioma.equals("español"))
				JOptionPane.showMessageDialog(RellenarInstancia.this,"Debes insertar un componente de tipo fecha Modelo de Madurez (color verde) para calcular las medias");
			else
				JOptionPane.showMessageDialog(RellenarInstancia.this,"You must insert a component of type date Maturity Model (colour green) to calculate the averages");
		}
		
		if (flag_existe_fecha){
			//Sumamos todas las medias modelo de madurez parcial para aquellas instancias con componente fecha identicas
			
			//Miramos los bloques de tipo modelo madurez
			List messages_tipo2 = session.createQuery("from BloqueConstructivo where tipo = '2' order by id_bloque asc").list();
			for ( Iterator iter_tipo2 = messages_tipo2.iterator(); iter_tipo2.hasNext(); ) {
				BloqueConstructivo bloque = (BloqueConstructivo) iter_tipo2.next();
				
//				Buscamos las instancias del bloque obtenido
				
				List messages_instancias = session.createQuery("from Instancia where id_bloque = '"+bloque.getIdBloque()+"' and id_proyecto = '"+padreInstancia.getProyecto().getIdProyecto()+"'").list();
				for ( Iterator iter_instancia = messages_instancias.iterator(); iter_instancia.hasNext(); ) {
					Instancia instancia = (Instancia) iter_instancia.next();
				
					//Buscamos el componente fecha y comprobamos si coinciden en la fecha.
	//				Buscamos el contenido del componente para extraer su media.
					List messages_comprobar_fecha = session.createQuery("from ComponenteInstancia where id_instancia = '"+instancia.getIdInstancia()+"' and fecha_modelo_madurez = '"+componente_instancia_fecha.getFechaModeloMadurez()+"'").list();
					if (messages_comprobar_fecha.size() > 0){
					
						//Buscamos al menos un componente de tipo 'Media parcial modelo madurez'
						List messages_tipo5 = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' and tipo = '5'").list();
						for ( Iterator iter_tipo5 = messages_tipo5.iterator(); iter_tipo5.hasNext(); ) {
							ComponenteBloque componente_bloque = (ComponenteBloque) iter_tipo5.next();
							
							//Buscamos el contenido del componente para extraer su media.
							List messages_tipo5_instancia = session.createQuery("from ComponenteInstancia where id_instancia = '"+instancia.getIdInstancia()+"' and id_componente_bloque = '"+componente_bloque.getIdComponenteBloque()+"'").list();
							for ( Iterator iter_tipo5_instancia = messages_tipo5_instancia.iterator(); iter_tipo5_instancia.hasNext(); ) {
								
								componente_instancia = (ComponenteInstancia) iter_tipo5_instancia.next();
								if (componente_instancia.getModeloMadurezMediaParcial()!=null){
									num_instancias_con_media_parcial_modelo_madurez ++;
									total_media_global_modelo_madurez = total_media_global_modelo_madurez + componente_instancia.getModeloMadurezMediaParcial();
								}
								
								break;
							}
							break;
						}
					}
				}		
			}
			
			List messages_tipo2_ = session.createQuery("from BloqueConstructivo where tipo = '2' order by id_bloque asc").list();
			for ( Iterator iter_tipo2_ = messages_tipo2_.iterator(); iter_tipo2_.hasNext(); ) {
				BloqueConstructivo bloque = (BloqueConstructivo) iter_tipo2_.next();
				
//				Buscamos las instancias del bloque obtenido
				
				List messages_instancias = session.createQuery("from Instancia where id_bloque = '"+bloque.getIdBloque()+"' and id_proyecto = '"+padreInstancia.getProyecto().getIdProyecto()+"'").list();
				for ( Iterator iter_instancia = messages_instancias.iterator(); iter_instancia.hasNext(); ) {
					Instancia instancia = (Instancia) iter_instancia.next();
				
					//Buscamos el componente fecha y comprobamos si coinciden en la fecha.
	//				Buscamos el contenido del componente para extraer su media.
					List messages_comprobar_fecha = session.createQuery("from ComponenteInstancia where id_instancia = '"+instancia.getIdInstancia()+"' and fecha_modelo_madurez = '"+componente_instancia_fecha.getFechaModeloMadurez()+"'").list();
					if (messages_comprobar_fecha.size() > 0){
					
						//Buscamos al menos un componente de tipo 'Media parcial modelo madurez'
						List messages_tipo6 = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' and tipo = '6'").list();
						for ( Iterator iter_tipo6 = messages_tipo6.iterator(); iter_tipo6.hasNext(); ) {
							ComponenteBloque componente_bloque = (ComponenteBloque) iter_tipo6.next();
							
							//Buscamos el contenido del componente para extraer su media.
							List messages_tipo6_instancia = session.createQuery("from ComponenteInstancia where id_instancia = '"+instancia.getIdInstancia()+"' and id_componente_bloque = '"+componente_bloque.getIdComponenteBloque()+"'").list();
							for ( Iterator iter_tipo6_instancia = messages_tipo6_instancia.iterator(); iter_tipo6_instancia.hasNext(); ) {
								
								componente_instancia = (ComponenteInstancia) iter_tipo6_instancia.next();
								
								//Calculamos el valor global sobre 5
								float total = total_media_global_modelo_madurez / num_instancias_con_media_parcial_modelo_madurez;
								componente_instancia.setModeloMadurezMediaGlobal(total);
								if (!flag_fecha)
									componente_instancia.setFechaModeloMadurez(fecha_modelo_madurez);
								session.save(componente_instancia);
								
								break;
							}
							break;
						}
						
					}
				}
					
				
			}
			tx.commit();
			
		}
	}
	
	public void Aceptar (boolean viene_de_portafolio){
		
		try{
			
			//if (portafolio_rellenado==true){
				/*int indice = padreMantenimientoBloque.jList.getSelectedIndex();
				
				BloqueConstructivo bloque = (BloqueConstructivo) padreMantenimientoBloque.modelo.getElementAt(indice);*/
			Instancia instancia = null;
			if (!desdeModoGuiado){
				int indice2 = padreMantenimientoInstancia.jList.getSelectedIndex();
				
				instancia = (Instancia) padreMantenimientoInstancia.modelo.getElementAt(indice2);
			}
				//Creamos la sesión para almacenar el nombre del proyecto en la BD
				Session session=null;
				
				session = UtilidadHibernate.getSessionFactory().openSession();
				
				
				
				//ComponenteInstancia componente = new ComponenteInstancia();
				
				//List messages = session.createQuery("SELECT from Componente where id_bloque = '"+NuevoBloque.bloque.getIdBloque()+"'").list();
				for (int i=0; i<listaComponentes.size(); i++) {
		
					Transaction tx = session.beginTransaction();
					
					List messages = null;
					if (desdeModoGuiado)
						messages = session.createQuery("from ComponenteInstancia where id_componente_bloque = '"+listaComponentes.get(i).getIdComponenteBloque()+"' AND id_instancia = '"+padreInstancia.getIdInstancia()+"'").list();
					else
						messages = session.createQuery("from ComponenteInstancia where id_componente_bloque = '"+listaComponentes.get(i).getIdComponenteBloque()+"' AND id_instancia = '"+instancia.getIdInstancia()+"'").list();
					
					Iterator iter = messages.iterator();
					ComponenteInstancia componente_instancia = (ComponenteInstancia) iter.next();
							
					//CAMPO DE TEXTO
					if (listaComponentes.get(i).getTipo()==0){
						if (((JTextField) listaTipos.get(i)).getText().equals(""))
							componente_instancia.setTexto(null);
						else
							componente_instancia.setTexto(((JTextField) listaTipos.get(i)).getText());
					}
					//CHECKBOX
					else if (listaComponentes.get(i).getTipo()==2){
						
						if (((JCheckBox)listaTipos.get(i)).isSelected())
							componente_instancia.setCheckbox(1);
						else
							componente_instancia.setCheckbox(0);
						
					}
					//FECHA
					else if (listaComponentes.get(i).getTipo()==3){
						//String fecha_String = null;
						
						if (Color.RED ==((JDateChooser)listaTipos.get(i)).getDateEditor().getUiComponent().getForeground()){
							if (padrePrincipal.idioma.equals("español"))
								throw new Exception ("Error, formato de fecha incorrecto.");
							else
								throw new Exception ("Error, Wrong date format.");
						}
						
						if (((JDateChooser)listaTipos.get(i)).getDate()==null){
							
							componente_instancia.setFecha(null);
							componente_instancia.setCheckbox(null);
						}
						else{
							//System.out.println( ((JDateChooser)listaTipos.get(i)).getCalendar().getTime() );
							int a = ((JDateChooser)listaTipos.get(i)).getCalendar().get(Calendar.YEAR);
							int b = 1+(((JDateChooser)listaTipos.get(i)).getCalendar().get(Calendar.MONTH));
							int c = ((JDateChooser)listaTipos.get(i)).getCalendar().get(Calendar.DAY_OF_MONTH);
							
							Formatter fmt_dia = new Formatter();
							fmt_dia.format("%1$02d",c);
							
							System.out.println("El día es: " + fmt_dia);
							
							Formatter fmt_mes = new Formatter();
							fmt_mes.format("%1$02d",b);
							
							System.out.println("El día es: " + fmt_mes);
							
							Formatter fmt_anyo = new Formatter();
							fmt_anyo.format("%1$04d",a);
							
							System.out.println("El día es: " + fmt_anyo);
							
							String fecha_String = fmt_anyo + "/" + fmt_mes + "/" + fmt_dia;

						
							componente_instancia.setFecha(fecha_String);
						}
						
					}
					//PORTAFOLIO
					else if (listaComponentes.get(i).getTipo()==4 && padreBloque.getTipo()==1 && calculo_portafolio!=null){
						
						//calculo_portafolio=componente.getContenidoPortafolio();
						componente_instancia.setPortafolio(calculo_portafolio);

					}
					//PUNTUACIÓN MODELO MADUREZ
					else if (listaComponentes.get(i).getTipo()==4 && padreBloque.getTipo()==2){

						flag_puntuacion = true;
						
						puntuacion_modelo_madurez = 0;
						for (int j = 0 ; j <= 4 ; j++)
							if (((ArrayList<JRadioButton>)listaTipos.get(i)).get(j).isSelected()){
								puntuacion_modelo_madurez = j+1;
								break;
							}
						
						componente_instancia.setModeloMadurezPuntuacion(puntuacion_modelo_madurez);

						total_media_parcial_modelo_madurez = total_media_parcial_modelo_madurez + puntuacion_modelo_madurez;
					}
					//MEDIA PARCIAL MODELO MADUREZ
					else if (listaComponentes.get(i).getTipo()==5 && padreBloque.getTipo()==2){
						flag_media_parcial = true;
					}
					//MEDIA PARCIAL MODELO MADUREZ
					else if (listaComponentes.get(i).getTipo()==6 && padreBloque.getTipo()==2){
						flag_media_global = true;
					}
					//FECHA MODELO DE MADUREZ
					else if (listaComponentes.get(i).getTipo()==7 && padreBloque.getTipo()==2){
						
						//System.out.println(((JDateChooser)listaTipos.get(i)).getDate());
						
						
						if (Color.RED ==((JDateChooser)listaTipos.get(i)).getDateEditor().getUiComponent().getForeground()){
							if (padrePrincipal.idioma.equals("español"))
								throw new Exception ("Error, formato de fecha incorrecto.");
							else
								throw new Exception ("Error, Wrong date format.");
						}
						
						if (((JDateChooser)listaTipos.get(i)).getDate()==null){
							componente_instancia.setFechaModeloMadurez(null);
						}
						else{
							//System.out.println( ((JDateChooser)listaTipos.get(i)).getCalendar().getTime() );
							int a = ((JDateChooser)listaTipos.get(i)).getCalendar().get(Calendar.YEAR);
							int b = 1+(((JDateChooser)listaTipos.get(i)).getCalendar().get(Calendar.MONTH));
							int c = ((JDateChooser)listaTipos.get(i)).getCalendar().get(Calendar.DAY_OF_MONTH);
							
							Formatter fmt_dia = new Formatter();
							fmt_dia.format("%1$02d",c);
							
							System.out.println("El día es: " + fmt_dia);
							
							Formatter fmt_mes = new Formatter();
							fmt_mes.format("%1$02d",b);
							
							System.out.println("El día es: " + fmt_mes);
							
							Formatter fmt_anyo = new Formatter();
							fmt_anyo.format("%1$04d",a);
							
							System.out.println("El día es: " + fmt_anyo);
							
							String fecha_String = fmt_anyo + "/" + fmt_mes + "/" + fmt_dia;

							
							
							//Comprobamos que no exista ninguna fecha dentro de ese bloque que sea igual que la que acabamos de introducir

							//1º Obtenemos el proyecto
							int idproyecto = padrePrincipal.jList.getSelectedIndex();
							Proyecto proyecto = (Proyecto) padrePrincipal.modelo.getElementAt(idproyecto);
							
							//2º comprobamos que la fecha no sea igual a la introducida
							List messages_fecha = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"' AND tipo = '7' order by id_bloque asc").list();
							if (messages_fecha.size()>0){
								for ( Iterator iter_fecha = messages_fecha.iterator(); iter_fecha.hasNext(); ) {
									ComponenteBloque componente_bloque_fecha = (ComponenteBloque) iter_fecha.next();
									
									List messages_cinstancia_fecha = session.createQuery("from ComponenteInstancia where id_componente_bloque = '"+componente_bloque_fecha.getIdComponenteBloque()+"' and fecha_modelo_madurez = '"+fecha_String+"'").list();
									if (messages_cinstancia_fecha.size() > 0){
										for ( Iterator iter_fecha2 = messages_cinstancia_fecha.iterator(); iter_fecha2.hasNext(); ) {
											ComponenteInstancia componente_instancia_fecha = (ComponenteInstancia) iter_fecha2.next();
											
											//Comprobamos que la fecha no sea igual a cualquier otra instancia del bloque, menos la instancia actual
											List messages_instancia_fecha = session.createQuery("from Instancia where id_instancia = '"+componente_instancia_fecha.getInstancia().getIdInstancia()+"' and id_instancia != '"+padreInstancia.getIdInstancia()+"' and id_proyecto = '"+proyecto.getIdProyecto()+"'").list();
											if (messages_instancia_fecha.size() > 0){
												if (padrePrincipal.idioma.equals("español"))
													throw new Exception ("Error, Existen instancias en este bloque con esa fecha de modelo de madurez. \nSeleccione una distinta.");
												else
													throw new Exception ("Error, There are instances in this block with that madurity model date. \nSelect one different.");
											}
										}
									}
								}
							}
							
							componente_instancia.setFechaModeloMadurez(fecha_String);
							fecha_modelo_madurez = fecha_String;
							
							
						}
					}
					
					session.save(componente_instancia);
					tx.commit();
					
					//LISTA
					if (listaComponentes.get(i).getTipo()==1){
						
						int num_elementos = ((DefaultListModel)listaTipos.get(i)).getSize();
						//if (num_elementos>0){
							System.out.println("Número de elementos del modelo= "+ num_elementos);
							
							//Borramos los elementos que existen para luego insertar los nuevos
							List messages2 = session.createQuery("from ContenidoLista where id_componente_instancia = '"+componente_instancia.getIdComponenteInstancia()+"'").list();
							for (Iterator iter2 = messages2.iterator(); iter2.hasNext(); ){
								ContenidoLista contenido_lista_borrar = (ContenidoLista) iter2.next();
								
								Transaction tx2 = session.beginTransaction();
								session.delete(contenido_lista_borrar);
								tx2.commit();
							}
							
							for (int indice = 0; indice < num_elementos; indice++){
								ContenidoLista contenido_lista = new ContenidoLista();
								
								Instancia instancia_lista = (Instancia) ((DefaultListModel) listaTipos.get(i)).get(indice);
								contenido_lista.setInstancia(instancia_lista);
								
								contenido_lista.setComponenteInstancia(componente_instancia);
								
								Transaction tx2 = session.beginTransaction();
								session.save(contenido_lista);
								tx2.commit();
							}
								
					}
					
				}
				
				if (padreBloque.getTipo()==2){
					//Comprobamos que exista al menos un componente de tipo puntuación
					if (!flag_puntuacion){
						if (padrePrincipal.idioma.equals("español"))
							JOptionPane.showMessageDialog(RellenarInstancia.this,"Debe insertar el campo 'puntuación' en el modo desarrollador para generar correctamente el informe y el gráfico del modelo de madurez.", "AVISO", JOptionPane.WARNING_MESSAGE);
						else
							JOptionPane.showMessageDialog(RellenarInstancia.this,"You must insert the field 'score' in the developer mode to generate correctly the report and the graphics of madurity model.", "WARNING", JOptionPane.WARNING_MESSAGE);
					}
				
					//Calculamos la media parcial
					if (flag_media_parcial){
						CalculoMediaParcialModeloMadurez(session);
					}
					else{
						if (padrePrincipal.idioma.equals("español"))
							JOptionPane.showMessageDialog(RellenarInstancia.this,"Debe insertar el campo 'media parcial' en el modo desarrollador para generar correctamente el informe y el gráfico del modelo de madurez.", "AVISO", JOptionPane.WARNING_MESSAGE);
						else
							JOptionPane.showMessageDialog(RellenarInstancia.this,"You must insert the field 'partial average' in the developer mode to generate correctly the report and the graphics of madurity model.", "WARNING", JOptionPane.WARNING_MESSAGE);
					}
					
					//Calculamos la media global
					if (flag_media_global){
						CalculoMediaGlobalModeloMadurez(session, false, true);
					}
					else{
						if (padrePrincipal.idioma.equals("español"))
							JOptionPane.showMessageDialog(RellenarInstancia.this,"Debe insertar el campo 'media global' en el modo desarrollador para generar correctamente el informe y gráficos del modelo de madurez.", "AVISO", JOptionPane.WARNING_MESSAGE);
						else
							JOptionPane.showMessageDialog(RellenarInstancia.this,"You must insert the field 'global average' in the developer mode to generate correctly the report and the graphics of madurity model.", "AVISO", JOptionPane.WARNING_MESSAGE);
					}
				}
				
				//Coloreamos el campo de color rojo para indicar que se ha rellenado
				if (desdeModoGuiado){
					etiquetaPadre.setForeground(Color.red);
				}
				
				
				session.close();
				jPanel1.updateUI();
				if (!viene_de_portafolio)
					RellenarInstancia.this.dispose();

		}	

		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
			//JOptionPane.showMessageDialog(null, "Error, el formato de la fecha no es válido.", "Error", JOptionPane.ERROR_MESSAGE);
		}
		
	}
	
	private void ActualizarListaComponentes(){
		try{
			//etiquetaPadre.setForeground(Color.cyan);
			BloqueConstructivo bloque = null;
			if(!desdePrincipal){
				int indice = padreMantenimientoBloque.jList.getSelectedIndex();
				bloque = (BloqueConstructivo) padreMantenimientoBloque.modelo.getElementAt(indice);
			}
			
			Instancia instancia = null;
			if (!desdeModoGuiado){
				int indice2 = padreMantenimientoInstancia.jList.getSelectedIndex();
				instancia = (Instancia) padreMantenimientoInstancia.modelo.getElementAt(indice2);
			}


			Session session = UtilidadHibernate.getSessionFactory().openSession();
				Transaction tx = session.beginTransaction();
				
				List messages;
				listaComponentes.clear();
				
				if (!desdeModoGuiado){
					if (desdePrincipal){
						messages = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"' order by posicion asc").list();
					}else{
						messages = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' order by posicion asc").list();
					}
				}
				else{
					if (desdePrincipal){
						messages = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"'").list();
					}else{
						messages = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"'").list();
					}
				}
				System.out.println("Número de elementos: " + messages.size());
				//JLabel etiquetas[messages.size()] = new JLabel(); 
				for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
					ComponenteBloque componente = (ComponenteBloque) iter.next();
					
					listaComponentes.add(componente);
					//listaTipos.add(campotexto);
												
				}
				tx.commit();
				session.close();				
				
		}	
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void PintarComponentes(){
		try{
			jPanel1.removeAll();
			int tamanyo_lista = listaTipos.size();
			for (int i = tamanyo_lista-1; i >=0; i--){
				listaTipos.remove(listaTipos.get(i));
			}
				//listaTipos.remove(listaTipos.get(i));

			
			//Creamos la sesión para almacenar el nombre del proyecto en la BD
			BloqueConstructivo bloque=null;
			if (!desdePrincipal){
				int indice = padreMantenimientoBloque.jList.getSelectedIndex();
				bloque = (BloqueConstructivo) padreMantenimientoBloque.modelo.getElementAt(indice);
			}
			
			Instancia instancia = null;
			if (!desdeModoGuiado){
				int indice2 = padreMantenimientoInstancia.jList.getSelectedIndex();
				instancia = (Instancia) padreMantenimientoInstancia.modelo.getElementAt(indice2);
			}
			

			Session session = UtilidadHibernate.getSessionFactory().openSession();
				Transaction tx = session.beginTransaction();
				
				List messages;
				if (!desdeModoGuiado){
					if (desdePrincipal){
						messages = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"' order by posicion asc").list();
					}else{
						messages = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' order by posicion asc").list();
					}
				}
				else{
					if (desdePrincipal){
						messages = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"'").list();
					}else{
						messages = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"'").list();
					}
				}
				//System.out.println("Número de elementos: " + messages.size());
				//JLabel etiquetas[messages.size()] = new JLabel(); 
				for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
					
					final ComponenteBloque componente = (ComponenteBloque) iter.next();
					JLabel etiqueta = new JLabel();
					etiqueta.setText(componente.getNombre());
					etiqueta.setPreferredSize(new Dimension(130,25));
					etiqueta.setHorizontalAlignment(SwingConstants.RIGHT);
					etiqueta.setToolTipText(componente.getNombre());
					
										
					GridBagConstraints gridBagConstraints = new GridBagConstraints();
					gridBagConstraints.gridx = 0;
					gridBagConstraints.gridy = componente.getPosicion();
					gridBagConstraints.insets = new Insets(5, 15, 0, 0);
					
					jPanel1.add(etiqueta,gridBagConstraints);
					
					List messages2 = null;
					if (desdePrincipal){
						messages2 = session.createQuery("from ComponenteInstancia where id_componente_bloque = '"+componente.getIdComponenteBloque()+"' AND id_instancia = '"+padreInstancia.getIdInstancia()+"'").list();
					}else{
						messages2 = session.createQuery("from ComponenteInstancia where id_componente_bloque = '"+componente.getIdComponenteBloque()+"' AND id_instancia = '"+instancia.getIdInstancia()+"'").list();
					}
					
					Iterator iter2 = messages2.iterator();
					ComponenteInstancia componente_instancia = (ComponenteInstancia) iter2.next();
					
					//TEXTO
					if (componente.getTipo()==0){
						JTextField campotexto = new JTextField();
						campotexto.setPreferredSize(new Dimension(600,25));
						if (componente_instancia.getTexto()!=null)
							campotexto.setText(componente_instancia.getTexto());
						//listaComponentes.add(componente);
						listaTipos.add(campotexto);
						//listaComponentes.get(1).setTipoObjeto(campotexto);
						
												
						GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
						gridBagConstraints2.gridx = 1;
						gridBagConstraints2.gridy = componente.getPosicion();
						gridBagConstraints2.insets = new Insets(5, 15, 0, 5);
						gridBagConstraints2.anchor = GridBagConstraints.WEST;
						
						jPanel1.add(campotexto,gridBagConstraints2);	
						
					}
					//LISTA
					else if (componente.getTipo()==1){
						
						
						JList lista = new JList();
						
						DefaultListModel modelo_lista = new DefaultListModel();
					
						lista.setModel(modelo_lista);	
												
						GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
						gridBagConstraints2.gridx = 1;
						gridBagConstraints2.gridy = componente.getPosicion();;
						gridBagConstraints2.insets = new Insets(5, 0, 0, 0);
						
						lista.setVisibleRowCount( 5 );
						lista.setSelectedIndex(-1);
						ComponenteLista_RellenarInstancia manejo_copia_listas = null;
						if (desdePrincipal)
							manejo_copia_listas = new ComponenteLista_RellenarInstancia(jPanel1,componente, componente_instancia, padreBloque,lista, modelo_lista, 0, padrePrincipal, false);
						else
							manejo_copia_listas = new ComponenteLista_RellenarInstancia(jPanel1,componente, componente_instancia, bloque,lista, modelo_lista, 0, padreMantenimientoBloque.padrePrincipal, false);
						listaTipos.add(modelo_lista);
						
					}
					//CHECKBOX
					else if (componente.getTipo()==2){
						JCheckBox checkbox = new JCheckBox();
						checkbox.setPreferredSize(new Dimension(40,18));
						checkbox.setBackground(new Color(238, 238, 238));
						
						JLabel etiqueta_si = new JLabel();
						if (desdePrincipal){
							if (padrePrincipal.idioma.equals("español"))
								etiqueta_si.setText("Si");
							else
								etiqueta_si.setText("Yes");
						}
						else{
							if (padreMantenimientoBloque.padrePrincipal.idioma.equals("español"))
								etiqueta_si.setText("Si");
							else
								etiqueta_si.setText("Yes");
						}
						
						JPanel panel = new JPanel();
						
						if (componente_instancia.getCheckbox()!= null && componente_instancia.getCheckbox()==1)
							checkbox.setSelected(true);
						else
							checkbox.setSelected(false);
						//listaComponentes.add(componente);
						listaTipos.add(checkbox);
						//listaComponentes.get(0).setTipoObjeto(lista);
						
												
						GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
						gridBagConstraints2.gridx = 1;
						gridBagConstraints2.gridy = componente.getPosicion();;
						gridBagConstraints2.insets = new Insets(5, 15, 0, 5);
						gridBagConstraints2.anchor = GridBagConstraints.WEST;
						
						panel.add(etiqueta_si);
						panel.add(checkbox);
						panel.setBackground(new Color(238, 238, 238));
						
						jPanel1.add(panel,gridBagConstraints2);
						
						
					}
					//FECHA
					else if (componente.getTipo()==3){
						JDateChooser campofecha = new JDateChooser();
						
						
						
						//Cogemos el calendario inglés o español según el idioma seleccionado.
						if (padrePrincipal.idioma.equals("español")){
							campofecha.setLocale(new Locale("es", "", ""));
							//campofecha.setDateFormatString("dd/MMM/yy");
						}
						else{
							campofecha.setLocale(new Locale("en", "", ""));
							//campofecha.setDateFormatString("MMM/dd/yy");
						}		
		
						
						campofecha.setPreferredSize(new Dimension(100,25));			
						
						SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy/MM/dd");
						String strFecha=null;
						if (componente_instancia.getFecha()!=null)
							strFecha = componente_instancia.getFecha();
						System.out.println("FECHA :" + strFecha);
						if (strFecha!=null)
							campofecha.setDate(formatoDelTexto.parse(strFecha));
						campofecha.setBackground(new Color(238, 238, 238));
						
						//listaComponentes.add(componente);
						listaTipos.add(campofecha);
						//listaComponentes.get(1).setTipoObjeto(campotexto);
						
												
						GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
						gridBagConstraints2.gridx = 1;
						gridBagConstraints2.gridy = componente.getPosicion();
						gridBagConstraints2.insets = new Insets(5, 15, 0, 0);
						gridBagConstraints2.anchor = GridBagConstraints.WEST;
						
						jPanel1.add(campofecha,gridBagConstraints2);
					}
					//PORTAFOLIO
					else if (componente.getTipo()==4 && padreBloque.getTipo()==1){
						JTextField campotexto = new JTextField();
						campotexto.setEditable(false);
						campotexto.setPreferredSize(new Dimension(600,25));
						campotexto.setBorder(BorderFactory.createLineBorder(Color.red, 1));
						
						if (portafolio_rellenado){
							campotexto.setText(calculo_portafolio);
						}
						else{
							campotexto.setText(componente_instancia.getPortafolio());
						}
						/*if (componente_instancia.getPortafolio()!=null){
							campotexto.setText(calculo_portafolio);
							calculo_portafolio=componente_instancia.getPortafolio();
							portafolio_rellenado=true;
						}
						else if (portafolio_rellenado){
							campotexto.setText(calculo_portafolio);
						}*/
						//listaComponentes.add(componente);
						listaTipos.add(campotexto);
						//listaComponentes.get(1).setTipoObjeto(campotexto);
						
						//System.out.println("CampoTexto: " + listaComponentes.get(1).getContenidoLista());
												
						GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
						gridBagConstraints2.gridx = 1;
						gridBagConstraints2.gridy = componente.getPosicion();
						gridBagConstraints2.insets = new Insets(5, 15, 0, 5);
						gridBagConstraints2.anchor = GridBagConstraints.WEST;
						
						jPanel1.add(campotexto,gridBagConstraints2);
					
					}
					//PUNTUACIÓN MODELO MADUREZ
					else if (componente.getTipo()==4 && padreBloque.getTipo()==2){
						
						JRadioButton radiobutton = new JRadioButton("1");
						JRadioButton radiobutton2 = new JRadioButton("2");
						JRadioButton radiobutton3 = new JRadioButton("3");
						JRadioButton radiobutton4 = new JRadioButton("4");
						JRadioButton radiobutton5 = new JRadioButton("5");
						//radiobutton.setPreferredSize(new Dimension(600,25));
						
						ButtonGroup grupo= new ButtonGroup();
						grupo.add(radiobutton);
						grupo.add(radiobutton2);
						grupo.add(radiobutton3);
						grupo.add(radiobutton4);
						grupo.add(radiobutton5);
						
						if (componente_instancia.getModeloMadurezPuntuacion()!= null){
							if (componente_instancia.getModeloMadurezPuntuacion()==1)
								radiobutton.setSelected(true);
							else if (componente_instancia.getModeloMadurezPuntuacion()==2)
								radiobutton2.setSelected(true);
							else if (componente_instancia.getModeloMadurezPuntuacion()==3)
								radiobutton3.setSelected(true);
							else if (componente_instancia.getModeloMadurezPuntuacion()==4)
								radiobutton4.setSelected(true);
							else if (componente_instancia.getModeloMadurezPuntuacion()==5)
								radiobutton5.setSelected(true);
						}
						
						ArrayList<JRadioButton> lista_radiobutton = new ArrayList<JRadioButton>();
						lista_radiobutton.add(radiobutton);
						lista_radiobutton.add(radiobutton2);
						lista_radiobutton.add(radiobutton3);
						lista_radiobutton.add(radiobutton4);
						lista_radiobutton.add(radiobutton5);
						
						listaTipos.add(lista_radiobutton);
												
						GridBagConstraints gridBagConstraints_radiobutton = new GridBagConstraints();
						gridBagConstraints_radiobutton.gridx = 1;
						gridBagConstraints_radiobutton.gridy = componente.getPosicion();
						gridBagConstraints_radiobutton.insets = new Insets(5, 15, 0, 5);
						gridBagConstraints_radiobutton.anchor = GridBagConstraints.WEST;
						
						GridBagConstraints gridBagConstraints_radiobutton2 = new GridBagConstraints();
						gridBagConstraints_radiobutton2.gridx = 1;
						gridBagConstraints_radiobutton2.gridy = componente.getPosicion();
						gridBagConstraints_radiobutton2.insets = new Insets(5, 115, 0, 5);
						gridBagConstraints_radiobutton2.anchor = GridBagConstraints.WEST;
						
						GridBagConstraints gridBagConstraints_radiobutton3 = new GridBagConstraints();
						gridBagConstraints_radiobutton3.gridx = 1;
						gridBagConstraints_radiobutton3.gridy = componente.getPosicion();
						gridBagConstraints_radiobutton3.insets = new Insets(5, 215, 0, 5);
						gridBagConstraints_radiobutton3.anchor = GridBagConstraints.WEST;
						
						GridBagConstraints gridBagConstraints_radiobutton4 = new GridBagConstraints();
						gridBagConstraints_radiobutton4.gridx = 1;
						gridBagConstraints_radiobutton4.gridy = componente.getPosicion();
						gridBagConstraints_radiobutton4.insets = new Insets(5, 315, 0, 5);
						gridBagConstraints_radiobutton4.anchor = GridBagConstraints.WEST;
						
						GridBagConstraints gridBagConstraints_radiobutton5 = new GridBagConstraints();
						gridBagConstraints_radiobutton5.gridx = 1;
						gridBagConstraints_radiobutton5.gridy = componente.getPosicion();
						gridBagConstraints_radiobutton5.insets = new Insets(5, 415, 0, 5);
						gridBagConstraints_radiobutton5.anchor = GridBagConstraints.WEST;
						
						jPanel1.add(radiobutton,gridBagConstraints_radiobutton);
						jPanel1.add(radiobutton2,gridBagConstraints_radiobutton2);
						jPanel1.add(radiobutton3,gridBagConstraints_radiobutton3);
						jPanel1.add(radiobutton4,gridBagConstraints_radiobutton4);
						jPanel1.add(radiobutton5,gridBagConstraints_radiobutton5);
					
					}
					//MEDIA PARCIAL MODELO MADUREZ
					else if (componente.getTipo()==5 && padreBloque.getTipo()==2){
						JTextField campotexto = new JTextField();
						campotexto.setPreferredSize(new Dimension(100,25));
						campotexto.setEditable(false);
						campotexto.setBorder(BorderFactory.createLineBorder(Color.red, 1));
						
						//Obtenemos el número de componentes de tipo Puntuación para el cálculo de la media
						List messages_ = session.createQuery("from ComponenteBloque where id_bloque = '"+padreBloque.getIdBloque()+"' AND tipo = '4' order by id_bloque asc").list();
						Integer numero_componentes_tipo5 = messages_.size();
						
						if (componente_instancia.getModeloMadurezMediaParcial() != null){
							//Float total = (float) componente_instancia.getModeloMadurezMediaParcial() / (float) numero_componentes_tipo5;
							Float total = componente_instancia.getModeloMadurezMediaParcial();
							DecimalFormat formateador = new DecimalFormat("#.##");
							
							campotexto.setText(" " + formateador.format(total).toString() + " / 5");
						}
							
						listaTipos.add(campotexto);
												
						GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
						gridBagConstraints2.gridx = 1;
						gridBagConstraints2.gridy = componente.getPosicion();
						gridBagConstraints2.insets = new Insets(5, 15, 0, 5);
						gridBagConstraints2.anchor = GridBagConstraints.WEST;
						
						jPanel1.add(campotexto,gridBagConstraints2);
						
					}
					//MEDIA GLOBAL MODELO MADUREZ
					else if (componente.getTipo()==6 && padreBloque.getTipo()==2){
						JTextField campotexto = new JTextField();
						campotexto.setPreferredSize(new Dimension(100,25));
						campotexto.setEditable(false);
						campotexto.setBorder(BorderFactory.createLineBorder(Color.blue, 1));
						
						if (componente_instancia.getModeloMadurezMediaGlobal() != null){
							Float total =  componente_instancia.getModeloMadurezMediaGlobal();
							DecimalFormat formateador = new DecimalFormat("#.##");
							
							campotexto.setText(" " + formateador.format(total).toString() + " / 5");
							
						}
						
							
						listaTipos.add(campotexto);
												
						GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
						gridBagConstraints2.gridx = 1;
						gridBagConstraints2.gridy = componente.getPosicion();
						gridBagConstraints2.insets = new Insets(5, 15, 0, 5);
						gridBagConstraints2.anchor = GridBagConstraints.WEST;
						
						jPanel1.add(campotexto,gridBagConstraints2);
						
					}
					//FECHA MODELO MADUREZ
					else if (componente.getTipo()==7 && padreBloque.getTipo()==2){
						final JDateChooser campofecha = new JDateChooser();
						campofecha.setPreferredSize(new Dimension(100,25));
						campofecha.setBorder(BorderFactory.createLineBorder(Color.green, 1));
						campofecha.setBackground(new Color(238, 238, 238));
						if (padrePrincipal.idioma.equals("español")){
							campofecha.setLocale(new Locale("es", "", ""));
							//campofecha.setDateFormatString("dd/MMM/yy");
						}
						else{
							campofecha.setLocale(new Locale("en", "", ""));
							//campofecha.setDateFormatString("MMM/dd/yy");
						}		
						
						SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy/MM/dd");
						String strFecha=null;
						if (componente_instancia.getFechaModeloMadurez()!=null)
							strFecha = componente_instancia.getFechaModeloMadurez();
						System.out.println("FECHA :" + strFecha);
						if (strFecha!=null)
							campofecha.setDate(formatoDelTexto.parse(strFecha));
						
						
						
						//listaComponentes.add(componente);
						listaTipos.add(campofecha);
												
						final GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
						gridBagConstraints2.gridx = 1;
						gridBagConstraints2.gridy = componente.getPosicion();
						gridBagConstraints2.insets = new Insets(5, 15, 0, 5);
						gridBagConstraints2.anchor = GridBagConstraints.WEST;
						
						jPanel1.add(campofecha,gridBagConstraints2);

					}
					
				}
				tx.commit();
				session.close();

		}	
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
		
	}
	
	
	private void initialize() {
		//this.setSize(1024, 768);
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		this.setSize(d.width,d.height-40);

		this.setModal(true);
		
		if (!desdeModoGuiado){
			int indice2 = padreMantenimientoInstancia.jList.getSelectedIndex();
			
			padreInstancia = (Instancia) padreMantenimientoInstancia.modelo.getElementAt(indice2);
		}

		
		
		if (desdePrincipal){
			if (padrePrincipal.idioma.equals("español"))	
				this.setTitle("Rellenar componentes - Bloque: " + padreBloque.getNombre() + " - Instancia: " + padreInstancia.getNombre());
			else
				this.setTitle("Fill components - Block: " + padreBloque.getNombre() + " - Instance: " + padreInstancia.getNombre());
		}
		else{
			int indice = padreMantenimientoBloque.jList.getSelectedIndex();
		
			BloqueConstructivo bloque = (BloqueConstructivo) padreMantenimientoBloque.modelo.getElementAt(indice);
		
			if (padreMantenimientoBloque.padrePrincipal.idioma.equals("español"))
				this.setTitle("Rellenar componentes - Bloque: " + bloque.getNombre() + " - Instancia: " + padreInstancia.getNombre());
			else
				this.setTitle("Fill components - Block: " + bloque.getNombre() + " - Instance: " + padreInstancia.getNombre());
		}
		
		this.setContentPane(getJContentPane());
		this.addWindowListener(new java.awt.event.WindowAdapter() {
			public void windowOpened(java.awt.event.WindowEvent e) {
				
				ActualizarListaComponentes();
				
				
				Session session = UtilidadHibernate.getSessionFactory().openSession();
				CalculoMediaGlobalModeloMadurez(session, true, false);
				session.close();
				
				PintarComponentes();
				
				jButton1.setVisible(false);		
				if (desdePrincipal){
					
					if (padreBloque.getTipo()==1)
						jButton1.setVisible(true);
				}else{
					int indice = padreMantenimientoBloque.jList.getSelectedIndex();
					BloqueConstructivo bloque = (BloqueConstructivo) padreMantenimientoBloque.modelo.getElementAt(indice);
				
					if (bloque.getTipo()==1)
						jButton1.setVisible(true);
				}
					
			}
		});
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJScrollPane(), BorderLayout.CENTER);
			jContentPane.add(getJPanel(), BorderLayout.EAST);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jScrollPane	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setViewportView(getJPanel1());
		}
		return jScrollPane;
	}

	/**
	 * This method initializes jPanel1	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel1() {
		if (jPanel1 == null) {
			jPanel1 = new JPanel();
			jPanel1.setLayout(new GridBagLayout());
			jPanel1.setBackground(new Color(238, 238, 238));
		}
		return jPanel1;
	}

	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(new FlowLayout());
			jPanel.setPreferredSize(new Dimension(100, 0));
			jPanel.setBackground(SystemColor.controlHighlight);
			jPanel.add(getJButton(), null);
			jPanel.add(getJButton1(), null);
		}
		return jPanel;
	}

	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			if(!desdePrincipal){
				if(padreMantenimientoBloque.padrePrincipal.idioma.equals("español"))
					jButton.setText("Aceptar");
				else
					jButton.setText("Accept");
			}
			else{
				if(padrePrincipal.idioma.equals("español"))
					jButton.setText("Aceptar");
				else
					jButton.setText("Accept");
			}
			jButton.setPreferredSize(new Dimension(90, 26));
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
						Aceptar(false);
					
				}
			});
		}
		return jButton;
	}

	/**
	 * This method initializes jButton1	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton1() {
		if (jButton1 == null) {
			jButton1 = new JButton();
			if(!desdePrincipal){
				if (padreMantenimientoBloque.padrePrincipal.idioma.equals("español"))
					jButton1.setText("Portafolio");
				else
					jButton1.setText("Portfolio");
			}
			else{
				if (padrePrincipal.idioma.equals("español"))
					jButton1.setText("Portafolio");
				else
					jButton1.setText("Portfolio");
			}
			jButton1.setPreferredSize(new Dimension(90, 26));
			jButton1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					PortafolioDeAplicaciones ventana = new PortafolioDeAplicaciones(RellenarInstancia.this);
					ventana.setLocationRelativeTo(RellenarInstancia.this);
					ventana.setVisible(true);
				}
			});
		}
		return jButton1;
	}

}  //  @jve:decl-index=0:visual-constraint="10,10"
