package interfaz;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;


import negocio.BloqueConstructivo;
import negocio.ComponenteBloque;
import negocio.ComponenteInstancia;
import negocio.Instancia;
import negocio.Plantilla;
import negocio.Proyecto;
import negocio.SeleccionComponenteListaBloque;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.toedter.calendar.JDateChooser;

import persistencia.UtilidadHibernate;
import java.awt.SystemColor;

public class EditorDeBloques 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;  

	private JPanel jPanel = null;

	private JPanel jPanel2 = null;

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

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

	private JPanel jPanel5 = null;

	private JLabel jLabel211 = null;

	private JTextField jTextField11 = null;

	private JLabel jLabel111 = null;

	private JComboBox jComboBox11 = null;

	private JPanel jPanel6 = null;

	private JButton jButton111 = null;

	private JPanel jPanel4 = null;

	private JScrollPane jScrollPane1 = null;

	private JList jList1 = null;
	
	private DefaultListModel modelo_lista_copia = new DefaultListModel();
	
	private int opcion_seleccionada_lista;

	private JLabel jLabel = null;

	private JTextField jTextField = null;

	private JLabel jLabel1 = null;
	
	int[] vector_elementos_seleccionados;

	private JLabel jLabel21 = null;

	private JLabel jLabel22 = null;
	
	public Principal padrePrincipal;
	
	public Boolean desdePrincipal;
	
	public String idioma;

	private JButton jButton = null;

	private JPanel jPanel7 = null;

	private JPanel jPanel8 = null;
	
	private boolean flag_elemento_lista_no_seleccionado = true;
	

	public EditorDeBloques(MantenimientoBloque owner, Principal p) {
		super(owner);
		padreMantenimientoBloque=owner;
		desdePrincipal=false;
		padrePrincipal= p;
		idioma = padreMantenimientoBloque.padrePrincipal.idioma;
		initialize();
	}
	
	public EditorDeBloques(Principal owner) {
		padrePrincipal=owner;
		desdePrincipal=true;
		idioma = padrePrincipal.idioma;
		initialize();
	}
	
	public EditorDeBloques(JDialog owner) {
		super(owner);
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	
	public boolean esEntero(String cad){
		if (cad.equals("")){
			return false;
		}
		else{
			for(int i = 0; i<cad.length(); i++){
				if( !Character.isDigit(cad.charAt(i)) )
					return false;
			}
		}
	 return true;
	}
	
	public BloqueConstructivo ObtenerBloque(Boolean d){
		
		BloqueConstructivo bloque;
		
		if (!d){
			int indice = padreMantenimientoBloque.jList.getSelectedIndex();
			bloque = (BloqueConstructivo) padreMantenimientoBloque.modelo.getElementAt(indice);
			
		}
		else{
			int indice = padrePrincipal.jList3.getSelectedIndex();
			bloque = (BloqueConstructivo) padrePrincipal.modeloBloque.getElementAt(indice);
		}
		return bloque;
		
	}
	
	private void BorrarComponente(BloqueConstructivo bloque, ComponenteBloque componente){
		int n;
				
		if (idioma.equals("español")){
			n = JOptionPane.showConfirmDialog(
					EditorDeBloques.this, "¿Estás seguro de que quieres borrar el componente?",
					"Advertencia",
					JOptionPane.YES_NO_OPTION);
		}
		else{
			JOptionPane.setDefaultLocale(new Locale("en", "", ""));
			n = JOptionPane.showConfirmDialog(
					EditorDeBloques.this, "Are you sure you want to delete the component?",
					"Warning",
					JOptionPane.YES_NO_OPTION);
		}
			
		if (n == JOptionPane.YES_OPTION) {

			Session sesion = UtilidadHibernate.getSessionFactory().openSession();
			Transaction tx = sesion.beginTransaction();
			
			boolean flag_existen_instancias_global = false;
			boolean flag_existen_instancias = false;
			
			
			int idestructura = 0;
			Plantilla plantilla;
			if (desdePrincipal){
				idestructura = padrePrincipal.jList.getSelectedIndex();
				plantilla = (Plantilla) padrePrincipal.modelo.getElementAt(idestructura);
			}
			else{
				idestructura = padreMantenimientoBloque.padrePrincipal.jList.getSelectedIndex();
				plantilla = (Plantilla) padreMantenimientoBloque.padrePrincipal.modelo.getElementAt(idestructura);
			}
			
			boolean flag = true;
			//Comprobamos que no existan instancias asociadas al proyecto que pertenece a la plantilla que queremos borrar.	
			List messages = sesion.createQuery("from Proyecto where id_plantilla = '"+plantilla.getIdPlantilla()+"'").list();
			//System.out.println("Número de elementos: " + messages.size());
			for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
				Proyecto p = (Proyecto) iter.next();
				ArrayList<Instancia> listaInstancias = new ArrayList<Instancia>();
				flag_existen_instancias = false;
				List messages2 = sesion.createQuery("from Instancia where id_proyecto = '"+p.getIdProyecto()+"'").list();
				//System.out.println("Número de elementos: " + messages.size());
				for ( Iterator iter2 = messages2.iterator(); iter2.hasNext(); ) {
					Instancia i = (Instancia) iter2.next();
					List messages3 = sesion.createQuery("from ComponenteInstancia where id_instancia = '"+i.getIdInstancia()+"' and id_componente_bloque = '"+componente.getIdComponenteBloque()+"'").list();
					//System.out.println("Número de elementos: " + messages.size());
					for ( Iterator iter3 = messages3.iterator(); iter3.hasNext(); ) {
						ComponenteInstancia ci = (ComponenteInstancia) iter3.next();
						
						switch (componente.getTipo()){
						
							case 0:
								if (ci.getTexto()!=null && !(ci.getTexto().isEmpty())){
									listaInstancias.add(i);
									flag_existen_instancias = true;
									flag_existen_instancias_global = true;
								}
								break;
							case 1:
								
								List messages4 = sesion.createQuery("from ContenidoLista where id_componente_instancia = '"+ci.getIdComponenteInstancia()+"'").list();
								
								if (messages4.size() > 0){
									listaInstancias.add(i);
									flag_existen_instancias = true;
									flag_existen_instancias_global = true;
								}
								break;
							case 2:
								if (flag){
									flag = false;
									if (idioma.equals("español")){
										n = JOptionPane.showConfirmDialog(
												EditorDeBloques.this, "Se borrará el componente checkbox de sus instancias, ¿desea continuar de todas formas?",
												"Advertencia",
												JOptionPane.YES_NO_OPTION);
										
									}
									else{
										n = JOptionPane.showConfirmDialog(
												EditorDeBloques.this, "It will delete checkbox component of all his instances, do you want to continue anyway?",
												"Warning",
												JOptionPane.YES_NO_OPTION);
										
									}
										
									if (n == JOptionPane.YES_OPTION) {
										listaInstancias.add(i);
										flag_existen_instancias = false;
										flag_existen_instancias_global = false;
									}
									else{
										flag_existen_instancias = true;
										flag_existen_instancias_global = true;
									}
								}	
								break;
							case 3:
								if (ci.getFecha()!=null){
									listaInstancias.add(i);
									flag_existen_instancias = true;
									flag_existen_instancias_global = true;
								}
								break;
							case 4:
								//COMPONENTE PORTAFOLIO
								if (bloque.getTipo()==1){
									if (flag){
										flag = false;
										if (idioma.equals("español")){
											n = JOptionPane.showConfirmDialog(
													EditorDeBloques.this, "Se borrará el componente portafolio de todas sus instancias, ¿desea continuar de todas formas?",
													"Advertencia",
													JOptionPane.YES_NO_OPTION);
										}
										else{
											//JOptionPane.setDefaultLocale(new Locale("en", "", ""));
											n = JOptionPane.showConfirmDialog(
													EditorDeBloques.this, "It will delete portfolio component of all his instances, do you want to continue anyway?",
													"Warning",
													JOptionPane.YES_NO_OPTION);
											
										}
											
										if (n == JOptionPane.YES_OPTION) {
											listaInstancias.add(i);
											flag_existen_instancias = false;
											flag_existen_instancias_global = false;
										}
										else{
											flag_existen_instancias = true;
											flag_existen_instancias_global = true;
										}
									}
									break;
								}
								//COMPONENTE PUNTUACIÓN MODELO DE MADUREZ
								else{
									if (flag){
										flag = false;
										if (idioma.equals("español")){
											n = JOptionPane.showConfirmDialog(
													EditorDeBloques.this, "Se borrará el componente puntuación de todas sus instancias, ¿desea continuar de todas formas?",
													"Advertencia",
													JOptionPane.YES_NO_OPTION);
										}
										else{
											//JOptionPane.setDefaultLocale(new Locale("en", "", ""));
											n = JOptionPane.showConfirmDialog(
													EditorDeBloques.this, "It will delete score component of all his instances, do you want to continue anyway?",
													"Warning",
													JOptionPane.YES_NO_OPTION);
											
										}
											
										if (n == JOptionPane.YES_OPTION) {
											listaInstancias.add(i);
											flag_existen_instancias = false;
											flag_existen_instancias_global = false;
										}
										else{
											flag_existen_instancias = true;
											flag_existen_instancias_global = true;
										}
									}
									break;
								}
							case 5:
								//COMPONENTE MEDIA PARCIAL
								if (flag){
									flag = false;
									if (idioma.equals("español")){
										n = JOptionPane.showConfirmDialog(
												EditorDeBloques.this, "Se borrará el componente Media parcial de todas sus instancias, ¿desea continuar de todas formas?",
												"Advertencia",
												JOptionPane.YES_NO_OPTION);
									}
									else{
										//JOptionPane.setDefaultLocale(new Locale("en", "", ""));
										n = JOptionPane.showConfirmDialog(
												EditorDeBloques.this, "It will delete Partial average component of all his instances, do you want to continue anyway?",
												"Warning",
												JOptionPane.YES_NO_OPTION);
										
									}
										
									if (n == JOptionPane.YES_OPTION) {
										listaInstancias.add(i);
										flag_existen_instancias = false;
										flag_existen_instancias_global = false;
									}
									else{
										flag_existen_instancias = true;
										flag_existen_instancias_global = true;
									}
								}
								break;
							case 6:
								//COMPONENTE MEDIA GLOBAL
								if (flag){
									flag = false;
									if (idioma.equals("español")){
										n = JOptionPane.showConfirmDialog(
												EditorDeBloques.this, "Se borrará el componente Media global de todas sus instancias, ¿desea continuar de todas formas?",
												"Advertencia",
												JOptionPane.YES_NO_OPTION);
									}
									else{
										//JOptionPane.setDefaultLocale(new Locale("en", "", ""));
										n = JOptionPane.showConfirmDialog(
												EditorDeBloques.this, "It will delete Global average component of all his instances, do you want to continue anyway?",
												"Warning",
												JOptionPane.YES_NO_OPTION);
										
									}
										
									if (n == JOptionPane.YES_OPTION) {
										listaInstancias.add(i);
										flag_existen_instancias = false;
										flag_existen_instancias_global = false;
									}
									else{
										flag_existen_instancias = true;
										flag_existen_instancias_global = true;
									}
								}
								break;
							case 7:
								if (ci.getFechaModeloMadurez()!=null){
									listaInstancias.add(i);
									flag_existen_instancias = true;
									flag_existen_instancias_global = true;	
								}
								break;	
						}
					}
				}
				if (flag_existen_instancias && flag){
					if (idioma.equals("español"))
						JOptionPane.showMessageDialog(null, "Error, hay instancias con contenido en el proyecto '" + p.getNombre() + "' del bloque '"+bloque.getNombre()+"', en concreto en la/s instancia/s:\n " + listaInstancias.toString() + "\n\nDebes limpiar el contenido del componente (poner el campo vacío) en todas las instancias para borrarlo.", "Error", JOptionPane.ERROR_MESSAGE);
					else
						JOptionPane.showMessageDialog(null, "Error, there are instances with content in the project '" + p.getNombre() + "' of the block '"+bloque.getNombre()+"', particularly the instance/s:\n " + listaInstancias.toString() + "\n\nYou must clear the content of component (put the empty field) in all the instances to remove it.", "Error", JOptionPane.ERROR_MESSAGE);
				}
			}
			
			if (!flag_existen_instancias_global){
				//BORRAMOS EL COMPONENTE DEL EDITOR DE BLOQUES
				sesion.delete(componente);
				tx.commit();
				sesion.close();
				ActualizarListaComponentes();
				PintarComponentes();
				jPanel1.repaint();
				jPanel1.updateUI();
			}
		}
	}
	
	
	public void ActualizarListaComponentes(){
		try{
						
			//Obtenemos el bloque de la listad de bloques (de la ventana anterior)
			BloqueConstructivo bloque = ObtenerBloque(desdePrincipal);
			
			Session session = UtilidadHibernate.getSessionFactory().openSession();
				Transaction tx = session.beginTransaction();
				
				listaComponentes.clear();
				List messages = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' order by posicion asc").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 ActualizarListaBloques(){
		try{

			Session session=null;
			
			session = UtilidadHibernate.getSessionFactory().openSession();
			
			Transaction tx = session.beginTransaction();
			
			int idelemento = padrePrincipal.jList.getSelectedIndex();
			Plantilla plantilla = (Plantilla) padrePrincipal.modelo.getElementAt(idelemento);
			
			modelolista.removeAllElements();
			List messages = session.createQuery("from BloqueConstructivo m where id_plantilla = '"+plantilla.getIdPlantilla()+"' order by nombre asc").list();

			for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
				BloqueConstructivo bloque = (BloqueConstructivo) iter.next();
				modelolista.addElement(bloque);
			}
			jList1.setModel(modelolista);
			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();
			
			//Creamos la sesión para almacenar el nombre del plantilla en la BD
			
			
			final BloqueConstructivo bloque = ObtenerBloque(desdePrincipal);
			

			Session session = UtilidadHibernate.getSessionFactory().openSession();
				Transaction tx = session.beginTransaction();
				
				List messages = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' order by posicion asc").list();

				for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
					
					final ComponenteBloque componente = (ComponenteBloque) iter.next();
					final 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);
					
					if (componente.getTipo()==0){
						final JTextField campotexto = new JTextField();
						campotexto.setPreferredSize(new Dimension(600,25));
						listaTipos.add(campotexto);

												
						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(campotexto,gridBagConstraints2);
						
						JButton boton_borrar = new JButton();
						if(idioma.equals("español"))
							boton_borrar.setText("Borrar");
						else
							boton_borrar.setText("Delete");
						boton_borrar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	BorrarComponente(bloque, componente);
						            }

						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
						gridBagConstraints3.gridx = 2;
						gridBagConstraints3.gridy = componente.getPosicion();
						gridBagConstraints3.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_borrar,gridBagConstraints3);
						
						JButton boton_modificar = new JButton();
						if(idioma.equals("español"))
							boton_modificar.setText("Modificar");
						else
							boton_modificar.setText("Modify");
						boton_modificar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	Session session = UtilidadHibernate.getSessionFactory().openSession();
						            		
										List message = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' AND nombre = '"+componente.getNombre()+"' AND posicion = '"+componente.getPosicion()+"' AND tipo= '"+componente.getTipo()+"'").list();
										Iterator iter = message.iterator();
										
										ComponenteBloque c = (ComponenteBloque) iter.next();
										
										ModificarComponente ventana = new ModificarComponente(EditorDeBloques.this, c);
										ventana.setLocationRelativeTo(EditorDeBloques.this);
										ventana.setVisible(true);
										
										
										for (; iter.hasNext(); ){
											ComponenteBloque componente2 = (ComponenteBloque) iter.next();
											Transaction tx = session.beginTransaction();
											componente2.setNombre(c.getNombre());
											tx.commit();
										}

										session.close();
										ActualizarListaComponentes();
										PintarComponentes();
										jPanel1.repaint();
										jPanel1.updateUI();
										
										
						            }


						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
						gridBagConstraints4.gridx = 3;
						gridBagConstraints4.gridy = componente.getPosicion();
						gridBagConstraints4.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_modificar,gridBagConstraints4);
					}
					else if (componente.getTipo()==1){
						
						
						JList lista = new JList();
						DefaultListModel modelo_lista = new DefaultListModel();

						int tamaño_lista = modelolista.getSize();
						lista.setVisibleRowCount( 5 );
						lista.setSelectedIndex(-1);
						
						//Mostramos las dos listas que contienen instancias, donde una de ellas relaciona una instancia con otra.
						ComponenteLista_EditorBloques manejo_copia_listas;
						if (desdePrincipal)
							manejo_copia_listas = new ComponenteLista_EditorBloques(jPanel1,componente,bloque,lista,modelo_lista, tamaño_lista, padrePrincipal, true);
						else
							manejo_copia_listas = new ComponenteLista_EditorBloques(jPanel1,componente,bloque,lista,modelo_lista, tamaño_lista, padreMantenimientoBloque.padrePrincipal, true);
						listaTipos.add(lista);
						
						JButton boton_borrar = new JButton();
						if(idioma.equals("español"))
							boton_borrar.setText("Borrar");
						else
							boton_borrar.setText("Delete");
						boton_borrar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	
						            	BorrarComponente(bloque, componente);
										
						            }

						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
						gridBagConstraints3.gridx = 2;
						gridBagConstraints3.gridy = componente.getPosicion();
						gridBagConstraints3.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_borrar,gridBagConstraints3);
						//jPanel1.add(lista,gridBagConstraints2);
						
						JButton boton_modificar = new JButton();
						if(idioma.equals("español"))
							boton_modificar.setText("Modificar");
						else
							boton_modificar.setText("Modify");
						boton_modificar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	Session session = UtilidadHibernate.getSessionFactory().openSession();
						            		
										List message = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' AND nombre = '"+componente.getNombre()+"' AND posicion = '"+componente.getPosicion()+"' AND tipo= '"+componente.getTipo()+"'").list();
										Iterator iter = message.iterator();
										
										ComponenteBloque c = (ComponenteBloque) iter.next();
										
										ModificarComponenteLista ventana = new ModificarComponenteLista(EditorDeBloques.this, c);
										ventana.setLocationRelativeTo(EditorDeBloques.this);
										ventana.setVisible(true);
										
										
										for (; iter.hasNext(); ){
											ComponenteBloque componente2 = (ComponenteBloque) iter.next();
											Transaction tx = session.beginTransaction();
											componente2.setNombre(c.getNombre());
											tx.commit();
										}
										session.close();
										ActualizarListaComponentes();
										PintarComponentes();
										jPanel1.repaint();
										jPanel1.updateUI();
										
										
						            }


						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
						gridBagConstraints4.gridx = 3;
						gridBagConstraints4.gridy = componente.getPosicion();
						gridBagConstraints4.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_modificar,gridBagConstraints4);
						
					}
					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 (idioma.equals("español"))
							etiqueta_si.setText("Si");
						else
							etiqueta_si.setText("Yes");
						
						JPanel panel = new JPanel();
						
						listaTipos.add(checkbox);
							
						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);
						
						
						JButton boton_borrar = new JButton();
						if(idioma.equals("español"))
							boton_borrar.setText("Borrar");
						else
							boton_borrar.setText("Delete");
						boton_borrar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	BorrarComponente(bloque, componente);
						            }

						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
						gridBagConstraints3.gridx = 2;
						gridBagConstraints3.gridy = componente.getPosicion();
						gridBagConstraints3.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_borrar,gridBagConstraints3);
						
						JButton boton_modificar = new JButton();
						if(idioma.equals("español"))
							boton_modificar.setText("Modificar");
						else
							boton_modificar.setText("Modify");
						boton_modificar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	Session session = UtilidadHibernate.getSessionFactory().openSession();
						            		
										List message = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' AND nombre = '"+componente.getNombre()+"' AND posicion = '"+componente.getPosicion()+"' AND tipo= '"+componente.getTipo()+"'").list();
										Iterator iter = message.iterator();
										
										ComponenteBloque c = (ComponenteBloque) iter.next();
										
										ModificarComponente ventana = new ModificarComponente(EditorDeBloques.this, c);
										ventana.setLocationRelativeTo(EditorDeBloques.this);
										ventana.setVisible(true);
										
										
										for (; iter.hasNext(); ){
											ComponenteBloque componente2 = (ComponenteBloque) iter.next();
											Transaction tx = session.beginTransaction();
											componente2.setNombre(c.getNombre());
											tx.commit();
										}
									
										session.close();
										ActualizarListaComponentes();
										PintarComponentes();
										jPanel1.repaint();
										jPanel1.updateUI();
						            }


						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
						gridBagConstraints4.gridx = 3;
						gridBagConstraints4.gridy = componente.getPosicion();
						gridBagConstraints4.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_modificar,gridBagConstraints4);
					}
					else if (componente.getTipo()==3){
						final JDateChooser campofecha = new JDateChooser();
						campofecha.setPreferredSize(new Dimension(100,25));
						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");
						}		
						
						//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);
						
						JButton boton_borrar = new JButton();
						if(idioma.equals("español"))
							boton_borrar.setText("Borrar");
						else
							boton_borrar.setText("Delete");
						boton_borrar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	BorrarComponente(bloque, componente);
						            }

						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
						gridBagConstraints3.gridx = 2;
						gridBagConstraints3.gridy = componente.getPosicion();
						gridBagConstraints3.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_borrar,gridBagConstraints3);
						
						JButton boton_modificar = new JButton();
						if(idioma.equals("español"))
							boton_modificar.setText("Modificar");
						else
							boton_modificar.setText("Modify");
						boton_modificar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	Session session = UtilidadHibernate.getSessionFactory().openSession();
						            		
										List message = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' AND nombre = '"+componente.getNombre()+"' AND posicion = '"+componente.getPosicion()+"' AND tipo= '"+componente.getTipo()+"'").list();
										Iterator iter = message.iterator();
										
										ComponenteBloque c = (ComponenteBloque) iter.next();
										
										ModificarComponente ventana = new ModificarComponente(EditorDeBloques.this, c);
										ventana.setLocationRelativeTo(EditorDeBloques.this);
										ventana.setVisible(true);
										
										
										for (; iter.hasNext(); ){
											ComponenteBloque componente2 = (ComponenteBloque) iter.next();
											Transaction tx = session.beginTransaction();
											componente2.setNombre(c.getNombre());
											tx.commit();
										}

										session.close();
										ActualizarListaComponentes();
										PintarComponentes();
										jPanel1.repaint();
										jPanel1.updateUI();
						            }


						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
						gridBagConstraints4.gridx = 3;
						gridBagConstraints4.gridy = componente.getPosicion();
						gridBagConstraints4.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_modificar,gridBagConstraints4);
					
					}
					//PORTAFOLIO
					else if (componente.getTipo()==4 && bloque.getTipo()==1){
						JTextField campotexto = new JTextField();
						campotexto.setPreferredSize(new Dimension(600,25));
						campotexto.setBorder(BorderFactory.createLineBorder(Color.red, 1));
						campotexto.setEnabled(false);
						
						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);
						
						JButton boton_borrar = new JButton();
						if(idioma.equals("español"))
							boton_borrar.setText("Borrar");
						else
							boton_borrar.setText("Delete");
						boton_borrar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	BorrarComponente(bloque, componente);
						            }

						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
						gridBagConstraints3.gridx = 2;
						gridBagConstraints3.gridy = componente.getPosicion();
						gridBagConstraints3.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_borrar,gridBagConstraints3);
						
						JButton boton_modificar = new JButton();
						if(idioma.equals("español"))
							boton_modificar.setText("Modificar");
						else
							boton_modificar.setText("Modify");
						boton_modificar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	Session session = UtilidadHibernate.getSessionFactory().openSession();
						            		
										List message = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' AND nombre = '"+componente.getNombre()+"' AND posicion = '"+componente.getPosicion()+"' AND tipo= '"+componente.getTipo()+"'").list();
										Iterator iter = message.iterator();
										
										ComponenteBloque c = (ComponenteBloque) iter.next();
										
										ModificarComponente ventana = new ModificarComponente(EditorDeBloques.this, c);
										ventana.setLocationRelativeTo(EditorDeBloques.this);
										ventana.setVisible(true);
										
										
										for (; iter.hasNext(); ){
											ComponenteBloque componente2 = (ComponenteBloque) iter.next();
											Transaction tx = session.beginTransaction();
											componente2.setNombre(c.getNombre());
											tx.commit();
										}
									
										session.close();
										ActualizarListaComponentes();
										PintarComponentes();
										jPanel1.repaint();
										jPanel1.updateUI();
										
										
						            }


						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
						gridBagConstraints4.gridx = 3;
						gridBagConstraints4.gridy = componente.getPosicion();
						gridBagConstraints4.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_modificar,gridBagConstraints4);
					}
					//PUNTUACIÓN MODELO DE MADUREZ
					else if (componente.getTipo()==4 && bloque.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);
						
						
						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);
						
						JButton boton_borrar = new JButton();
						if(idioma.equals("español"))
							boton_borrar.setText("Borrar");
						else
							boton_borrar.setText("Delete");
						boton_borrar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	BorrarComponente(bloque, componente);
						            }

						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
						gridBagConstraints3.gridx = 2;
						gridBagConstraints3.gridy = componente.getPosicion();
						gridBagConstraints3.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_borrar,gridBagConstraints3);
						
						JButton boton_modificar = new JButton();
						if(idioma.equals("español"))
							boton_modificar.setText("Modificar");
						else
							boton_modificar.setText("Modify");
						boton_modificar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	Session session = UtilidadHibernate.getSessionFactory().openSession();
						            		
										List message = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' AND nombre = '"+componente.getNombre()+"' AND posicion = '"+componente.getPosicion()+"' AND tipo= '"+componente.getTipo()+"'").list();
										Iterator iter = message.iterator();
										
										ComponenteBloque c = (ComponenteBloque) iter.next();
										
										ModificarComponente ventana = new ModificarComponente(EditorDeBloques.this, c);
										ventana.setLocationRelativeTo(EditorDeBloques.this);
										ventana.setVisible(true);
										
										
										for (; iter.hasNext(); ){
											ComponenteBloque componente2 = (ComponenteBloque) iter.next();
											Transaction tx = session.beginTransaction();
											componente2.setNombre(c.getNombre());
											tx.commit();
										}
									
										session.close();
										ActualizarListaComponentes();
										PintarComponentes();
										jPanel1.repaint();
										jPanel1.updateUI();
										
										
						            }


						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
						gridBagConstraints4.gridx = 3;
						gridBagConstraints4.gridy = componente.getPosicion();
						gridBagConstraints4.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_modificar,gridBagConstraints4);
					}
					//MEDIA PARCIAL MODELO DE MADUREZ
					else if (componente.getTipo()==5 && bloque.getTipo()==2){
						JTextField campotexto = new JTextField();
						campotexto.setPreferredSize(new Dimension(100,25));
						campotexto.setEnabled(false);
						campotexto.setBorder(BorderFactory.createLineBorder(Color.red, 1));
						
						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);
						
						JButton boton_borrar = new JButton();
						if(idioma.equals("español"))
							boton_borrar.setText("Borrar");
						else
							boton_borrar.setText("Delete");
						boton_borrar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	BorrarComponente(bloque, componente);
						            }

						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
						gridBagConstraints3.gridx = 2;
						gridBagConstraints3.gridy = componente.getPosicion();
						gridBagConstraints3.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_borrar,gridBagConstraints3);
						
						JButton boton_modificar = new JButton();
						if(idioma.equals("español"))
							boton_modificar.setText("Modificar");
						else
							boton_modificar.setText("Modify");
						boton_modificar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	Session session = UtilidadHibernate.getSessionFactory().openSession();
						            		
										List message = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' AND nombre = '"+componente.getNombre()+"' AND posicion = '"+componente.getPosicion()+"' AND tipo= '"+componente.getTipo()+"'").list();
										Iterator iter = message.iterator();
										
										ComponenteBloque c = (ComponenteBloque) iter.next();
										
										ModificarComponente ventana = new ModificarComponente(EditorDeBloques.this, c);
										ventana.setLocationRelativeTo(EditorDeBloques.this);
										ventana.setVisible(true);
										
										
										for (; iter.hasNext(); ){
											ComponenteBloque componente2 = (ComponenteBloque) iter.next();
											Transaction tx = session.beginTransaction();
											componente2.setNombre(c.getNombre());
											tx.commit();
										}
									
										session.close();
										ActualizarListaComponentes();
										PintarComponentes();
										jPanel1.repaint();
										jPanel1.updateUI();
										
										
						            }


						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
						gridBagConstraints4.gridx = 3;
						gridBagConstraints4.gridy = componente.getPosicion();
						gridBagConstraints4.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_modificar,gridBagConstraints4);
					}
					//MEDIA GLOBAL MODELO DE MADUREZ
					else if (componente.getTipo()==6 && bloque.getTipo()==2){
						JTextField campotexto = new JTextField();
						campotexto.setPreferredSize(new Dimension(100,25));
						campotexto.setEnabled(false);
						campotexto.setBorder(BorderFactory.createLineBorder(Color.blue, 1));
						
						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);
						
						JButton boton_borrar = new JButton();
						if(idioma.equals("español"))
							boton_borrar.setText("Borrar");
						else
							boton_borrar.setText("Delete");
						boton_borrar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	BorrarComponente(bloque, componente);
						            }

						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
						gridBagConstraints3.gridx = 2;
						gridBagConstraints3.gridy = componente.getPosicion();
						gridBagConstraints3.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_borrar,gridBagConstraints3);
						
						JButton boton_modificar = new JButton();
						if(idioma.equals("español"))
							boton_modificar.setText("Modificar");
						else
							boton_modificar.setText("Modify");
						boton_modificar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	Session session = UtilidadHibernate.getSessionFactory().openSession();
						            		
										List message = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' AND nombre = '"+componente.getNombre()+"' AND posicion = '"+componente.getPosicion()+"' AND tipo= '"+componente.getTipo()+"'").list();
										Iterator iter = message.iterator();
										
										ComponenteBloque c = (ComponenteBloque) iter.next();
										
										ModificarComponente ventana = new ModificarComponente(EditorDeBloques.this, c);
										ventana.setLocationRelativeTo(EditorDeBloques.this);
										ventana.setVisible(true);
										
										
										for (; iter.hasNext(); ){
											ComponenteBloque componente2 = (ComponenteBloque) iter.next();
											Transaction tx = session.beginTransaction();
											componente2.setNombre(c.getNombre());
											tx.commit();
										}
									
										session.close();
										ActualizarListaComponentes();
										PintarComponentes();
										jPanel1.repaint();
										jPanel1.updateUI();
										
										
						            }


						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
						gridBagConstraints4.gridx = 3;
						gridBagConstraints4.gridy = componente.getPosicion();
						gridBagConstraints4.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_modificar,gridBagConstraints4);
					}
					//FECHA MODELO DE MADUREZ
					else if (componente.getTipo()==7 && bloque.getTipo()==2){
						final JDateChooser campofecha = new JDateChooser();
						campofecha.setPreferredSize(new Dimension(100,25));
						campofecha.setBorder(BorderFactory.createLineBorder(Color.green, 1));
						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");
						}		
						
						//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);
						
						JButton boton_borrar = new JButton();
						if(idioma.equals("español"))
							boton_borrar.setText("Borrar");
						else
							boton_borrar.setText("Delete");
						boton_borrar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	BorrarComponente(bloque, componente);
						            }

						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
						gridBagConstraints3.gridx = 2;
						gridBagConstraints3.gridy = componente.getPosicion();
						gridBagConstraints3.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_borrar,gridBagConstraints3);
						
						JButton boton_modificar = new JButton();
						if(idioma.equals("español"))
							boton_modificar.setText("Modificar");
						else
							boton_modificar.setText("Modify");
						boton_modificar.addActionListener(

						        new ActionListener() {  // clase interna anónima

						            // manejar evento de botón
						            public void actionPerformed( ActionEvent evento )
						            {
						            	Session session = UtilidadHibernate.getSessionFactory().openSession();
						            		
										List message = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' AND nombre = '"+componente.getNombre()+"' AND posicion = '"+componente.getPosicion()+"' AND tipo= '"+componente.getTipo()+"'").list();
										Iterator iter = message.iterator();
										
										ComponenteBloque c = (ComponenteBloque) iter.next();
										
										ModificarComponente ventana = new ModificarComponente(EditorDeBloques.this, c);
										ventana.setLocationRelativeTo(EditorDeBloques.this);
										ventana.setVisible(true);
										
										
										for (; iter.hasNext(); ){
											ComponenteBloque componente2 = (ComponenteBloque) iter.next();
											Transaction tx = session.beginTransaction();
											componente2.setNombre(c.getNombre());
											tx.commit();
										}

										session.close();
										ActualizarListaComponentes();
										PintarComponentes();
										jPanel1.repaint();
										jPanel1.updateUI();
						            }


						        } // fin de clase interna anónima
						      ); // fin de la llamada a addActionListener
						GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
						gridBagConstraints4.gridx = 3;
						gridBagConstraints4.gridy = componente.getPosicion();
						gridBagConstraints4.insets = new Insets(5, 5, 0, 0);
						
						jPanel1.add(boton_modificar,gridBagConstraints4);
					}

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

		
		BloqueConstructivo bloque = ObtenerBloque(desdePrincipal);
		
		if (idioma.equals("español"))
			this.setTitle("Editar componentes - Bloque: " + bloque.getNombre());
		else
			this.setTitle("Edit components - Block: " + bloque.getNombre());
		this.setContentPane(getJContentPane());
		this.addWindowListener(new java.awt.event.WindowAdapter() {   
			public void windowClosing(java.awt.event.WindowEvent e) {    
				
				
				BloqueConstructivo bloque = ObtenerBloque(desdePrincipal);
	
				Session session = UtilidadHibernate.getSessionFactory().openSession();
				Transaction tx = session.beginTransaction();
				
				boolean flagComponentePortafolio = true;
				ArrayList<String>listaComponentesMM = new ArrayList<String>();
				if (idioma.equals("español")){
					listaComponentesMM.add("Puntuación");
					listaComponentesMM.add("Media parcial");
					listaComponentesMM.add("Media global");
					listaComponentesMM.add("Fecha modelo madurez");
				}
				else{
					listaComponentesMM.add("Score");
					listaComponentesMM.add("Partial average");
					listaComponentesMM.add("Global average");
					listaComponentesMM.add("Date madurity model");
				}
				
				List messages = session.createQuery("from ComponenteBloque where id_bloque = '"+bloque.getIdBloque()+"' order by posicion asc").list();
				
				if (bloque.getTipo()==1){
					for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
						ComponenteBloque componente = (ComponenteBloque) iter.next();
					
						if (componente.getTipo()==4 && bloque.getTipo()==1){
							flagComponentePortafolio = false;
						}
					}
					
					//Mostramos un aviso si no existe dicho componente
					if (flagComponentePortafolio){
						if (idioma.equals("español"))
							JOptionPane.showMessageDialog(EditorDeBloques.this,"Debe insertar el componente 'Cálculo del portafolio' para poder completar la matriz portafolio.", "AVISO", JOptionPane.WARNING_MESSAGE);
						else
							JOptionPane.showMessageDialog(EditorDeBloques.this,"You must insert the 'Calculation of portfolio' component to complete the portfolio matrix.", "WARNING", JOptionPane.WARNING_MESSAGE);
					}
				}else if (bloque.getTipo()==2){
					for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
						ComponenteBloque componente = (ComponenteBloque) iter.next();
						
						if (componente.getTipo()==4 && bloque.getTipo()==2){
							if (idioma.equals("español"))
								listaComponentesMM.remove("Puntuación");
							else
								listaComponentesMM.remove("Score");
						}
						else if (componente.getTipo()==5 && bloque.getTipo()==2){
							if (idioma.equals("español"))
								listaComponentesMM.remove("Media parcial");
							else
								listaComponentesMM.remove("Partial average");
						}
						else if (componente.getTipo()==6 && bloque.getTipo()==2){
							if (idioma.equals("español"))
								listaComponentesMM.remove("Media global");
							else
								listaComponentesMM.remove("Global average");
						}
						else if (componente.getTipo()==7 && bloque.getTipo()==2){
							if (idioma.equals("español"))
								listaComponentesMM.remove("Fecha modelo madurez");
							else
								listaComponentesMM.remove("Date madurity model");
						}
					}
					
					//Mostramos un aviso si no falta alguno de los componentes Modelo de Madurez
					if (listaComponentesMM.size()>0){
						if (idioma.equals("español"))
							JOptionPane.showMessageDialog(EditorDeBloques.this,"Debe insertar el/los siguiente/s "+listaComponentesMM.size()+" componentes para poder mostrar correctamente los gráficos e informes relacionados con el modelo de madurez:\n"+ listaComponentesMM.toString(), "AVISO", JOptionPane.WARNING_MESSAGE);
						else
							JOptionPane.showMessageDialog(EditorDeBloques.this,"You must insert the follow "+listaComponentesMM.size()+" component/s to show graphics and reports correctly related with madurity model:\n"+ listaComponentesMM.toString(), "WARNING", JOptionPane.WARNING_MESSAGE);
					}
				}
				
				tx.commit();
				session.close();
				
			}
			public void windowOpened(java.awt.event.WindowEvent e) {
				ActualizarListaComponentes();

				jScrollPane1.setVisible(false);
				jList1.setVisible(false);
				jLabel.setVisible(false);
				jTextField.setVisible(false);
				jLabel1.setVisible(false);
				jLabel21.setVisible(false);
				jLabel22.setVisible(false);
				
				PintarComponentes();
			}
		});
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJPanel(), BorderLayout.EAST);
			jContentPane.add(getJPanel7(), BorderLayout.CENTER);
		}
		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 BorderLayout());
			jPanel.setPreferredSize(new Dimension(200, 0));
			jPanel.add(getJPanel2(), BorderLayout.CENTER);
			jPanel.add(getJPanel5(), BorderLayout.NORTH);
		}
		return jPanel;
	}

	/**
	 * This method initializes jPanel2	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel2() {
		if (jPanel2 == null) {
			jPanel2 = new JPanel();
			jPanel2.setLayout(new BorderLayout());
			Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
			jPanel2.setSize(250,d.height-200);
			//jPanel2.setPreferredSize(new Dimension(200, 800));
			jPanel2.add(getJPanel6(), BorderLayout.SOUTH);
			jPanel2.add(getJPanel4(), BorderLayout.CENTER);
		}
		return jPanel2;
	}

	/**
	 * This method initializes jPanel5	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel5() {
		if (jPanel5 == null) {
			GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
			gridBagConstraints7.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints7.gridy = 3;
			gridBagConstraints7.weightx = 1.0;
			gridBagConstraints7.insets = new Insets(0, 10, 0, 10);
			gridBagConstraints7.gridx = 0;
			GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
			gridBagConstraints6.gridx = 0;
			gridBagConstraints6.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints6.insets = new Insets(0, 10, 10, 10);
			gridBagConstraints6.gridy = 2;
			jLabel111 = new JLabel();
			if (idioma.equals("español"))
				jLabel111.setText("Tipo de componente:");
			else
				jLabel111.setText("Type of the component:");
			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
			gridBagConstraints4.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints4.gridy = 1;
			gridBagConstraints4.weightx = 1.0;
			gridBagConstraints4.insets = new Insets(0, 10, 10, 10);
			gridBagConstraints4.gridx = 0;
			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
			gridBagConstraints1.gridx = 0;
			gridBagConstraints1.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints1.insets = new Insets(0, 10, 10, 10);
			gridBagConstraints1.gridy = 0;
			jLabel211 = new JLabel();
			if (idioma.equals("español"))
				jLabel211.setText("Nombre del componente:");
			else
				jLabel211.setText("Name of the component:");
			jPanel5 = new JPanel();
			jPanel5.setLayout(new GridBagLayout());
			jPanel5.setPreferredSize(new Dimension(162, 120));
			jPanel5.setMaximumSize(new Dimension(162, 107));
			jPanel5.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
			jPanel5.setBackground(SystemColor.controlHighlight);
			jPanel5.add(jLabel211, gridBagConstraints1);
			jPanel5.add(getJTextField11(), gridBagConstraints4);
			jPanel5.add(jLabel111, gridBagConstraints6);
			jPanel5.add(getJComboBox11(), gridBagConstraints7);
		}
		return jPanel5;
	}

	/**
	 * This method initializes jTextField11	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getJTextField11() {
		if (jTextField11 == null) {
			jTextField11 = new JTextField();
		}
		return jTextField11;
	}

	/**
	 * This method initializes jComboBox11	
	 * 	
	 * @return javax.swing.JComboBox	
	 */
	private JComboBox getJComboBox11() {
		if (jComboBox11 == null) {
			jComboBox11 = new JComboBox();
			if (idioma.equals("español")){
				jComboBox11.addItem("Texto");
				jComboBox11.addItem("Lista");
				jComboBox11.addItem("Si-No");
				jComboBox11.addItem("Fecha");
			}
			else{
				jComboBox11.addItem("Text");
				jComboBox11.addItem("List");
				jComboBox11.addItem("Yes-No");
				jComboBox11.addItem("Date");
			}
			
			
			BloqueConstructivo bloque = ObtenerBloque(desdePrincipal);
			
			if (bloque.getTipo()==1){
				if (idioma.equals("español"))
					jComboBox11.addItem("Calculo del portafolio");
				else
					jComboBox11.addItem("Calculation of portfolio");
			}
			else if (bloque.getTipo()==2){
				if (idioma.equals("español")){
					jComboBox11.addItem("Puntuación modelo de madurez");
					jComboBox11.addItem("Media parcial modelo de madurez");
					jComboBox11.addItem("Media global modelo de madurez");
					jComboBox11.addItem("Fecha modelo de madurez");
				}
				else{
					jComboBox11.addItem("Score Maturity model");
					jComboBox11.addItem("Partial average Maturity model");
					jComboBox11.addItem("Global average Maturity model");
					jComboBox11.addItem("Date Maturity model");
				}
			}
			jComboBox11.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					if (jComboBox11.getSelectedItem().equals("Lista") || jComboBox11.getSelectedItem().equals("List")){
						ActualizarListaBloques();
						jScrollPane1.setVisible(true);
						jList1.setVisible(true);
						jLabel.setVisible(true);
						jTextField.setVisible(true);
						jLabel1.setVisible(true);
						jLabel21.setVisible(true);
						jLabel22.setVisible(true);
					}
					else{
						jScrollPane1.setVisible(false);
						jList1.setVisible(false);
						jLabel.setVisible(false);
						jTextField.setVisible(false);
						jLabel1.setVisible(false);
						jLabel21.setVisible(false);
						jLabel22.setVisible(false);
						modelolista.removeAllElements();
					}
				}
			});
		}
		return jComboBox11;
	}

	/**
	 * This method initializes jPanel6	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel6() {
		if (jPanel6 == null) {
			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
			gridBagConstraints2.insets = new Insets(10, 0, 10, 0);
			jPanel6 = new JPanel();
			jPanel6.setLayout(new GridBagLayout());
			jPanel6.setBackground(SystemColor.controlHighlight);
			jPanel6.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.lightGray));
			jPanel6.add(getJButton111(), gridBagConstraints2);
		}
		return jPanel6;
	}

	/**
	 * This method initializes jButton111	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton111() {
		if (jButton111 == null) {
			jButton111 = new JButton();
			if (idioma.equals("español"))
				jButton111.setText("Añadir Componente");
			else
				jButton111.setText("Add component");
			jButton111.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
						//ALMACENAMOS EL COMPONENTE EN LA BASE DE DATOS
						try{
							
							if (jTextField11.getText().trim().equals("")){
								if (idioma.equals("español"))
									throw new Exception ("El nombre del componente está vacío.");
								else
									throw new Exception ("The name of the component is empty.");
							}else{ 
		
								BloqueConstructivo bloque = ObtenerBloque(desdePrincipal);
								
								//Creamos la sesión para almacenar el nombre del plantilla en la BD
								Session session = UtilidadHibernate.getSessionFactory().openSession();
								
								//Comprobamos que el nombre del componente no se repita en la base de datos.
								List mensaje = session.createQuery("from ComponenteBloque where nombre ='"+jTextField11.getText()+"' AND id_bloque='"+ObtenerBloque(desdePrincipal).getIdBloque()+"'").list();
								if (mensaje.size() <= 0){
									
									
									//Obtenemos la posición del componente de está situado más abajo en el panel (la posición mayor)
									List messages = session.createSQLQuery("SELECT MAX(posicion) from Componente_Bloque where id_bloque = '"+bloque.getIdBloque()+"'").list();

									Iterator iter = messages.iterator();
									Integer numComponentes = (Integer) iter.next();
									
		
									final ComponenteBloque componente = new ComponenteBloque();
									componente.setNombre(jTextField11.getText());
									componente.setBloqueConstructivo(bloque);
									
									if (numComponentes==null){
										numComponentes=-1;
										componente.setPosicion(numComponentes+1);
									}
									else
										componente.setPosicion(numComponentes+1);
									
									componente.setTipo(jComboBox11.getSelectedIndex());
									
									JLabel etiqueta = new JLabel();
									etiqueta.setText(jTextField11.getText()+ ":");
									etiqueta.setPreferredSize(new Dimension(80,25));
														
									GridBagConstraints gridBagConstraints = new GridBagConstraints();
									gridBagConstraints.gridx = 0;
									gridBagConstraints.gridy = numComponentes+1;
									gridBagConstraints.insets = new Insets(5, 0, 0, 0);
									
									
									//LISTA
									if (jComboBox11.getSelectedItem().equals("Lista") || jComboBox11.getSelectedItem().equals("List")){

										listaComponentes.add(componente);
										
										List messages3 = session.createQuery("SELECT COUNT(*) from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"'").list();
										Iterator iter3 = messages3.iterator();
										Long numero_componentes = (Long) iter3.next();
										int ncomponentes= numero_componentes.intValue()+1;
											
										componente.setOrden(ncomponentes);
										

//										Almacenamos en un vector los bloques seleccionados
										ArrayList<Integer> vector_id_bloque= new ArrayList<Integer>();  //  @jve:decl-index=0:
										ArrayList<BloqueConstructivo> vector_bloque= new ArrayList<BloqueConstructivo>();
										vector_elementos_seleccionados= jList1.getSelectedIndices();
										
										ArrayList<Integer> vector_id_lista = new ArrayList<Integer>();

										//Vector<Integer> v = new Vector<Integer>(vector_elementos_seleccionados.length);
										for (int i=0; i<vector_elementos_seleccionados.length; i++){
											BloqueConstructivo bloque2 = (BloqueConstructivo) modelolista.getElementAt(vector_elementos_seleccionados[i]);
											vector_id_bloque.add(bloque2.getIdBloque());
											vector_bloque.add(bloque2);
											//vector_id_lista.add(vector_elementos_seleccionados[i]);
											
										}	
										
										if (vector_id_bloque.size()<1){	
											//flag_elemento_lista_no_seleccionado = true;
											//flag_cardinalidad=false;
											if (idioma.equals("español"))
												throw new Exception("Debes seleccionar al menos un elemento de la lista.");
											else
												throw new Exception("You must select at least one element of the list.");
										}
										
										
										//Ya hay un elemento seleccionado
										flag_elemento_lista_no_seleccionado=false;
										
										//Comprobamos que introducen correctamente el formato de cardinalidad (0 -> infinito)
										boolean flag_cardionalidad = esEntero(jTextField.getText());
										if (!flag_cardionalidad){
											if (idioma.equals("español"))
												throw new Exception ("Error, formato de cardionalidad incorrecto.Debes introducir un valor entero positivo o '0'.\n· C=0 -> Cardinalidad infinita\n· C>0 -> Cardinalidad C");
											else
												throw new Exception ("Error, wrong cardinality format. You must enter an positive integer value or '0'.\n· C=0 -> Infinite cardinality\n· C>0 -> Cardinality C");
										}
										
										componente.setCardinalidadLista(Integer.parseInt(jTextField.getText()));
										
										Transaction tx = session.beginTransaction();
										
										//Convertimos los objetos en persistentes y los guardamos
										session.save(componente);
										
										for (int i=0; i<vector_bloque.size(); i++){
											SeleccionComponenteListaBloque seleccioncomponente = new SeleccionComponenteListaBloque();
											seleccioncomponente.setBloqueConstructivo(vector_bloque.get(i));
											seleccioncomponente.setComponenteBloque(componente);
											
											tx = session.beginTransaction();
											
											session.save(seleccioncomponente);
											
											tx.commit();
										}		
									}
									//CHECKBOX
									else if (jComboBox11.getSelectedItem().equals("Si-No") || jComboBox11.getSelectedItem().equals("Yes-No")){
										//componente.setValorSi(0);
										
										listaComponentes.add(componente);
										
										List messages3 = session.createQuery("SELECT COUNT(*) from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"'").list();
										Iterator iter3 = messages3.iterator();
										Long numero_componentes = (Long) iter3.next();
										int ncomponentes= numero_componentes.intValue()+1;
											
										componente.setOrden(ncomponentes);
										
										Transaction tx = session.beginTransaction();
										//Convertimos los objetos en persistentes y los guardamos
										session.save(componente);
										
										tx.commit();
									}
									//PORTAFOLIO
									else if (jComboBox11.getSelectedItem().equals("Calculo del portafolio") || jComboBox11.getSelectedItem().equals("Calculation of portfolio")){
										//Comprobamos si ya existe un elemento de tipo portafolio, en cuyo caso, no dejamos añadir uno nuevo.
										List messages2 = session.createQuery("from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"' and tipo = '4'").list();
										if (messages2.size()<1){
											listaComponentes.add(componente);
											
											List messages3 = session.createQuery("SELECT COUNT(*) from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"'").list();
											Iterator iter3 = messages3.iterator();
											Long numero_componentes = (Long) iter3.next();
											int ncomponentes= numero_componentes.intValue()+1;
												
											componente.setOrden(ncomponentes);
											
											Transaction tx = session.beginTransaction();
											
											//Convertimos los objetos en persistentes y los guardamos
											session.save(componente);
											
											tx.commit();
										}
										else{
											//flag_elemento_lista_no_seleccionado=false;
											//flag_cardinalidad = false;
											if (idioma.equals("español"))
												throw new Exception ("Error, ya existe un componente de tipo Portafolio");
											else
												throw new Exception ("Error, There is already a component of type Portfolio");
										}
									}
									//MEDIA PARCIAL
									else if (jComboBox11.getSelectedItem().equals("Media parcial modelo de madurez") || jComboBox11.getSelectedItem().equals("Partial average Maturity model")){
										
//										Comprobamos si ya existe un elemento de tipo Media Parcial, en cuyo caso, no dejamos añadir uno nuevo.
										List messages2 = session.createQuery("from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"' and tipo = '5'").list();
										if (messages2.size()<1){
											listaComponentes.add(componente);
											
											List messages3 = session.createQuery("SELECT COUNT(*) from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"'").list();
											Iterator iter3 = messages3.iterator();
											Long numero_componentes = (Long) iter3.next();
											int ncomponentes= numero_componentes.intValue()+1;
												
											componente.setOrden(ncomponentes);
											
											Transaction tx = session.beginTransaction();
											
											//Convertimos los objetos en persistentes y los guardamos
											session.save(componente);
											
											tx.commit();
										}
										else{
											//flag_elemento_lista_no_seleccionado=false;
											//flag_cardinalidad = false;
											if (idioma.equals("español"))
												throw new Exception ("Error, ya existe un componente de tipo media parcial");
											else
												throw new Exception ("Error, There is already a component of type partial average");
										}
	
									}
									//MEDIA GLOBAL
									else if (jComboBox11.getSelectedItem().equals("Media global modelo de madurez") || jComboBox11.getSelectedItem().equals("Global average Maturity model")){
										
//										Comprobamos si ya existe un elemento de tipo Media Global, en cuyo caso, no dejamos añadir uno nuevo.
										List messages2 = session.createQuery("from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"' and tipo = '6'").list();
										if (messages2.size()<1){
											listaComponentes.add(componente);
											
											List messages3 = session.createQuery("SELECT COUNT(*) from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"'").list();
											Iterator iter3 = messages3.iterator();
											Long numero_componentes = (Long) iter3.next();
											int ncomponentes= numero_componentes.intValue()+1;
												
											componente.setOrden(ncomponentes);
											
											Transaction tx = session.beginTransaction();
											
											//Convertimos los objetos en persistentes y los guardamos
											session.save(componente);
											
											tx.commit();
										}
										else{
											//flag_elemento_lista_no_seleccionado=false;
											//flag_cardinalidad = false;
											if (idioma.equals("español"))
												throw new Exception ("Error, ya existe un componente de tipo Media Global");
											else
												throw new Exception ("Error, There is already a component of type Global average");
										}
										
									}
									//FECHA_MODELO_MADUREZ
									else if (jComboBox11.getSelectedItem().equals("Fecha modelo de madurez") || jComboBox11.getSelectedItem().equals("Date Maturity model")){
										
									//	Comprobamos si ya existe un elemento de tipo fecha MM, en cuyo caso, no dejamos añadir uno nuevo.
										List messages2 = session.createQuery("from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"' and tipo = '7'").list();
										if (messages2.size()<1){
											listaComponentes.add(componente);
											
											List messages3 = session.createQuery("SELECT COUNT(*) from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"'").list();
											Iterator iter3 = messages3.iterator();
											Long numero_componentes = (Long) iter3.next();
											int ncomponentes= numero_componentes.intValue()+1;
												
											componente.setOrden(ncomponentes);
											
											Transaction tx = session.beginTransaction();
											
											//Convertimos los objetos en persistentes y los guardamos
											session.save(componente);
											
											tx.commit();
										}
										else{
											//flag_elemento_lista_no_seleccionado=false;
											//flag_cardinalidad = false;
											if (idioma.equals("español"))
												throw new Exception ("Error, ya existe un componente de tipo fecha Modelo Madurez");
											else
												throw new Exception ("Error, There is already a component of type Date Maturity Model");
										}
			
									}
									//RESTO DE COMPONENTES
									else {
										listaComponentes.add(componente);
										
										List messages3 = session.createQuery("SELECT COUNT(*) from ComponenteBloque where id_bloque ='"+bloque.getIdBloque()+"'").list();
										Iterator iter3 = messages3.iterator();
										Long numero_componentes = (Long) iter3.next();
										int ncomponentes= numero_componentes.intValue()+1;
											
										componente.setOrden(ncomponentes);
										
										Transaction tx = session.beginTransaction();
										
										//Convertimos los objetos en persistentes y los guardamos
										session.save(componente);
										
										tx.commit();
									}
									
									List messages_instancia = session.createQuery("from Instancia where id_bloque = '"+bloque.getIdBloque()+"'").list();
									for (Iterator iter_instancia = messages_instancia.iterator(); iter_instancia.hasNext();){
										Instancia instancia = (Instancia) iter_instancia.next();
										
										ComponenteInstancia componente_instancia = new ComponenteInstancia();
										componente_instancia.setComponenteBloque(componente);
										componente_instancia.setInstancia(instancia);
										
										
										Transaction tx = session.beginTransaction();
										
										//Convertimos los objetos en persistentes y los guardamos
										session.save(componente_instancia);
										
										tx.commit();
									}
				
									session.close();
									jPanel1.add(etiqueta,gridBagConstraints);
									
									ActualizarListaComponentes();
									PintarComponentes();
									jPanel1.updateUI();
									
									//JOptionPane.showMessageDialog(null, "El componente se ha añadido con éxito");
								}
								else{
									if (idioma.equals("español"))
										throw new Exception ("Error, ya existe un componente con ese nombre");
									else
										throw new Exception ("Error, There is already a component with that name");
								}
								
								
							}
							
						}	
						catch (Exception exp) {
							JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
						}

				}
			});
		}
		return jButton111;
	}

	/**
	 * This method initializes jPanel4	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel4() {
		if (jPanel4 == null) {
			GridBagConstraints gridBagConstraints21 = new GridBagConstraints();
			gridBagConstraints21.gridx = 0;
			gridBagConstraints21.anchor = GridBagConstraints.WEST;
			gridBagConstraints21.insets = new Insets(0, 10, 5, 0);
			gridBagConstraints21.gridy = 8;
			jLabel22 = new JLabel();
			if (idioma.equals("español"))
				jLabel22.setText("C > 0 ...... Lista de tamaño C");
			else
				jLabel22.setText("C > 0 ...... List of C size");
			GridBagConstraints gridBagConstraints12 = new GridBagConstraints();
			gridBagConstraints12.gridx = 0;
			gridBagConstraints12.anchor = GridBagConstraints.WEST;
			gridBagConstraints12.insets = new Insets(0, 10, 5, 0);
			gridBagConstraints12.gridy = 7;
			jLabel21 = new JLabel();
			if (idioma.equals("español"))
				jLabel21.setText("C = 0 .... Lista de tamaño Infinito");
			else
				jLabel21.setText("C = 0 .... list of infinite size");
			GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
			gridBagConstraints11.gridx = 0;
			gridBagConstraints11.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints11.insets = new Insets(10, 10, 10, 10);
			gridBagConstraints11.gridy = 4;
			jLabel1 = new JLabel();
			if (idioma.equals("español"))
				jLabel1.setText("Se relaciona con:");
			else
				jLabel1.setText("related with:");
			GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
			gridBagConstraints5.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints5.gridy = 9;
			gridBagConstraints5.weightx = 1.0;
			gridBagConstraints5.insets = new Insets(0, 10, 10, 10);
			gridBagConstraints5.gridx = 0;
			GridBagConstraints gridBagConstraints = new GridBagConstraints();
			gridBagConstraints.gridx = 0;
			gridBagConstraints.insets = new Insets(0, 10, 10, 10);
			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints.gridy = 6;
			jLabel = new JLabel();
			if (idioma.equals("español"))
				jLabel.setText("Cardinalidad (C):");
			else
				jLabel.setText("Cardinality (C):");
			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
			gridBagConstraints3.fill = GridBagConstraints.BOTH;
			gridBagConstraints3.gridy = 5;
			gridBagConstraints3.weightx = 1.0;
			gridBagConstraints3.weighty = 1.0;
			gridBagConstraints3.insets = new Insets(0, 10, 10, 10);
			gridBagConstraints3.gridx = 0;
			jPanel4 = new JPanel();
			jPanel4.setLayout(new GridBagLayout());
			jPanel4.setBackground(SystemColor.controlHighlight);
			jPanel4.setPreferredSize(new Dimension(279, 300));
			jPanel4.add(getJScrollPane1(), gridBagConstraints3);
			jPanel4.add(jLabel, gridBagConstraints);
			jPanel4.add(getJTextField(), gridBagConstraints5);
			jPanel4.add(jLabel1, gridBagConstraints11);
			jPanel4.add(jLabel21, gridBagConstraints12);
			jPanel4.add(jLabel22, gridBagConstraints21);
		}
		return jPanel4;
	}

	/**
	 * This method initializes jScrollPane1	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane1() {
		if (jScrollPane1 == null) {
			jScrollPane1 = new JScrollPane();
			jScrollPane1.setViewportView(getJList1());
		}
		return jScrollPane1;
	}

	/**
	 * This method initializes jList1	
	 * 	
	 * @return javax.swing.JList	
	 */
	private JList getJList1() {
		if (jList1 == null) {
			jList1 = new JList();
			jList1.setSelectionMode(
			        ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
			jList1.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					flag_elemento_lista_no_seleccionado = false;
				}
			});
		}
		return jList1;
	}

	/**
	 * This method initializes jTextField	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getJTextField() {
		if (jTextField == null) {
			jTextField = new JTextField();
		}
		return jTextField;
	}

	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			if (idioma.equals("español"))
				jButton.setText("Ordenar componentes");
			else
				jButton.setText("Order components");
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					MantenimientoComponente ventana = new MantenimientoComponente(EditorDeBloques.this);
					ventana.setLocationRelativeTo(EditorDeBloques.this);
					ventana.setVisible(true);
				}
			});
		}
		return jButton;
	}

	/**
	 * This method initializes jPanel7	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel7() {
		if (jPanel7 == null) {
			jPanel7 = new JPanel();
			jPanel7.setLayout(new BorderLayout());
			jPanel7.add(getJScrollPane(), BorderLayout.CENTER);
			jPanel7.add(getJPanel8(), BorderLayout.NORTH);
		}
		return jPanel7;
	}

	/**
	 * This method initializes jPanel8	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel8() {
		if (jPanel8 == null) {
			GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
			gridBagConstraints8.gridx = 7;
			gridBagConstraints8.insets = new Insets(0, 0, 0, 0);
			gridBagConstraints8.gridy = 0;
			jPanel8 = new JPanel();
			jPanel8.setLayout(new GridBagLayout());
			jPanel8.setPreferredSize(new Dimension(162, 35));
			jPanel8.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, Color.lightGray));
			jPanel8.setBackground(new Color(102, 102, 102));
			jPanel8.add(getJButton(), gridBagConstraints8);
		}
		return jPanel8;
	}

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