package interfaz;

import javax.swing.SwingUtilities;
import java.awt.BorderLayout;

import javax.swing.DefaultListModel;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JToolBar;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.BorderFactory;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import java.awt.Color;
import java.awt.Frame;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;
import java.awt.CardLayout;
import java.awt.Toolkit;

import javax.swing.JTextField;
import javax.swing.JComboBox;
import java.awt.Dimension;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;


import java.awt.Insets;
import javax.swing.SwingConstants;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Cursor;
import java.sql.*;

import javax.swing.border.BevelBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.plaf.metal.MetalLookAndFeel;
import javax.swing.plaf.metal.OceanTheme;

import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.awt.event.KeyEvent;
import java.awt.SystemColor;
import java.io.File;
import java.io.IOException;

import javax.swing.JList;

import negocio.Aspecto;
import negocio.BloqueConstructivo;
import negocio.ComponenteInstancia;
import negocio.FaseBloque;
import negocio.FasePlantilla;
import negocio.Idioma;
import negocio.Instancia;
import negocio.claseXML;
import negocio.Plantilla;
import negocio.Proyecto;
import negocio.Usuario;
import negocio.VistaBloque;
import negocio.VistaPlantilla;
import negocio.Xml;
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.apache.batik.ext.awt.image.rendered.PadRed;
import org.dbunit.dataset.datatype.TypeCastException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import persistencia.UtilidadHibernate;
import javax.swing.JFileChooser;

public class Principal extends JFrame {
	
	/*********************************************************************/	
	/************************* VARIABLES *********************************/
	/*********************************************************************/

	private static final long serialVersionUID = 1L;

	private JPanel jContentPane = null;

	private JMenuBar jJMenuBar = null;

	private JMenu jMenu = null;

	private JMenu jMenu1 = null;

	private JMenu jMenu3 = null;

	private JToolBar jJToolBarBar = null;

	private JButton jButton2 = null;

	private JMenuItem jMenuItem = null;

	private JMenuItem jMenuItem4 = null;

	private JMenuItem jMenuItem5 = null;

	private JMenuItem jMenuItem6 = null;

	private JMenuItem jMenuItem7 = null;

	private JMenuItem jMenuItem11 = null;
	
	public JLabel jLabel = null;

	private JMenu jMenu4 = null;

	private JPanel jPanel1 = null;

	private JMenu jMenu5 = null;

	private JMenuItem jMenuItem8 = null;

	private JMenuItem jMenuItem12 = null;

	private JScrollPane jScrollPane = null;

	private JMenuItem jMenuItem14 = null;

	private JMenuItem jMenuItem15 = null;
	
	public JList jList = null;
	
	public DefaultListModel modelo = new DefaultListModel();

	private JPanel jPanel = null;

	private JPanel jPanel2 = null;

	private JPanel jPanel3 = null;

	private JLabel jLabel1 = null;

	private JTextField jTextField = null;

	private JLabel jLabel2 = null;

	private JScrollPane jScrollPane1 = null;

	private JPanel jPanel6 = null;

	private JLabel jLabel5 = null;

	public JList jList3 = null;
	
	public DefaultListModel modeloBloque = new DefaultListModel();
	
	public DefaultListModel modeloFase = new DefaultListModel();
	
	public DefaultListModel modeloVista = new DefaultListModel();

	private JScrollPane jScrollPane2 = null;

	private JScrollPane jScrollPane3 = null;

	private JPanel jPanel61 = null;

	private JLabel jLabel51 = null;

	private JLabel jLabel511 = null;

	private JButton jButton3 = null;

	private JMenuItem jMenuItem1 = null;

	private JMenu jMenu2 = null;

	private JMenuItem jMenuItem2 = null;

	private JMenuItem jMenuItem3 = null;

	public JMenuItem jMenuItem9 = null;
	
	public String idioma;  //  @jve:decl-index=0:
	
	public String aspecto;  //  @jve:decl-index=0:

	private JMenuItem jMenuItem10 = null;
	
	public Usuario usuario=null;
	
	public boolean flag_cambio_idioma =false;

	private JMenuItem jMenuItem121 = null;

	private JScrollPane jScrollPane4 = null;

	private JList jList1 = null;

	private JScrollPane jScrollPane5 = null;

	private JList jList2 = null;

	private JMenuItem jMenuItem122 = null;

	private JTextArea jTextArea = null;

	private JMenu jMenu6 = null;

	private JMenu jMenu7 = null;

	private JMenu jMenu8 = null;

	private JMenuItem jMenuItem123 = null;

	private JMenuItem jMenuItem124 = null;

	private JButton jButton = null;

	private JPanel jPanel4 = null;

	private JMenuItem jMenuItem126 = null;

	private JMenuItem jMenuItem127 = null;

	private JMenuItem jMenuItem128 = null;

	private JMenuItem jMenuItem129 = null;

	private JMenuItem jMenuItem125 = null;

	private JMenuItem jMenuItem1210 = null;

	private JMenuItem jMenuItem1211 = null;
	
	public Plantilla marco_seleccionado;

	public JLabel jLabel3 = null;

	public JTextField jTextField1 = null;

	private JMenuItem jMenuItem1212 = null;

	private JMenuItem jMenuItem1213 = null;

	private JMenuItem jMenuItem1214 = null;

	private JFileChooser jFileChooser = null;  //  @jve:decl-index=0:visual-constraint="822,109"

	private JButton jButton1 = null;

	private JButton jButton4 = null;

	private JButton jButton5 = null;

	private JButton jButton6 = null;

	private JButton jButton7 = null;

	private JButton jButton8 = null;

	private JLabel jLabel4 = null;

	private JLabel jLabel41 = null;

	private JButton jButton9 = null;

	private JButton jButton10 = null;

	private JButton jButton11 = null;

	private JButton jButton12 = null;

	private JLabel jLabel6 = null;

	private JMenuItem jMenuItem1215 = null;

	private JMenu jMenu9 = null;

	private JMenuItem jMenuItem1216 = null;

	private JMenuItem jMenuItem1217 = null;

	private JMenuItem jMenuItem1218 = null;
	

	/*********************************************************************/	
	/************************* FUNCIONES *********************************/
	/*********************************************************************/
	
	private static void initLookAndFeel(String lookAndFeel) {
		if (lookAndFeel != null) {
			if (lookAndFeel.equals("Metal")) {
				lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
				//lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";
			}
			else if (lookAndFeel.equals("System")) {
				lookAndFeel = UIManager.getSystemLookAndFeelClassName();
			}
			/*else if (lookAndFeel.equals("Motif")) {
				lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
			}
			else if (lookAndFeel.equals("GTK")) {
				lookAndFeel = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
			}
			else if (lookAndFeel.equals("winLaf")){
					lookAndFeel = "net.java.plaf.windows.WindowsLookAndFeel";
			}*/
			else {
				System.err.println("Valor no esperado del LOOKANDFEEL especificado: " + lookAndFeel);
				lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
			}
			try {
				UIManager.setLookAndFeel(lookAndFeel);
//		 If L&F = "Metal", fijar el tema
				if (lookAndFeel.equals("Metal")) {
					MetalLookAndFeel.setCurrentTheme(new OceanTheme());
					UIManager.setLookAndFeel(new MetalLookAndFeel());
				}
			}
			catch (ClassNotFoundException e) {
				System.err.println("No se puede encontrar la clase especificada para el:" + lookAndFeel);
				System.err.println("Ha incluido la librería L&F en el path de las clases?");
				System.err.println("Usando el valor por defecto de look and feel.");
			}
			catch (UnsupportedLookAndFeelException e) {
				System.err.println("No puede utilizarse el look and feel (" + lookAndFeel + ") en esta plataforma.");
				System.err.println("Usando el valor por defecto de look and feel.");
			}
			catch (Exception e) {
				System.err.println("Por alguna razoón el look and feel (" + lookAndFeel + "), especificado no es accesible.");
				System.err.println("Usando el valor por defecto de look and feel.");
				e.printStackTrace();
			}
		}
	}
	
	private void cambiarLookAndFeel(String lnfName){
		
		initLookAndFeel(lnfName);
		SwingUtilities.updateComponentTreeUI(this);
		this.pack();
		this.setExtendedState(this.MAXIMIZED_BOTH);
	}
	
	public void Tamaño_ventana ( JDialog ventana ){
		
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		if (d.height > 1024)
			ventana.setSize(550, d.height-600);
		else if (d.height > 768)
			ventana.setSize(550,d.height-424);
		else if (d.height > 600)
			ventana.setSize(550,d.height-168);
		else if (d.height > 480)
			ventana.setSize(550, d.height-100);
		else if (d.height < 480)
			ventana.setSize(550, d.height-50);
	}
	
	public void Error_seleccionPlantillaProyecto(Usuario usuario, String idioma){
		try{
			if (usuario.getRol().equals("Developer")){
				if (idioma.equals("español"))
					throw new Exception("Error, selecciona una plantilla de la lista.");
				else
					throw new Exception("Error, select a framework of the list.");
			}
			else {
				if (idioma.equals("español"))
					throw new Exception("Error, selecciona un proyecto de la lista.");
				else
					throw new Exception("Error, select a project of the list.");
			}
		}
		catch (Exception exp) {
		// TODO: handle exception
		JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void Informe_fases(){
		try{
			JasperPrint informe = null;
			int numero = jList.getSelectedIndex();
			if (numero >= 0){

				Session sesion= UtilidadHibernate.getSessionFactory().openSession();
				
				HashMap parametros = new HashMap();
				parametros.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION,sesion);
				if (usuario.getRol().equals("Implanter"))
					parametros.put("PL", marco_seleccionado.getIdPlantilla());
				else{
					Plantilla plantilla = (Plantilla) modelo.getElementAt(numero);
					//String tipo_usuario = (String) jComboBox.getSelectedItem();
					parametros.put("PL", plantilla.getIdPlantilla());
				}

				try {
					String fileName;
					if (idioma.equals("español"))
						fileName= "./src/informes/fases.jasper";
					else
						fileName= "./src/informes/phases.jasper";
					informe= JasperFillManager.fillReport(fileName, parametros);
					JasperViewer.viewReport(informe,false);
				}
				catch (JRException e1){
					e1.printStackTrace();
				}
			}
			else{
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona una plantilla de la lista.");
					else
						throw new Exception("Error, select a framework of the list.");
				}
				else {
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona un proyecto de la lista.");
					else
						throw new Exception("Error, select a project of the list.");
				}
			}
		}
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void Informe_vistas(){
		
		try{
			JasperPrint informe = null;
			int numero = jList.getSelectedIndex();
			if (numero >= 0){
		
				Session sesion= UtilidadHibernate.getSessionFactory().openSession();
				
				HashMap parametros = new HashMap();
				parametros.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION,sesion);
				if (usuario.getRol().equals("Implanter"))
					parametros.put("PL", marco_seleccionado.getIdPlantilla());
				else{
					Plantilla plantilla = (Plantilla) modelo.getElementAt(numero);
					//String tipo_usuario = (String) jComboBox.getSelectedItem();
					parametros.put("PL", plantilla.getIdPlantilla());
				}
	

				try {
					String fileName;
					if (idioma.equals("español"))
						fileName= "./src/informes/vistas.jasper";
					else
						fileName= "./src/informes/views.jasper";
					informe= JasperFillManager.fillReport(fileName, parametros);
					JasperViewer.viewReport(informe,false);
				}
				catch (JRException e1){
					e1.printStackTrace();
				}
			}
			else{
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona una plantilla de la lista.");
					else
						throw new Exception("Error, select a framework of the list.");
				}
				else {
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona un proyecto de la lista.");
					else
						throw new Exception("Error, select a project of the list.");
				}
			}
		}
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
		
	}
	
	public void Informe_bloques(){
		
		try{
			JasperPrint informe = null;
			int numero = jList.getSelectedIndex();
			if (numero >= 0){
				
				if (usuario.getRol().equals("Implanter")){
					Proyecto proyecto = (Proyecto) modelo.getElementAt(numero);

					Session sesion= UtilidadHibernate.getSessionFactory().openSession();
					
					HashMap parametros = new HashMap();
					parametros.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION,sesion);
					parametros.put("PL", marco_seleccionado.getIdPlantilla());
					
					try {
						String fileName;
						if (idioma.equals("español"))
							fileName= "./src/informes/bloques.jasper";
						else
							fileName= "./src/informes/blocks.jasper";
						
						informe= JasperFillManager.fillReport(fileName, parametros);
						JasperViewer.viewReport(informe,false);
					}
					catch (JRException e1){
						e1.printStackTrace();
					}
				
				}
				else{
					Plantilla plantilla = (Plantilla) modelo.getElementAt(numero);

					Session sesion= UtilidadHibernate.getSessionFactory().openSession();
					
					HashMap parametros = new HashMap();
					parametros.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION,sesion);
					parametros.put("PL", plantilla.getIdPlantilla());
				
					
					try {
						String fileName;
						if (idioma.equals("español"))
							fileName= "./src/informes/bloques.jasper";
						else
							fileName= "./src/informes/blocks.jasper";
						
						informe= JasperFillManager.fillReport(fileName, parametros);
						JasperViewer.viewReport(informe,false);
					}
					catch (JRException e1){
						e1.printStackTrace();
					}
				}
				
			}
			else{
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona una plantilla de la lista.");
					else
						throw new Exception("Error, select a framework of the list.");
				}
				else {
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona un proyecto de la lista.");
					else
						throw new Exception("Error, select a project of the list.");
				}
			}
		}
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void Informe_instancias(){
		try{
			JasperPrint informe = null;
			int numero = jList3.getSelectedIndex();
			int numero_proyecto = jList.getSelectedIndex();
			if (numero >= 0){
				BloqueConstructivo bloque = (BloqueConstructivo) modeloBloque.getElementAt(numero);
				//String tipo_usuario = (String) jComboBox.getSelectedItem();
				Proyecto proyecto = (Proyecto) modelo.getElementAt(numero_proyecto);
				
				
				Session sesion= UtilidadHibernate.getSessionFactory().openSession();
				
				HashMap parametros = new HashMap();
				parametros.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION,sesion);
				parametros.put("BL", bloque.getIdBloque());
				parametros.put("PR", proyecto.getIdProyecto());

				try {
					String fileName;
					if (idioma.equals("español"))
						fileName= "./src/informes/instancias.jasper";
					else
						fileName= "./src/informes/instances.jasper";
					informe= JasperFillManager.fillReport(fileName, parametros);
					JasperViewer.viewReport(informe,false);
				}
				catch (JRException e1){
					e1.printStackTrace();
				}
			}
			else{
				if (idioma.equals("español"))
					throw new Exception("Error, selecciona un bloque de la lista de bloques constructivos.");
				else
					throw new Exception("Error, select a block of the blocklist.");
			}
		}
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void Informe_modelo_madurez(String fecha_inicial, String fecha_final, ArrayList<BloqueConstructivo> listaBloques){
		try{
			JasperPrint informe = null;
			int numero = jList3.getSelectedIndex();
			int numero_proyecto = jList.getSelectedIndex();
			if (numero_proyecto >= 0){
				//BloqueConstructivo bloque = (BloqueConstructivo) modeloBloque.getElementAt(numero);
				//String tipo_usuario = (String) jComboBox.getSelectedItem();
				Proyecto proyecto = (Proyecto) modelo.getElementAt(numero_proyecto);

				Session sesion= UtilidadHibernate.getSessionFactory().openSession();
				
				HashMap parametros = new HashMap();
				parametros.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION,sesion);
				//parametros.put("BL", bloque.getIdBloque());
				parametros.put("PR", proyecto.getIdProyecto());
				parametros.put("fecha_inicial", fecha_inicial);
				parametros.put("fecha_final", fecha_final);
				
				for (int i=0; i<listaBloques.size(); i++){
					parametros.put("bloque" + i, listaBloques.get(i).getIdBloque());
				}

				try {
					String fileName;
					if (idioma.equals("español")){
						if (listaBloques.size()>0)
							fileName= "./src/informes/informe_modelo_madurez.jasper";
						else
							fileName= "./src/informes/informe_modelo_madurez_todos_los_bloques.jasper";
					}
					else{
						if (listaBloques.size()>0)
							fileName= "./src/informes/report_madurity_model.jasper";
						else
							fileName= "./src/informes/report_madurity_model_all_blocks.jasper";
					}
					informe= JasperFillManager.fillReport(fileName, parametros);
					JasperViewer.viewReport(informe,false);
				}
				catch (JRException e1){
					e1.printStackTrace();
				}
			}
			else{
				if (idioma.equals("español"))
					throw new Exception("Error, selecciona un proyecto de la lista de proyectos.");
				else
					throw new Exception("Error, select a project of the project list.");
			}
		}
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void Grafico_modelo_madurez_parcial(String fecha_ini, String fecha_fin, ArrayList<BloqueConstructivo> listaBloques){
		try{
			JasperPrint informe = null;
			int numero = jList3.getSelectedIndex();
			int numero_proyecto = jList.getSelectedIndex();
			if (numero_proyecto >= 0){
				//BloqueConstructivo bloque = (BloqueConstructivo) modeloBloque.getElementAt(numero);
				//String tipo_usuario = (String) jComboBox.getSelectedItem();
				Proyecto proyecto = (Proyecto) modelo.getElementAt(numero_proyecto);
				
				
				Session sesion= UtilidadHibernate.getSessionFactory().openSession();
				
				HashMap parametros = new HashMap();
				parametros.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION,sesion);
				//parametros.put("BL", bloque.getIdBloque());
				parametros.put("PR", proyecto.getIdProyecto());
				parametros.put("fecha_inicial", fecha_ini);
				parametros.put("fecha_final", fecha_fin);
				
				for (int i=0; i<listaBloques.size(); i++){
					parametros.put("bloque" + i, listaBloques.get(i).getIdBloque());
				}

				try {
					String fileName;
					if (idioma.equals("español"))
						if (listaBloques.size()>0)
							fileName= "./src/informes/grafico_modelo_madurez_parcial.jasper";
						else
							fileName= "./src/informes/grafico_modelo_madurez_parcial_todos_los_bloques.jasper";
					else
						if (listaBloques.size()>0)
							fileName= "./src/informes/graphic_partial_madurity_model.jasper";
						else
							fileName= "./src/informes/graphic_partial_madurity_model_all_blocks.jasper";
					informe= JasperFillManager.fillReport(fileName, parametros);
					JasperViewer.viewReport(informe,false);
				}
				catch (JRException e1){
					e1.printStackTrace();
				}
			}
			else{
				if (idioma.equals("español"))
					throw new Exception("Error, selecciona un proyecto de la lista de proyectos.");
				else
					throw new Exception("Error, select a project of the project list.");
			}
		}
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void Grafico_modelo_madurez_global(String fecha_ini, String fecha_fin, ArrayList<BloqueConstructivo> listaBloques){
		try{
			JasperPrint informe = null;
			int numero = jList3.getSelectedIndex();
			int numero_proyecto = jList.getSelectedIndex();
			if (numero_proyecto >= 0){
				//BloqueConstructivo bloque = (BloqueConstructivo) modeloBloque.getElementAt(numero);
				//String tipo_usuario = (String) jComboBox.getSelectedItem();
				Proyecto proyecto = (Proyecto) modelo.getElementAt(numero_proyecto);
				
				
				Session sesion= UtilidadHibernate.getSessionFactory().openSession();
				
				HashMap parametros = new HashMap();
				parametros.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION,sesion);
				//parametros.put("BL", bloque.getIdBloque());
				parametros.put("PR", proyecto.getIdProyecto());
				parametros.put("fecha_inicial", fecha_ini);
				parametros.put("fecha_final", fecha_fin);

				try {
					String fileName;
					if (idioma.equals("español"))
						fileName= "./src/informes/grafico_modelo_madurez_global.jasper";
					else
						fileName= "./src/informes/graphic_global_madurity_model.jasper";
					informe= JasperFillManager.fillReport(fileName, parametros);
					JasperViewer.viewReport(informe,false);
				}
				catch (JRException e1){
					e1.printStackTrace();
				}
			}
			else{
				if (idioma.equals("español"))
					throw new Exception("Error, selecciona un proyecto de la lista de proyectos.");
				else
					throw new Exception("Error, select a project of the project list.");
			}
		}
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void Modificar(){
		
		try{
			int idproyecto = jList.getSelectedIndex();
			if (idproyecto==-1){
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona un plantilla de la lista");
					else
						throw new Exception("Error, select a framework of the list");
				}
				else{
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona una proyecto de la lista");
					else
						throw new Exception("Error, select a project of the list");
				}
					
			}
			else{
				NuevoProyectoPlantilla proyecto = new NuevoProyectoPlantilla(Principal.this, true);
				proyecto.setLocationRelativeTo(Principal.this);
				proyecto.setVisible(true);
			}
		}	
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
		
	}
	
	public void Borrar(){
		
		try{			

			int idestructura = jList.getSelectedIndex();
			
			//En función del rol del usuario, almacenamos en la lista proyectos o plantillas.
			if (usuario.getRol().equals("Implanter")){

				if (idestructura==-1){
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona un proyecto de la lista");
					else
						throw new Exception("Error, select a project of the list");
				}
				else{
							
					Proyecto proyecto = (Proyecto) modelo.getElementAt(idestructura);	
					
					int n;
					if (idioma.equals("español")){
						n = JOptionPane.showConfirmDialog(
							Principal.this, "¿Estás seguro de que quieres borrar el proyecto '" + proyecto.getNombre() + "'?",
							"Advertencia",
							JOptionPane.YES_NO_OPTION);
					}
					else {
						//JOptionPane.setDefaultLocale(new Locale("en", "", ""));
						n = JOptionPane.showConfirmDialog(
								Principal.this, "Are you sure you want to delete the project '" + proyecto.getNombre() + "'?",
								"Warning",
								JOptionPane.YES_NO_OPTION);
						
					}
					
					if (n == JOptionPane.YES_OPTION) {
						
						if (idioma.equals("español")){
							n = JOptionPane.showConfirmDialog(
									Principal.this, "Se borrará todas las instancias y su contenido, ¿desea continuar de todas formas?",
									"Advertencia",
									JOptionPane.YES_NO_OPTION);
						}
						else{
							//JOptionPane.setDefaultLocale(new Locale("en", "", ""));
							n = JOptionPane.showConfirmDialog(
									Principal.this, "It will clear all instances and his content, do you want to continue anyway?",
									"Warning",
									JOptionPane.YES_NO_OPTION);
							
						}
							
						if (n == JOptionPane.YES_OPTION) {
//							Borramos el objeto de la lista
							modelo.removeElement(proyecto);
								
							//Creamos la sesión para almacenar el nombre del proyecto en la BD
							Session session=null;
							
							session = UtilidadHibernate.getSessionFactory().openSession();
							
							Transaction tx = session.beginTransaction();
												
							proyecto = (Proyecto) session.get(Proyecto.class, proyecto.getIdProyecto());
														
							//Borramos el objeto
							session.delete(proyecto);
																																								
							tx.commit();
							ActualizaListaProyectosPlantillas(marco_seleccionado);
							modeloBloque.removeAllElements();
							jTextField.setText("");
							jTextArea.setText("");
							jTextField1.setText("");
							session.close();
						}
					}				
				}
			}
			else if (usuario.getRol().equals("Developer")){
				boolean flag_existen_instancias=false;
				
				if (idestructura==-1){
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona una plantilla de la lista");
					else
						throw new Exception("Error, select a framework of the list");
				}
				else{
							
					Plantilla plantilla = (Plantilla) modelo.getElementAt(idestructura);	
					
					int n;
					if (idioma.equals("español")){
						n = JOptionPane.showConfirmDialog(
							Principal.this, "¿Estás seguro de que quieres borrar la plantilla '" + plantilla.getNombre() + "'?",
							"Advertencia",
							JOptionPane.YES_NO_OPTION);
					}
					else {
						n = JOptionPane.showConfirmDialog(
								Principal.this, "Are you sure you want to delete the framework '" + plantilla.getNombre() + "'?",
								"Warning",
								JOptionPane.YES_NO_OPTION);
						
					}
					
					if (n == JOptionPane.YES_OPTION) {
						
						if (idioma.equals("español")){
							n = JOptionPane.showConfirmDialog(
									Principal.this, "Se borrarán todas los bloques constructivos, las fases y las vistas asociadas al marco, ¿desea continuar de todas formas?",
									"Advertencia",
									JOptionPane.YES_NO_OPTION);
						}
						else{
							//JOptionPane.setDefaultLocale(new Locale("en", "", ""));
							n = JOptionPane.showConfirmDialog(
									Principal.this, "It will clear all building blocks, phases and views associated with the framework, do you want to continue anyway?",
									"Warning",
									JOptionPane.YES_NO_OPTION);
							
						}
							
						if (n == JOptionPane.YES_OPTION) {
						
							Session sesion=null;
							
							sesion = UtilidadHibernate.getSessionFactory().openSession();
							
							ArrayList lista_proyectos = new ArrayList();
							
							//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();
							
							for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
								Proyecto p = (Proyecto) iter.next();
								List messages2 = sesion.createQuery("from Instancia where id_proyecto = '"+p.getIdProyecto()+"'").list();
									
								if (messages2.size() > 0){
									flag_existen_instancias = true;
									lista_proyectos.add(p);
	
								}
	
							}
							
							sesion.close();
							if (flag_existen_instancias){
								if (idioma.equals("español"))
									JOptionPane.showMessageDialog(null, "Error, el/los proyecto/s " + lista_proyectos.toString() + "\nde la plantilla '" + plantilla.getNombre() + "' tienen instancias asociadas.\n\nDebes eliminar todas las instancias para borrar la plantilla.", "Error", JOptionPane.ERROR_MESSAGE);
								else
									JOptionPane.showMessageDialog(null, "Error, the project/s " + lista_proyectos.toString() + "\nof the framework '" + plantilla.getNombre() + "' have asociated instances.\n\nYou must detele all the instances to remove the framework.", "Error", JOptionPane.ERROR_MESSAGE);
							}
							else{
								//Borramos el objeto de la lista
								modelo.removeElement(plantilla);
									
								
								
								//Creamos la sesión para almacenar el nombre del proyecto en la BD
								Session session=null;
								
								session = UtilidadHibernate.getSessionFactory().openSession();
	
								Transaction tx = session.beginTransaction();
													
								plantilla = (Plantilla) session.get(Plantilla.class, plantilla.getIdPlantilla());
															
								//Borramos el objeto
								session.delete(plantilla);
																																									
								tx.commit();
								ActualizaListaProyectosPlantillas(null);
								modeloBloque.removeAllElements();
								jTextField.setText("");
								jTextArea.setText("");
								session.close();
	
							}	
						}
					}
				}
				
			}
		}	
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
		
	}
	
	public void Duplicar(){
		
		try{			

			int idestructura = jList.getSelectedIndex();
			
			
			if (usuario.getRol().equals("Implanter")){
			
				if (idestructura<=-1){
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona un proyecto de la lista");
					else
						throw new Exception("Error, select a project of the list");
				}
				else{
					Proyecto proyecto = (Proyecto) modelo.getElementAt(idestructura);
					
					DuplicarProyectoPlantilla ventana = new DuplicarProyectoPlantilla(Principal.this, proyecto, marco_seleccionado);
					ventana.setLocationRelativeTo(Principal.this);
					ventana.setModal(true);
					ventana.setVisible(true);

				}
			}
			else if (usuario.getRol().equals("Developer")){
				
				if (idestructura<=-1){
					if (idioma.equals("español"))
						throw new Exception("Error, selecciona una plantilla de la lista");
					else
						throw new Exception("Error, select a framework of the list");
				}
				else{
					Plantilla plantilla = (Plantilla) modelo.getElementAt(idestructura);
					
					DuplicarProyectoPlantilla ventana = new DuplicarProyectoPlantilla(Principal.this, plantilla);
					ventana.setLocationRelativeTo(Principal.this);
					ventana.setModal(true);
					ventana.setVisible(true);
				}
			}
		}	
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
		
	}
	
	public void Importar(){
		Xml claseXML = new Xml();
		
		
		JFileChooser fileChooser = new JFileChooser();
		FileNameExtensionFilter filter = new FileNameExtensionFilter(".xml", new String[]{"xml"});
		fileChooser.setFileFilter(filter);
		int seleccion = fileChooser.showOpenDialog(Principal.this);
		
		
		if (seleccion == JFileChooser.APPROVE_OPTION)
		{
		   File fichero = fileChooser.getSelectedFile();
		   // y a trabajar con fichero ....
		   
		    //BorrarBaseDeDatos();
			//claseXML.deleteData("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "2");
		    try{
		    	
		    	claseXML.ValidaXMLcontraXSD(fichero.getAbsolutePath(), "./src/baseDeDatos/ESQUEMA_XML_PFC.xsd");
		    	//claseXML.createData("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", fichero.getAbsolutePath());  

		    	claseXML.generateXML2("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "PUBLIC", "./Database_Backup.xml");
		    	
				BorrarBaseDeDatos();
				
				boolean error;
				error=claseXML.createData("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", fichero.getAbsolutePath());
	
				if (!error){
					if (idioma.equals("español"))
						JOptionPane.showMessageDialog(null, "Se ha importado los datos correctamente.", "", JOptionPane.INFORMATION_MESSAGE);
		   			else
		   				JOptionPane.showMessageDialog(null, "The data have been successfully imported", "", JOptionPane.INFORMATION_MESSAGE);

					
					//CERRAMOS Y ABRIMOS LA VENTANA PRINCIPAL PARA QUE SE REFLEJEN LOS CAMBIOS
					Principal.this.dispose();
					Principal thisClass = new Principal(true, usuario, marco_seleccionado);
					thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					thisClass.jMenuItem9.setEnabled(false);
					thisClass.setVisible(true);
				}
				else{
					BorrarBaseDeDatos();
					claseXML.createData("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "./Database_Backup.xml");
					if (idioma.equals("español"))
			    		JOptionPane.showMessageDialog(null, "Error, el formato no es válido.", "Error", JOptionPane.ERROR_MESSAGE);
			    	else
			    		JOptionPane.showMessageDialog(null, "Error, the format is not valid.", "Error", JOptionPane.ERROR_MESSAGE);
				}
				
		    } catch (Exception e1) {
				// TODO Auto-generated catch block
		    	if (idioma.equals("español"))
		    		JOptionPane.showMessageDialog(null, "Error, el formato no es válido.", "Error", JOptionPane.ERROR_MESSAGE);
		    	else
		    		JOptionPane.showMessageDialog(null, "Error, the format is not valid.", "Error", JOptionPane.ERROR_MESSAGE);
				e1.printStackTrace();
				
				
			} 
		   
		}
	}
	
	public void ImportarLecturaXML(){
		claseXML claseXML = new claseXML();
		Xml validacionEsquemaXML = new Xml();
		
		
		JFileChooser fileChooser = new JFileChooser();
		FileNameExtensionFilter filter = new FileNameExtensionFilter(".xml", new String[]{"xml"});
		fileChooser.setFileFilter(filter);
		int seleccion = fileChooser.showOpenDialog(Principal.this);
		
		
		if (seleccion == JFileChooser.APPROVE_OPTION)
		{
		   File fichero = fileChooser.getSelectedFile();
		   // y a trabajar con fichero ....
		   
		    //BorrarBaseDeDatos();
			//claseXML.deleteData("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "2");
		    try{
		    	
		    	//VALIDAMOS EL FORMATO DEL XML DE ENTRADA CON EL ESQUEMA XSD
		    	validacionEsquemaXML.ValidaXMLcontraXSD(fichero.getAbsolutePath(), "./src/baseDeDatos/ESQUEMA_XML_PFC.xsd");
		    	//claseXML.createData("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", fichero.getAbsolutePath());  
		    	
		    	//GENERAMOS UNA COPIA DE SEGURIDAD DE TODA LA BASE DE DATOS
		    	validacionEsquemaXML.generateXML2("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "PUBLIC", "./Database_Backup.xml");
		    	
				//BorrarBaseDeDatos();
				
				boolean error;
				if (usuario.getRol().equals("Developer"))
					error=claseXML.CrearXML(fichero.getAbsolutePath(), null, true, Principal.this);
				else
					error=claseXML.CrearXML(fichero.getAbsolutePath(), marco_seleccionado, false, Principal.this);
	
				if (!error){
					if (idioma.equals("español"))
						JOptionPane.showMessageDialog(null, "Se ha importado los datos correctamente.", "", JOptionPane.INFORMATION_MESSAGE);
		   			else
		   				JOptionPane.showMessageDialog(null, "The data have been successfully imported", "", JOptionPane.INFORMATION_MESSAGE);

					
					//CERRAMOS Y ABRIMOS LA VENTANA PRINCIPAL PARA QUE SE REFLEJEN LOS CAMBIOS
					Principal.this.dispose();
					Principal thisClass = new Principal(true, usuario, marco_seleccionado);
					thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					thisClass.jMenuItem9.setEnabled(false);
					thisClass.jLabel3.setVisible(true);
					
					if (marco_seleccionado!=null && usuario.getRol().equals("implanter")){
						thisClass.jTextField1.setText(marco_seleccionado.getNombre());
						thisClass.jTextField1.setVisible(true);
					}
					
					thisClass.setVisible(true);
				}
				
		    } catch (Exception e1) {
				// TODO Auto-generated catch block
		    	if (idioma.equals("español"))
		    		JOptionPane.showMessageDialog(null, "Error, El formato no es válido", "Error", JOptionPane.ERROR_MESSAGE);
		    	else
		    		JOptionPane.showMessageDialog(null, "Error, format is not correct.", "Error", JOptionPane.ERROR_MESSAGE);
			} 
		   
		}
	}

	public void Exportar(){
		Xml claseXML = new Xml();
		try {
			JFileChooser fileChooser = new JFileChooser(".");
			FileNameExtensionFilter filter = new FileNameExtensionFilter(".xml", new String[]{"xml"});
			fileChooser.setFileFilter(filter);
			int seleccion = fileChooser.showSaveDialog(Principal.this);
			
			if (seleccion == JFileChooser.APPROVE_OPTION)
			{
			   File fichero = fileChooser.getSelectedFile();
			   
			   //Nombre de fichero existente (reemplazamos)
			   if(new File(fichero.getAbsolutePath()).exists()){
				   int n;
					if (idioma.equals("español")){
						n = JOptionPane.showConfirmDialog(
							Principal.this, "¿Estás seguro de que reemplazar el fichero?",
							"Advertencia",
							JOptionPane.YES_NO_OPTION);
					}
					else {
						n = JOptionPane.showConfirmDialog(
								Principal.this, "Are you sure you want to replace the file?",
								"Warning",
								JOptionPane.YES_NO_OPTION);
						
					}
					
					if (n == JOptionPane.YES_OPTION) {
						int numero = jList.getSelectedIndex();
						if (numero >= 0){
							Plantilla plantilla = (Plantilla) modelo.getElementAt(numero);
				   			claseXML.generateXML("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "PUBLIC", fichero.getAbsolutePath(), plantilla);
				   			if (idioma.equals("español"))
				   				JOptionPane.showMessageDialog(null, "Se ha exportado los datos correctamente.", "", JOptionPane.INFORMATION_MESSAGE);
				   			else
				   				JOptionPane.showMessageDialog(null, "The data have been successfully exported", "", JOptionPane.INFORMATION_MESSAGE);
						}
				   }
			   }
			   //nombre de fichero nuevo (no existente)
			   else{
				   int numero = jList.getSelectedIndex();
					if (numero >= 0){
						Plantilla plantilla = (Plantilla) modelo.getElementAt(numero);
					    claseXML.generateXML("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "PUBLIC", fichero.getAbsolutePath(),plantilla);
					    if (idioma.equals("español"))
			   				JOptionPane.showMessageDialog(null, "Se ha exportado los datos correctamente.", "", JOptionPane.INFORMATION_MESSAGE);
			   			else
			   				JOptionPane.showMessageDialog(null, "The data have been successfully exported", "", JOptionPane.INFORMATION_MESSAGE);
					}
			   }
			   
			}
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
	
	public void ExportarEscrituraXML(){
			claseXML claseXML = new claseXML();
			try {
				
				int idestructura = jList.getSelectedIndex();
				
				
				if (usuario.getRol().equals("Developer")){
				
					if (idestructura<=-1){
						if (idioma.equals("español"))
							throw new Exception("Error, selecciona una plantilla de la lista.");
						else
							throw new Exception("Error, select a framework of the list.");
					}
					else{
						JFileChooser fileChooser = new JFileChooser(".");
						FileNameExtensionFilter filter = new FileNameExtensionFilter(".xml", new String[]{"xml"});
						fileChooser.setFileFilter(filter);
						int seleccion = fileChooser.showSaveDialog(Principal.this);
						
						if (seleccion == JFileChooser.APPROVE_OPTION)
						{
						   File fichero = fileChooser.getSelectedFile();
						   
						   //Nombre de fichero existente (reemplazamos)
						   if(new File(fichero.getAbsolutePath()).exists() || new File(fichero.getAbsolutePath()+".xml").exists()){
							   int n;
								if (idioma.equals("español")){
									n = JOptionPane.showConfirmDialog(
										Principal.this, "¿Estás seguro de que reemplazar el fichero?",
										"Advertencia",
										JOptionPane.YES_NO_OPTION);
								}
								else {
									n = JOptionPane.showConfirmDialog(
											Principal.this, "Are you sure you want to replace the file?",
											"Warning",
											JOptionPane.YES_NO_OPTION);
									
								}
								
								if (n == JOptionPane.YES_OPTION) {
									int numero = jList.getSelectedIndex();
									if (numero >= 0){
										Plantilla plantilla = (Plantilla) modelo.getElementAt(numero);
										
							   			claseXML.GenerarXML(plantilla, null,  fichero.getAbsolutePath(), true);
										//claseXML.generateXML("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "PUBLIC", fichero.getAbsolutePath(), plantilla);
							   			if (idioma.equals("español"))
							   				JOptionPane.showMessageDialog(null, "Se ha exportado los datos correctamente.", "", JOptionPane.INFORMATION_MESSAGE);
							   			else
							   				JOptionPane.showMessageDialog(null, "The data have been successfully exported", "", JOptionPane.INFORMATION_MESSAGE);
									}
							   }
						   }
						   //nombre de fichero nuevo (no existente)
						   else{
							   int numero = jList.getSelectedIndex();
								if (numero >= 0){
									Plantilla plantilla = (Plantilla) modelo.getElementAt(numero);
								    claseXML.GenerarXML(plantilla, null, fichero.getAbsolutePath(), true);
									//claseXML.generateXML("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "PUBLIC", fichero.getAbsolutePath(),plantilla);
								    if (idioma.equals("español"))
						   				JOptionPane.showMessageDialog(null, "Se ha exportado los datos correctamente.", "", JOptionPane.INFORMATION_MESSAGE);
						   			else
						   				JOptionPane.showMessageDialog(null, "The data have been successfully exported", "", JOptionPane.INFORMATION_MESSAGE);
								}
						   }
						}
					}
				   
				}
				//IMPLANTER
				else{
					
					if (idestructura<=-1){
						if (idioma.equals("español"))
							throw new Exception("Error, selecciona un proyecto de la lista.");
						else
							throw new Exception("Error, select a project of the list.");
					}
					else{
						JFileChooser fileChooser = new JFileChooser(".");
						FileNameExtensionFilter filter = new FileNameExtensionFilter(".xml", new String[]{"xml"});
						fileChooser.setFileFilter(filter);
						int seleccion = fileChooser.showSaveDialog(Principal.this);
						
						if (seleccion == JFileChooser.APPROVE_OPTION)
						{
						   File fichero = fileChooser.getSelectedFile();
						   
						   //Nombre de fichero existente (reemplazamos)
						   if(new File(fichero.getAbsolutePath()).exists() || new File(fichero.getAbsolutePath()+".xml").exists()){
							   int n;
								if (idioma.equals("español")){
									n = JOptionPane.showConfirmDialog(
										Principal.this, "¿Estás seguro de que reemplazar el fichero?",
										"Advertencia",
										JOptionPane.YES_NO_OPTION);
								}
								else {
									n = JOptionPane.showConfirmDialog(
											Principal.this, "Are you sure you want to replace the file?",
											"Warning",
											JOptionPane.YES_NO_OPTION);
									
								}
								
								if (n == JOptionPane.YES_OPTION) {
									int numero = jList.getSelectedIndex();
									if (numero >= 0){
										Proyecto proyecto = (Proyecto) modelo.getElementAt(numero);
							   			claseXML.GenerarXML(marco_seleccionado, proyecto, fichero.getAbsolutePath(), false);
										//claseXML.generateXML("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "PUBLIC", fichero.getAbsolutePath(), plantilla);
							   			if (idioma.equals("español"))
							   				JOptionPane.showMessageDialog(null, "Se ha exportado los datos correctamente.", "", JOptionPane.INFORMATION_MESSAGE);
							   			else
							   				JOptionPane.showMessageDialog(null, "The data have been successfully exported", "", JOptionPane.INFORMATION_MESSAGE);
									}
							   }
						   }
						   //nombre de fichero nuevo (no existente)
						   else{
							   int numero = jList.getSelectedIndex();
								if (numero >= 0){
									Proyecto proyecto = (Proyecto) modelo.getElementAt(numero);
									claseXML.GenerarXML(marco_seleccionado, proyecto, fichero.getAbsolutePath(), false);
									//claseXML.generateXML("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "PUBLIC", fichero.getAbsolutePath(),plantilla);
								    if (idioma.equals("español"))
						   				JOptionPane.showMessageDialog(null, "Se ha exportado los datos correctamente.", "", JOptionPane.INFORMATION_MESSAGE);
						   			else
						   				JOptionPane.showMessageDialog(null, "The data have been successfully exported", "", JOptionPane.INFORMATION_MESSAGE);
								}
						   }
						}
					}
					
				}
			} catch (Exception exp) {
				// TODO Auto-generated catch block
				JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
			}
		}
	
	public void ActualizaListaProyectosPlantillas(Plantilla p){
		try{
			
				//Creamos la sesión para almacenar el nombre del proyecto en la BD
				Session sesion = UtilidadHibernate.getSessionFactory().openSession();
				
				//Inicialmente, borramos la lista y volvemos a obtener los datos de la BD
				modelo.removeAllElements();
				
				//Mostramos el contenido de la lista diferente según el usuario que se haya logeado.
				//LISTA DE PLANTILLAS
				if (usuario!= null && usuario.getRol().equals("Developer")){
					List messages = sesion.createQuery("from Plantilla m order by id_plantilla asc").list();
					//System.out.println("Número de elementos: " + messages.size());
					for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
						Plantilla plantilla = (Plantilla) iter.next();
						modelo.addElement(plantilla);
					}
					if (idioma.equals("español"))
						jMenu7.setText("Marco");
					else
						jMenu7.setText("Framework");
					jMenu7.setVisible(true);
				}
				//LISTAS DE PROYECTOS
				else if (usuario != null && usuario.getRol().equals("Implanter")){	
					List messages = sesion.createQuery("from Proyecto where id_plantilla = '"+p.getIdPlantilla()+"' order by id_proyecto asc").list();
					//System.out.println("Número de elementos: " + messages.size());
					for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
						Proyecto proyecto = (Proyecto) iter.next();
						modelo.addElement(proyecto);
					}
					if (idioma.equals("español"))
						jMenu7.setText("Proyecto");
					else
						jMenu7.setText("Project");
					jMenu7.setVisible(true);
				}
				
				if (modelo.getSize()>0)
					jList.setModel(modelo);
				
				sesion.close();
				//JOptionPane.showMessageDialog(null, "El proyecto se ha dado de alta correctamente, el responsable de proyecyo podrá modificarlos para añadirle los participantes y los participantes externos", "Información", JOptionPane.INFORMATION_MESSAGE);
			
		}	
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void actualizaModeloBloque()
	{
		try{
			Session session = UtilidadHibernate.getSessionFactory().openSession();
			
			Transaction tx = session.beginTransaction();
			
			int idelemento = jList3.getSelectedIndex();
			Proyecto proyecto = (Proyecto) modeloBloque.getElementAt(idelemento);
			System.out.println("ID del proyecto es: " + proyecto.getIdProyecto());
			modeloBloque.removeAllElements();
			List messages = session.createQuery("from BloqueConstructivo m where id_proyecto = '"+proyecto.getIdProyecto()+"' order by id_bloque asc").list();
			//System.out.println("Número de elementos: " + messages.size());
			for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
				BloqueConstructivo bloque = (BloqueConstructivo) iter.next();
				modeloBloque.addElement(bloque);
			}
			jList.setModel(modeloBloque);
			tx.commit();
			session.close();
			
			
		}	
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void ActualizaListaBloques(){
		
		try{
			
			int indice = jList.getSelectedIndex();
			if (indice != -1){

				modeloVista.removeAllElements();
				modeloFase.removeAllElements();
				//jTextField1.setText("");
				//jTextField11.setText("");
				
				Plantilla plantilla = (Plantilla) modelo.getElementAt(indice);
							
				jTextField.setText(plantilla.getNombre());
				//jTextField1.setText(proyecto.getDescripcion());
				jTextArea.setText(plantilla.getDescripcion());
				
				Session session=null;
				
				session = UtilidadHibernate.getSessionFactory().openSession();
				
				Transaction tx = session.beginTransaction();
				
				modeloBloque.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();
					modeloBloque.addElement(bloque);
				}
				jList3.setModel(modeloBloque);
				tx.commit();
				session.close();
				
			}
		}
		catch (Exception exp) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	private void BorrarBaseDeDatos(){
		
		Session session = UtilidadHibernate.getSessionFactory().openSession();
		
		//BORRAMOS TODA LA BASE DE DATOS ANTES DE IMPORTAR
		
		String hql = "delete from FaseBloque";
	    Query query = session.createQuery(hql);
	    
	    int rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from FasePlantilla";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from VistaBloque";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from VistaPlantilla";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);	  
	    
	    hql = "delete from ContenidoLista";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from ComponenteInstancia";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);

	    hql = "delete from Instancia";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from SeleccionComponenteListaBloque";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from ComponenteBloque";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);

	    hql = "delete from BloqueConstructivo";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from Proyecto";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from Plantilla";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from Aspecto";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from Idioma";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
	    
	    hql = "delete from Usuario";
	    query = session.createQuery(hql);
	    
	    rowCount = query.executeUpdate();
	    System.out.println("Rows affected: " + rowCount);
		
		session.close();
		
	}

	/*********************************************************************/	
	/************************* OBJETOS GRÁFICOS **************************/
	/*********************************************************************/
	
	
	/************************* Paneles ***********************************/
	//Panel principal
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			BorderLayout borderLayout = new BorderLayout();
			borderLayout.setHgap(0);
			borderLayout.setVgap(0);
			jContentPane = new JPanel();
			jContentPane.setFont(new Font("Dialog", Font.PLAIN, 12));
			jContentPane.setLayout(borderLayout);
			jContentPane.add(getJJToolBarBar(), BorderLayout.NORTH);
			jContentPane.add(jLabel, BorderLayout.SOUTH);
			jContentPane.add(getJPanel1(), BorderLayout.CENTER);
		}
		return jContentPane;
	}


	private JPanel getJPanel() {
		if (jPanel == null) {
			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
			gridBagConstraints1.gridx = 0;
			gridBagConstraints1.insets = new Insets(10, 10, 10, 10);
			gridBagConstraints1.fill = GridBagConstraints.BOTH;
			gridBagConstraints1.weightx = 1.0;
			gridBagConstraints1.weighty = 1.0;
			gridBagConstraints1.gridy = 1;
			GridBagConstraints gridBagConstraints = new GridBagConstraints();
			gridBagConstraints.gridx = 0;
			gridBagConstraints.fill = GridBagConstraints.BOTH;
			gridBagConstraints.insets = new Insets(10, 10, 0, 10);
			gridBagConstraints.weightx = 1.0;
			gridBagConstraints.weighty = 1.0;
			gridBagConstraints.gridy = 0;
			jPanel = new JPanel();
			jPanel.setLayout(new GridBagLayout());
			jPanel.setBackground(new Color(238, 238, 238));
			jPanel.add(getJPanel2(), gridBagConstraints);
			jPanel.add(getJPanel3(), gridBagConstraints1);
		}
		return jPanel;
	}

	
	public JPanel getJPanel1() {
		if (jPanel1 == null) {
			jPanel1 = new JPanel();
			jPanel1.setLayout(new BorderLayout());
			jPanel1.setBackground(SystemColor.controlHighlight);
			jPanel1.add(getJScrollPane(), BorderLayout.WEST);
			jPanel1.add(getJScrollPane1(), BorderLayout.CENTER);
		}
		return jPanel1;
	}
	
	
	private JPanel getJPanel2() {
		if (jPanel2 == null) {
			GridBagConstraints gridBagConstraints17 = new GridBagConstraints();
			gridBagConstraints17.fill = GridBagConstraints.BOTH;
			gridBagConstraints17.gridy = 1;
			gridBagConstraints17.weightx = 1.0;
			gridBagConstraints17.insets = new Insets(5, 10, 0, 10);
			gridBagConstraints17.gridx = 1;
			GridBagConstraints gridBagConstraints14 = new GridBagConstraints();
			gridBagConstraints14.gridx = 0;
			gridBagConstraints14.insets = new Insets(5, 10, 0, 0);
			gridBagConstraints14.gridy = 1;
			jLabel3 = new JLabel();
			if (idioma.equals("español"))
				jLabel3.setText("Tipo de marco:");
			else
				jLabel3.setText("Type of framework:");
			jLabel3.setVisible(false);
			GridBagConstraints gridBagConstraints13 = new GridBagConstraints();
			gridBagConstraints13.fill = GridBagConstraints.BOTH;
			gridBagConstraints13.gridy = 3;
			gridBagConstraints13.weightx = 1.0;
			gridBagConstraints13.weighty = 1.0;
			gridBagConstraints13.insets = new Insets(5, 10, 10, 10);
			gridBagConstraints13.gridx = 1;
			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
			gridBagConstraints4.gridx = 0;
			gridBagConstraints4.anchor = GridBagConstraints.NORTHWEST;
			gridBagConstraints4.insets = new Insets(5, 10, 0, 0);
			gridBagConstraints4.gridy = 3;
			jLabel2 = new JLabel();
			if (idioma.equals("español"))
				jLabel2.setText("Descripción:");
			else
				jLabel2.setText("Description:");	
			GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
			gridBagConstraints3.fill = GridBagConstraints.BOTH;
			gridBagConstraints3.gridy = 0;
			gridBagConstraints3.weightx = 1.0;
			gridBagConstraints3.insets = new Insets(10, 10, 0, 10);
			gridBagConstraints3.gridx = 1;
			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
			gridBagConstraints2.gridx = 0;
			gridBagConstraints2.anchor = GridBagConstraints.NORTHWEST;
			gridBagConstraints2.insets = new Insets(10, 10, 0, 0);
			gridBagConstraints2.gridy = 0;
			jLabel1 = new JLabel();
			if (idioma.equals("español"))
				jLabel1.setText("Nombre:");
			else
				jLabel1.setText("Name:");
			jPanel2 = new JPanel();
			jPanel2.setLayout(new GridBagLayout());
			jPanel2.setPreferredSize(new Dimension(0, 150));
			jPanel2.setBackground(new Color(238, 238, 238));
			jPanel2.setBorder(BorderFactory.createLineBorder(Color.lightGray, 0));
			jPanel2.add(jLabel1, gridBagConstraints2);
			jPanel2.add(getJTextField(), gridBagConstraints3);
			jPanel2.add(jLabel2, gridBagConstraints4);
			jPanel2.add(getJScrollPane2(), gridBagConstraints13);
			jPanel2.add(jLabel3, gridBagConstraints14);
			jPanel2.add(getJTextField1(), gridBagConstraints17);
			
		}
		return jPanel2;
	}

	
	private JPanel getJPanel3() {
		if (jPanel3 == null) {
			GridBagConstraints gridBagConstraints9 = new GridBagConstraints();
			gridBagConstraints9.fill = GridBagConstraints.BOTH;
			gridBagConstraints9.weighty = 1.0;
			gridBagConstraints9.weightx = 1.0;
			GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
			gridBagConstraints6.gridx = -1;
			gridBagConstraints6.gridy = -1;
			GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
			gridBagConstraints8.fill = GridBagConstraints.BOTH;
			gridBagConstraints8.insets = new Insets(10, 10, 0, 10);
			gridBagConstraints8.weighty = 0.0;
			gridBagConstraints8.weightx = 1.0;
			jPanel3 = new JPanel();
			jPanel3.setLayout(new GridBagLayout());
			jPanel3.setPreferredSize(new Dimension(0, 250));
			jPanel3.setBorder(BorderFactory.createLineBorder(Color.lightGray, 1));
			jPanel3.add(getJPanel6(), gridBagConstraints8);
			jPanel3.setBackground(new Color(238, 238, 238));
			jPanel3.add(getJPanel61(), gridBagConstraints9);
		}
		return jPanel3;
	}
	
	
	private JPanel getJPanel4() {
		if (jPanel4 == null) {
			GridBagConstraints gridBagConstraints15 = new GridBagConstraints();
			gridBagConstraints15.gridx = 0;
			gridBagConstraints15.gridy = 0;
			jPanel4 = new JPanel();
			jPanel4.setLayout(new FlowLayout());
			jPanel4.setPreferredSize(new Dimension(34, 35));
			jPanel4.setBackground(new Color(238, 238, 238));
			jPanel4.add(getJButton3(), null);
			jPanel4.add(getJButton(), null);
			jPanel4.add(getJButton9(), null);
		}
		return jPanel4;
	}
	
	
	private JPanel getJPanel6() {
		if (jPanel6 == null) {
			GridBagConstraints gridBagConstraints16 = new GridBagConstraints();
			gridBagConstraints16.gridx = 0;
			gridBagConstraints16.fill = GridBagConstraints.BOTH;
			gridBagConstraints16.gridy = 4;
			GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
			gridBagConstraints5.fill = GridBagConstraints.BOTH;
			gridBagConstraints5.weighty = 1.0;
			gridBagConstraints5.gridx = 0;
			gridBagConstraints5.gridy = 1;
			gridBagConstraints5.insets = new Insets(3, 0, 10, 0);
			gridBagConstraints5.weightx = 1.0;
			jLabel5 = new JLabel();
			if (idioma.equals("español"))		
				jLabel5.setText("Bloques Constructivos");
			else
				jLabel5.setText("Building blocks");
			jPanel6 = new JPanel();
			jPanel6.setLayout(new GridBagLayout());
			jPanel6.setPreferredSize(new Dimension(500, 26));
			jPanel6.add(jLabel5, new GridBagConstraints());
			jPanel6.add(getJScrollPane3(), gridBagConstraints5);
			jPanel6.setBackground(new Color(238, 238, 238));
			jPanel6.add(getJPanel4(), gridBagConstraints16);
		}
		return jPanel6;
	}
	
	
	private JPanel getJPanel61() {
		if (jPanel61 == null) {
			GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
			gridBagConstraints11.fill = GridBagConstraints.BOTH;
			gridBagConstraints11.gridy = 3;
			gridBagConstraints11.weightx = 1.0;
			gridBagConstraints11.weighty = 0.0;
			gridBagConstraints11.insets = new Insets(5, 5, 0, 15);
			gridBagConstraints11.gridx = 0;
			GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
			gridBagConstraints7.fill = GridBagConstraints.BOTH;
			gridBagConstraints7.gridy = 1;
			gridBagConstraints7.weightx = 1.0;
			gridBagConstraints7.weighty = 0.0;
			gridBagConstraints7.insets = new Insets(3, 5, 0, 15);
			gridBagConstraints7.gridx = 0;
			GridBagConstraints gridBagConstraints12 = new GridBagConstraints();
			gridBagConstraints12.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints12.insets = new Insets(0, 5, 0, 15);
			GridBagConstraints gridBagConstraints10 = new GridBagConstraints();
			gridBagConstraints10.gridx = 0;
			gridBagConstraints10.insets = new Insets(5, 5, 0, 15);
			gridBagConstraints10.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints10.gridy = 2;
			jLabel511 = new JLabel();
			if (idioma.equals("español"))
				jLabel511.setText("Fases");
			else
				jLabel511.setText("Phases");
			jLabel511.setHorizontalAlignment(SwingConstants.CENTER);
			jLabel51 = new JLabel();
			if (idioma.equals("español"))
				jLabel51.setText("Vistas");
			else
				jLabel51.setText("Views");
			jLabel51.setHorizontalAlignment(SwingConstants.CENTER);
			jPanel61 = new JPanel();
			jPanel61.setBackground(new Color(238, 238, 238));
			jPanel61.setLayout(new GridBagLayout());
			jPanel61.setPreferredSize(new Dimension(300, 500));
			jPanel61.add(jLabel51, gridBagConstraints12);
			jPanel61.add(jLabel511, gridBagConstraints10);
			jPanel61.add(getJScrollPane4(), gridBagConstraints7);
			jPanel61.add(getJScrollPane5(), gridBagConstraints11);
		}
		return jPanel61;
	}
	
	
	/************************* Menús ***********************************/
	private JMenuBar getJJMenuBar() {
		if (jJMenuBar == null) {
			jJMenuBar = new JMenuBar();
			jJMenuBar.setBackground(new Color(238, 238, 238));
			jJMenuBar.add(getJMenu());
			jJMenuBar.add(getJMenu1());
			jJMenuBar.add(getJMenu5());
			jJMenuBar.add(getJMenu4());
			jJMenuBar.add(getJMenu2());
			jJMenuBar.add(getJMenu8());
			jJMenuBar.add(getJMenu3());
		}
		return jJMenuBar;
	}


	private JMenu getJMenu() {
		if (jMenu == null) {
			jMenu = new JMenu();
			jMenu.setBackground(new Color(238, 238, 238));
			if(idioma.equals("español"))
				jMenu.setText("Archivo");
			else
				jMenu.setText("Archive");
				jMenu.add(getJMenu6());
				jMenu.add(getJMenu7());
				jMenu.add(getJMenuItem4());
		}
		return jMenu;
	}


	private JMenu getJMenu1() {
		if (jMenu1 == null) {
			jMenu1 = new JMenu();
			jMenu1.setBackground(new Color(238, 238, 238));
			if (idioma.equals("español"))
				jMenu1.setText("Mantenimiento");
			else
				jMenu1.setText("Management");
			jMenu1.add(getJMenuItem10());
			jMenu1.add(getJMenuItem5());
			jMenu1.add(getJMenuItem6());
			jMenu1.add(getJMenuItem7());

			if ((usuario!=null && (usuario.getRol().equals("Administrator") || usuario.getRol().equals("Developer"))))
				jMenu1.setEnabled(true);
			else
				jMenu1.setEnabled(false);
		}
		return jMenu1;
	}


	private JMenu getJMenu3() {
		if (jMenu3 == null) {
			jMenu3 = new JMenu();
			jMenu3.setBackground(new Color(238, 238, 238));
			if (idioma.equals("español"))
				jMenu3.setText("Ayuda");
			else
				jMenu3.setText("Help");
			jMenu3.add(getJMenuItem11());
			//jMenu3.add(getJMenuItem125());
			//jMenu3.add(getJMenuItem1214());
		}
		return jMenu3;
	}


	private JMenu getJMenu4() {
		if (jMenu4 == null) {
			jMenu4 = new JMenu();
			jMenu4.setBackground(new Color(238, 238, 238));
			if (idioma.equals("español")){
				jMenu4.setText("Informes");
			}
			else{
				jMenu4.setText("Reports");
			}
			jMenu4.add(getJMenuItem1());
			jMenu4.add(getJMenuItem126());
			jMenu4.add(getJMenuItem127());
			jMenu4.add(getJMenuItem129());
			jMenu4.add(getJMenuItem1213());			
			//jMenu4.add(getJMenuItem1215());
			jMenu4.add(getJMenu9());
			
			if ((usuario!=null && (usuario.getRol().equals("Developer")))){ 
				/*jMenu4.setEnabled(true);
				jMenu4.add(getJMenuItem129());
				jMenu4.add(getJMenuItem1213());*/
				jMenuItem1.setVisible(true);
				jMenuItem126.setVisible(true);
				jMenuItem127.setVisible(true);
				jMenuItem129.setVisible(true);
				jMenuItem1213.setVisible(false);
				//jMenuItem1215.setVisible(false);
				jMenu9.setVisible(false);
			}
			else if (usuario!=null && usuario.getRol().equals("Implanter")){
				jMenuItem1.setVisible(true);
				jMenuItem126.setVisible(true);
				jMenuItem127.setVisible(true);
				jMenuItem129.setVisible(true);
				jMenuItem1213.setVisible(true);
				jMenu9.setVisible(true);
				//jMenuItem1215.setVisible(true);
			}
			else{
				jMenuItem126.setVisible(false);
				jMenuItem127.setVisible(false);
				jMenuItem129.setVisible(false);
				jMenuItem1213.setVisible(false);
				jMenuItem1213.setVisible(false);
				jMenu9.setVisible(false);
				//jMenuItem1215.setVisible(false);
			}
		}
		return jMenu4;
	}
	
	
	private JToolBar getJJToolBarBar() {
		if (jJToolBarBar == null) {
			jLabel6 = new JLabel();
			jLabel6.setText("|");
			if (usuario==null){
				jLabel6.setVisible(false);
			}
			jLabel4 = new JLabel();
			jLabel4.setText("|");
			if (usuario==null){
				jLabel4.setVisible(false);
			}
			jLabel41 = new JLabel();
			jLabel41.setText("|");
			if (usuario==null){
				jLabel41.setVisible(false);
			}
			jLabel4 = new JLabel();
			jLabel4.setText("|");
			if (usuario==null || usuario.getRol().equals("Implanter")){
				jLabel4.setVisible(false);
			}
			jLabel = new JLabel();
			jLabel.setText("");
			jLabel.setPreferredSize(new Dimension(5, 15));
			jLabel.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
			jJToolBarBar = new JToolBar();
			jJToolBarBar.setBackground(new Color(238, 238, 238));
			jJToolBarBar.setBorder(null);
			jJToolBarBar.add(getJButton2());
			jJToolBarBar.add(getJButton7());
			jJToolBarBar.add(getJButton1());
			jJToolBarBar.add(getJButton8());
			jJToolBarBar.add(jLabel4);
			jJToolBarBar.add(getJButton5());
			jJToolBarBar.add(getJButton6());
			jJToolBarBar.add(jLabel41);
			jJToolBarBar.add(getJButton10());
			jJToolBarBar.add(getJButton11());
			jJToolBarBar.add(getJButton12());
			jJToolBarBar.add(jLabel6);
			jJToolBarBar.add(getJButton4());
		}
		return jJToolBarBar;
	}


	private JMenuItem getJMenuItem() {
		if (jMenuItem == null) {
			jMenuItem = new JMenuItem();
			jMenuItem.setIcon(new ImageIcon("./src/Imagenes/nuevo2.png"));
			if (idioma.equals("español"))
				jMenuItem.setText("Nuevo");
			else
				jMenuItem.setText("New");
			jMenuItem.setMnemonic(KeyEvent.VK_UNDEFINED);
			jMenuItem.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					NuevoProyectoPlantilla proyecto = new NuevoProyectoPlantilla(Principal.this, false);
					proyecto.setLocationRelativeTo(Principal.this);
					proyecto.setVisible(true);
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Implanter") || usuario.getRol().equals("Developer"))))
				jMenuItem.setEnabled(true);
			else
				jMenuItem.setEnabled(false);
		}
		return jMenuItem;
	}

	
	private JMenuItem getJMenuItem4() {
		if (jMenuItem4 == null) {
			jMenuItem4 = new JMenuItem();
			if (idioma.equals("español"))
				jMenuItem4.setText("Salir");
			else
				jMenuItem4.setText("Exit");
			jMenuItem4.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Principal.this.dispose();
					/*Runtime aplicacion = Runtime.getRuntime(); 
			        try{
			        	aplicacion.exec("exit C:/PFC/BD/demo/runServer.bat"); }
			        catch(Exception e2){
			        	System.out.println(e2);
			        }*/
					Session sesion = UtilidadHibernate.getSessionFactory().openSession();
					Transaction tx = sesion.beginTransaction();
					sesion.connection();
					sesion.createSQLQuery("shutdown");
					tx.commit();
					sesion.close();
				}
			});
		}
		return jMenuItem4;
	}


	private JMenuItem getJMenuItem5() {
		if (jMenuItem5 == null) {
			jMenuItem5 = new JMenuItem();
			if (idioma.equals("español"))	
				jMenuItem5.setText("Vistas");
			else
				jMenuItem5.setText("Views");
			jMenuItem5.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					
					try{				
						int idproyecto = jList.getSelectedIndex();
						if (idproyecto==-1){
							Error_seleccionPlantillaProyecto(usuario, idioma);
						}
						else{
	
							MantenimientoVista vista = new MantenimientoVista(Principal.this);
							vista.setLocationRelativeTo(Principal.this);
							vista.setVisible(true);
						}
					}catch (Exception exp) {
						// TODO: handle exception
						JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
					}
				}
			});
		}
		return jMenuItem5;
	}


	private JMenuItem getJMenuItem6() {
		if (jMenuItem6 == null) {
			jMenuItem6 = new JMenuItem();
			if (idioma.equals("español"))
				jMenuItem6.setText("Fases");
			else
				jMenuItem6.setText("Phases");
			jMenuItem6.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					
					
					try{				
						int idproyecto = jList.getSelectedIndex();
						if (idproyecto==-1){
							Error_seleccionPlantillaProyecto(usuario, idioma);
						}
						else{
							MantenimientoFase fase = new MantenimientoFase(Principal.this);
							fase.setLocationRelativeTo(Principal.this);
							fase.setVisible(true);
						}
					}catch (Exception exp) {
						// TODO: handle exception
						JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
					}
				}
			});
		}
		return jMenuItem6;
	}


	private JMenuItem getJMenuItem7() {
		if (jMenuItem7 == null) {
			jMenuItem7 = new JMenuItem();
			if (idioma.equals("español"))
				jMenuItem7.setText("Bloques constructivos");
			else
				jMenuItem7.setText("Building blocks");
			jMenuItem7.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					try{				
						int idproyecto = jList.getSelectedIndex();
						if (idproyecto==-1){
							Error_seleccionPlantillaProyecto(usuario, idioma);
						}
						else{
							
							MantenimientoBloque bloque = new MantenimientoBloque(Principal.this);
							bloque.setLocationRelativeTo(Principal.this);
							bloque.setVisible(true);
						}
					}catch (Exception exp) {
						// TODO: handle exception
						JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
					}
					
				}
			});
		}
		return jMenuItem7;
	}


	private JMenuItem getJMenuItem11() {
		if (jMenuItem11 == null) {
			jMenuItem11 = new JMenuItem();
			jMenuItem11.setIcon(new ImageIcon("./src/Imagenes/help.png"));
			if (idioma.equals("español"))
				jMenuItem11.setText("Acerca de...");
			else
				jMenuItem11.setText("About...");
			jMenuItem11.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Ayuda ventana=new Ayuda(Principal.this);
					ventana.setLocationRelativeTo(Principal.this);
					ventana.setVisible(true);
				}
			});
		}
		return jMenuItem11;
	}


	private JMenu getJMenu5() {
		if (jMenu5 == null) {
			jMenu5 = new JMenu();
			jMenu5.setBackground(new Color(238, 238, 238));
			if (idioma.equals("español"))
				jMenu5.setText("Modo ejecución");
			else
				jMenu5.setText("Execution mode");
			jMenu5.add(getJMenuItem8());
			
			if ((usuario!=null && (usuario.getRol().equals("Administrator") || usuario.getRol().equals("Implanter"))))
				jMenu5.setEnabled(true);
			else
				jMenu5.setEnabled(false);
		}
		return jMenu5;
	}


	private JMenuItem getJMenuItem8() {
		if (jMenuItem8 == null) {
			jMenuItem8 = new JMenuItem();
			if (idioma.equals("español"))
				jMenuItem8.setText("Guiado");
			else
				jMenuItem8.setText("Guided");
			jMenuItem8.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//VentanaFase1 ventana = new VentanaFase1(Principal.this);
					//ventana.setVisible(true);
					try{
						int idproyecto = jList.getSelectedIndex();
						
						//Proyecto NO seleccionado
						if (idproyecto==-1){
							if (idioma.equals("español"))
								throw new Exception("Error, selecciona un proyecto de la lista");
							else
								throw new Exception("Error, select a project of the list");
						}
						//Proyecto SI seleccionado
						else{
							//Proyecto proyecto = (Proyecto) modelo.getElementAt(idproyecto);
							
							Session session2 = UtilidadHibernate.getSessionFactory().openSession();
							
							List messages2 = session2.createQuery("FROM FasePlantilla where id_plantilla = '"+marco_seleccionado.getIdPlantilla()+"'").list();
							
							session2.close();
							
							//NO hay fases en el proyecto
							if (messages2.size()==0){
								if (idioma.equals("español"))
									throw new Exception("Error, no existen fases en el proyecto seleccionado");
								else
									throw new Exception("Error, there aren't phases int the selected project.");
							}
							//Si hay fases en el proyecto.
							else{
								ModoGuiado ventana = new ModoGuiado(Principal.this);
								ventana.setLocationRelativeTo(Principal.this);
								ventana.setVisible(true);
							}
						}
						
					}catch (Exception exp) {
						// TODO: handle exception
						JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
					}
				}
			});
		}
		return jMenuItem8;
	}


	private JMenuItem getJMenuItem14() {
		if (jMenuItem14 == null) {
			jMenuItem14 = new JMenuItem();
			jMenuItem14.setIcon(new ImageIcon("./src/Imagenes/borrar.png"));
			if (idioma.equals("español"))
				jMenuItem14.setText("Borrar");
			else
				jMenuItem14.setText("Delete");
			jMenuItem14.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Borrar();
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Implanter") || usuario.getRol().equals("Developer"))))
				jMenuItem14.setEnabled(true);
			else
				jMenuItem14.setEnabled(false);
		}
		return jMenuItem14;
	}

	
	private JMenuItem getJMenuItem1() {
		if (jMenuItem1 == null) {
			jMenuItem1 = new JMenuItem();
			jMenuItem1.setIcon(new ImageIcon("./src/Imagenes/informe_usuarios.png"));
			if (idioma.equals("español")){
				jMenuItem1.setText("Listado de usuarios de la aplicación");
			}
			else{
				jMenuItem1.setText("List of application user");
			}
			jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//DetallesRaton ventana = new DetallesRaton();
					//ventana.setVisible(true);
					JasperPrint informe = null;
					//Integer numero = jList.getSelectedIndex();
					//String minumero = numero.toString();
					
					Session sesion= UtilidadHibernate.getSessionFactory().openSession();
					
					HashMap parametros = new HashMap();
					parametros.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION,sesion);
					//parametros.put("ORDEN", minumero);
					//Date fecha = new Date();
					//System.out.println("Fecha = " + fecha);
					//fecha.setMonth(fecha.getMonth()+1);
					//System.out.println("   " + fecha);
					//String fechaS = FuncionesFecha.dateToString(fecha);
					//parametros.put("FECHA2","2010-07-17");

					try {
						String fileName;
						if (idioma.equals("español"))
							fileName= "./src/informes/usuarios.jasper";
						else
							fileName= "./src/informes/users.jasper";
						
						informe= JasperFillManager.fillReport(fileName, parametros);
					}
					catch (JRException e1){
						e1.printStackTrace();
					}
					JasperViewer.viewReport(informe,false);		
					
				}
			});
		}
		return jMenuItem1;
	}

	
	private JMenu getJMenu2() {
		if (jMenu2 == null) {
			jMenu2 = new JMenu();
			jMenu2.setBackground(new Color(238, 238, 238));
			if (idioma.equals("español"))
				jMenu2.setText("Idioma");
			else
				jMenu2.setText("Language");
			jMenu2.add(getJMenuItem2());
			jMenu2.add(getJMenuItem3());
		}
		return jMenu2;
	}

	
	private JMenuItem getJMenuItem2() {
		if (jMenuItem2 == null) {
			jMenuItem2 = new JMenuItem();
			jMenuItem2.setIcon(new ImageIcon("./src/Imagenes/español.png"));
			
			
			
			/*if (jMenuItem2.isEnabled())
				jMenuItem2.setIcon(new ImageIcon("./src/imagenes/seleccionado.png"));
			else
				jMenuItem2.setIcon(null);*/
			
			if (idioma.equals("español")){
				jMenuItem2.setEnabled(false);
				jMenuItem2.setText("Español");
				//jMenuItem2.setIcon(new ImageIcon("./src/Imagenes/seleccionado.png"));
			}
			else{
				jMenuItem2.setText("Spanish");
			}
				
			jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					jMenuItem3.setEnabled(true);
					jMenuItem2.setEnabled(false);
					
					
					idioma = "español";
					
					Session session=null;
					
					session = UtilidadHibernate.getSessionFactory().openSession();
					
					Transaction tx = session.beginTransaction();
					
					List message = session.createQuery("from Idioma").list();
					
					Iterator iter = message.iterator();
					
					Idioma i = (Idioma) iter.next();
					
					i.setNombre(idioma);
					
					session.update(i);
					
					tx.commit();
					
					session.close();
					
					flag_cambio_idioma=true;
					
					//JOptionPane.showMessageDialog(null, "Restart the program to change the language.", "Warning", JOptionPane.WARNING_MESSAGE);
					Principal.this.dispose();
					Principal thisClass = new Principal(true, usuario, marco_seleccionado);
					thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					//thisClass.usuario=usuario;
					thisClass.setVisible(true);
					if (usuario!=null){
						thisClass.jMenuItem9.setEnabled(false);
						if (usuario.getRol().equals("Implanter")){
							thisClass.jLabel3.setVisible(true);
							thisClass.jTextField1.setText(marco_seleccionado.getNombre());
							thisClass.jTextField1.setVisible(true);
						}
						else{
							thisClass.jLabel3.setVisible(false);
							thisClass.jTextField1.setVisible(false);
						}
					}
					/*thisClass.jMenuItem3.setIcon(null);
					thisClass.jMenuItem2.setIcon(new ImageIcon("./src/Imagenes/seleccionado.png"));*/
					
				}
			});
		}
		return jMenuItem2;
	}

	
	private JMenuItem getJMenuItem3() {
		if (jMenuItem3 == null) {
			jMenuItem3 = new JMenuItem();
			jMenuItem3.setIcon(new ImageIcon("./src/Imagenes/ingles.png"));
			
			/*if (jMenuItem3.isEnabled())
				jMenuItem3.setIcon(new ImageIcon("./src/imagenes/seleccionado.png"));
			else
				jMenuItem3.setIcon(null);*/
			
			if (idioma.equals("español")){
				jMenuItem3.setText("Inglés");
			}
			else{
				jMenuItem3.setEnabled(false);
				jMenuItem3.setText("English");
			}
			jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					/*jMenuItem2.setEnabled(true);
					jMenuItem3.setEnabled(false);*/
					
					
					idioma = "ingles";
					
					Session session=null;
					
					session = UtilidadHibernate.getSessionFactory().openSession();
					
					Transaction tx = session.beginTransaction();
					
					List message = session.createQuery("from Idioma").list();
					
					Iterator iter = message.iterator();
					
					Idioma i = (Idioma) iter.next();
					
					i.setNombre(idioma);
					
					session.update(i);
					
					tx.commit();
					
					session.close();
					
					flag_cambio_idioma=true;
					
					//JOptionPane.showMessageDialog(null, "Reinicia el programa para que los cambios surjan efecto.", "Advertencia", JOptionPane.WARNING_MESSAGE);
					Principal.this.dispose();
					
					Principal thisClass = new Principal(true, usuario, marco_seleccionado);
					thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					//thisClass.usuario=usuario;
					thisClass.setVisible(true);
					if (usuario!=null){
						thisClass.jMenuItem9.setEnabled(false);
					
						if (usuario.getRol().equals("Implanter")){
							thisClass.jLabel3.setVisible(true);
							thisClass.jTextField1.setText(marco_seleccionado.getNombre());
							thisClass.jTextField1.setVisible(true);
						}
						else{
							thisClass.jLabel3.setVisible(false);
							thisClass.jTextField1.setVisible(false);
						}
					}
					/*thisClass.jMenuItem2.setIcon(null);
					thisClass.jMenuItem3.setSelectedIcon(new ImageIcon("./src/Imagenes/seleccionado"));*/
				}
			});
		}
		return jMenuItem3;
	}

	
	private JMenuItem getJMenuItem9() {
		if (jMenuItem9 == null) {
			jMenuItem9 = new JMenuItem();
			jMenuItem9.setText("Login");
			jMenuItem9.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Login ventana = new Login(Principal.this);
					ventana.setLocationRelativeTo(Principal.this);
					ventana.setVisible(true);
				}
			});
		}
		return jMenuItem9;
	}

	
	private JMenuItem getJMenuItem10() {
		if (jMenuItem10 == null) {
			jMenuItem10 = new JMenuItem();
			if (idioma.equals("español"))
				jMenuItem10.setText("Usuarios");
			else
				jMenuItem10.setText("Users");
			jMenuItem10.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					MantenimientoUsuarios ventana = new MantenimientoUsuarios(Principal.this);
					ventana.setLocationRelativeTo(Principal.this);
					ventana.setVisible(true);
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Developer"))))
				jMenuItem10.setVisible(true);
			else
				jMenuItem10.setVisible(false);
		}
		return jMenuItem10;
	}

	
	private JMenuItem getJMenuItem121() {
		if (jMenuItem121 == null) {
			jMenuItem121 = new JMenuItem();
			if (idioma.equals("español"))
				jMenuItem121.setText("Desconectar");
			else
				jMenuItem121.setText("Disconnect");
			jMenuItem121.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					usuario=null;
					Principal.this.dispose();
					Principal thisClass = new Principal(true, usuario);
					thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					jMenu7.setVisible(true);
					thisClass.setVisible(true);
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Administrator") || usuario.getRol().equals("Developer") || usuario.getRol().equals("Implanter"))))
				jMenuItem121.setEnabled(true);
			else
				jMenuItem121.setEnabled(false);
		}
		return jMenuItem121;
	}

	
	private JMenuItem getJMenuItem122() {
		if (jMenuItem122 == null) {
			jMenuItem122 = new JMenuItem();
			jMenuItem122.setIcon(new ImageIcon("./src/Imagenes/editar.png"));
			if (idioma.equals("español"))
				jMenuItem122.setText("Modificar");
			else
				jMenuItem122.setText("Modify");
			jMenuItem122.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
						
					Modificar();
					
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Implanter") || usuario.getRol().equals("Developer"))))
				jMenuItem122.setEnabled(true);
			else
				jMenuItem122.setEnabled(false);
		}
		return jMenuItem122;
	}


	private JMenu getJMenu6() {
		if (jMenu6 == null) {
			jMenu6 = new JMenu();
			if (idioma.equals("español"))
				jMenu6.setText("Identificación");
			else
				jMenu6.setText("Identification");
			jMenu6.add(getJMenuItem9());
			jMenu6.add(getJMenuItem121());
		}
		return jMenu6;
	}

	
	private JMenu getJMenu7() {
		if (jMenu7 == null) {
			jMenu7 = new JMenu();
			if (idioma.equals("español"))
				jMenu7.setText("Proyecto");
			else
				jMenu7.setText("Project");
			jMenu7.add(getJMenuItem());
			jMenu7.add(getJMenuItem122());
			jMenu7.add(getJMenuItem14());
			jMenu7.add(getJMenuItem128());
			jMenu7.add(getJMenuItem1212());
			jMenu7.add(getJMenuItem1210());
			jMenu7.add(getJMenuItem1211());
			jMenu7.setVisible(false);
			
		}
		return jMenu7;
	}
	
	
	private JMenu getJMenu8() {
		if (jMenu8 == null) {
			jMenu8 = new JMenu();
			jMenu8.setBackground(new Color(238, 238, 238));
			if (idioma.equals("español"))
				jMenu8.setText("Aspecto");
			else
				jMenu8.setText("Appearance");
			jMenu8.add(getJMenuItem123());
			jMenu8.add(getJMenuItem124());
		}
		return jMenu8;
	}

	
	private JMenuItem getJMenuItem123() {
		if (jMenuItem123 == null) {
			jMenuItem123 = new JMenuItem();
			jMenuItem123.setText("System");
			
			Session session=null;
			
			session = UtilidadHibernate.getSessionFactory().openSession();
			
			List message = session.createQuery("from Aspecto").list();
			
			Iterator iter = message.iterator();
			
			Aspecto aspect = (Aspecto) iter.next();
			
			
			if (aspect.getNombre().equals("System")){
				jMenuItem123.setEnabled(false);
			}
			else
				jMenuItem123.setEnabled(true);
			
			session.close();
			
			jMenuItem123.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					cambiarLookAndFeel("System");
					
					jMenuItem123.setEnabled(false);
					jMenuItem124.setEnabled(true);
					
					Session session=null;
					
					session = UtilidadHibernate.getSessionFactory().openSession();
					
					Transaction tx = session.beginTransaction();
					
					List message = session.createQuery("from Aspecto").list();
					
					Iterator iter = message.iterator();
					
					Aspecto a = (Aspecto) iter.next();
					
					a.setNombre("System");
					
					session.update(a);
					
					tx.commit();
					
					session.close();
				}
			});
		}
		return jMenuItem123;
	}

	
	private JMenuItem getJMenuItem124() {
		if (jMenuItem124 == null) {
			jMenuItem124 = new JMenuItem();
			jMenuItem124.setText("Metal");
			
			Session session=null;
			
			session = UtilidadHibernate.getSessionFactory().openSession();
			
			List message = session.createQuery("from Aspecto").list();
			
			Iterator iter = message.iterator();
			
			Aspecto aspect = (Aspecto) iter.next();
			
			if (aspect.getNombre().equals("Metal")){
				jMenuItem124.setEnabled(false);
			}
			else
				jMenuItem124.setEnabled(true);
			
			session.close();
			
			jMenuItem124.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					cambiarLookAndFeel("Metal");
					
					jMenuItem124.setEnabled(false);
					jMenuItem123.setEnabled(true);
					
					Session session=null;
					
					session = UtilidadHibernate.getSessionFactory().openSession();
					
					Transaction tx = session.beginTransaction();
					
					List message = session.createQuery("from Aspecto").list();
					
					Iterator iter = message.iterator();
					
					Aspecto a = (Aspecto) iter.next();
					
					a.setNombre("Metal");
					
					session.update(a);
					
					tx.commit();
					
					session.close();

				}
			});
		}
		return jMenuItem124;
	}

	
	private JMenuItem getJMenuItem126() {
		if (jMenuItem126 == null) {
			jMenuItem126 = new JMenuItem();
			if (idioma.equals("español")){
				jMenuItem126.setText("Listado de fases");
				jMenuItem126.setIcon(new ImageIcon("./src/Imagenes/informe_fases.png"));
			}
			else{
				jMenuItem126.setText("List of phases");
				jMenuItem126.setIcon(new ImageIcon("./src/Imagenes/informe_phases.png"));
			}
			jMenuItem126.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					Informe_fases();	
				}
			});
		}
		return jMenuItem126;
	}

	
	private JMenuItem getJMenuItem127() {
		if (jMenuItem127 == null) {
			jMenuItem127 = new JMenuItem();
			jMenuItem127.setIcon(new ImageIcon("./src/Imagenes/informe_vistas.png"));
			if (idioma.equals("español")){
				jMenuItem127.setText("Listado de vistas");
			}
			else{
				jMenuItem127.setText("List of views");
			}
			jMenuItem127.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Informe_vistas();	
				}
			});
		}
		return jMenuItem127;
	}

	
	private JMenuItem getJMenuItem128() {
		if (jMenuItem128 == null) {
			jMenuItem128 = new JMenuItem();
			jMenuItem128.setIcon(new ImageIcon("./src/Imagenes/duplicar.png"));
			if (idioma.equals("español"))
				jMenuItem128.setText("Duplicar");
			else
				jMenuItem128.setText("Duplicate");
			jMenuItem128.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					Duplicar();
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Implanter") || usuario.getRol().equals("Developer"))))
				jMenuItem128.setEnabled(true);
			else
				jMenuItem128.setEnabled(false);
		}
		return jMenuItem128;
	}

	
	private JMenuItem getJMenuItem129() {
		if (jMenuItem129 == null) {
			jMenuItem129 = new JMenuItem();
			jMenuItem129.setIcon(new ImageIcon("./src/Imagenes/informe_bloques.png"));
			if (idioma.equals("español")){
				jMenuItem129.setText("Listado de bloques constructivos");
			}
			else{
				jMenuItem129.setText("List of building blocks");
			}
			jMenuItem129.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {

					Informe_bloques();
				}
			});
		}
		return jMenuItem129;
	}

	
	private JMenuItem getJMenuItem125() {
		if (jMenuItem125 == null) {
			jMenuItem125 = new JMenuItem();
			jMenuItem125.setText("Generar XML");
			jMenuItem125.setVisible(false);
			jMenuItem125.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Xml claseXML = new Xml();
					try {
						int numero = jList.getSelectedIndex();
						if (numero >= 0){
							Plantilla plantilla = (Plantilla) modelo.getElementAt(numero);
							//claseXML2.generatePartialXML("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "PUBLIC", "aaaaa");
							claseXML.generateXML("org.hsqldb.jdbcDriver", "jdbc:hsqldb:hsql://localhost/pfc", "sa", "", "PUBLIC", "BD", plantilla);
						}
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			});
		}
		return jMenuItem125;
	}

	
	private JMenuItem getJMenuItem1210() {
		if (jMenuItem1210 == null) {
			jMenuItem1210 = new JMenuItem();
			if (idioma.equals("español"))
				jMenuItem1210.setText("Importar");
			else
				jMenuItem1210.setText("Import");
			jMenuItem1210.setIcon(new ImageIcon("./src/Imagenes/importar.png"));
			jMenuItem1210.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//Importar();
					ImportarLecturaXML();	
					
				}
			});
			if (usuario!=null && (usuario.getRol().equals("Developer") || usuario.getRol().equals("Implanter")))
				jMenuItem1210.setVisible(true);
			else
				jMenuItem1210.setVisible(false);
		}
		return jMenuItem1210;
	}

	
	private JMenuItem getJMenuItem1211() {
		if (jMenuItem1211 == null) {
			jMenuItem1211 = new JMenuItem();
			if (idioma.equals("español"))
				jMenuItem1211.setText("Exportar");
			else
				jMenuItem1211.setText("Export");
			jMenuItem1211.setIcon(new ImageIcon("./src/Imagenes/exportar.png"));
			jMenuItem1211.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//Exportar();
					ExportarEscrituraXML();
				}
			});
			if (usuario!=null && (usuario.getRol().equals("Developer") || usuario.getRol().equals("Implanter")))
				jMenuItem1211.setVisible(true);
			else
				jMenuItem1211.setVisible(false);
		}
		return jMenuItem1211;
	}


	private JMenuItem getJMenuItem1212() {
		if (jMenuItem1212 == null) {
			jMenuItem1212 = new JMenuItem();
			if (idioma.equals("español"))
				jMenuItem1212.setText("Cambiar de marco");
			else
				jMenuItem1212.setText("Change framework");
			jMenuItem1212.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					SeleccionarMarco ventana = new SeleccionarMarco(Principal.this, false);
					ventana.setLocationRelativeTo(Principal.this);
					ventana.setModal(true);
					ventana.setVisible(true);	
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Implanter"))))
				jMenuItem1212.setVisible(true);
			else
				jMenuItem1212.setVisible(false);
		}
		return jMenuItem1212;
	}

	
	private JMenuItem getJMenuItem1213() {
		if (jMenuItem1213 == null) {
			jMenuItem1213 = new JMenuItem();
			jMenuItem1213.setIcon(new ImageIcon("./src/Imagenes/informe_instancias.png"));
			if (idioma.equals("español")){
				jMenuItem1213.setText("Listado de instancias");
			}
			else{
				jMenuItem1213.setText("List of instances");
			}
			jMenuItem1213.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Informe_instancias();
				}
			});
		}
		return jMenuItem1213;
	}


	
	/************************* Botones ***********************************/
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			if (idioma.equals("español"))
				jButton.setText("Abrir Editor");
			else
				jButton.setText("Open Editor");
			
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					try{				
						int idbloque = jList3.getSelectedIndex();
						if (idbloque!=-1){
							EditorDeBloques ventana = new EditorDeBloques(Principal.this);
							ventana.setLocationRelativeTo(Principal.this);
							ventana.setVisible(true);
							ventana.setSize(ventana.getToolkit().getScreenSize());
							
						}
						else{
							if (idioma.equals("español"))
								throw new Exception("Error, selecciona un bloque de la lista");
							else
								throw new Exception("Error, select a block of the list");
						}
					}
					catch (Exception exp) {
						// TODO: handle exception
						JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
					}
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Administrator") || usuario.getRol().equals("Developer"))))
				jButton.setVisible(true);
			else
				jButton.setVisible(false);
		}
		return jButton;
	}

	
	private JButton getJButton1() {
		if (jButton1 == null) {
			jButton1 = new JButton();
			jButton1.setIcon(new ImageIcon("./src/Imagenes/borrar.png"));
			if (usuario!=null){
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						jButton1.setToolTipText("Borrar plantilla");
					else
						jButton1.setToolTipText("Delete framework");
				}
				else{
					if (idioma.equals("español"))
						jButton1.setToolTipText("Borrar proyecto");
					else
						jButton1.setToolTipText("Delete project");
				}
			}
			else{
				jButton1.setVisible(false);
			}
			jButton1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Borrar();
				}
			});
					
		}
		return jButton1;
	}

	
	private JButton getJButton2() {
		if (jButton2 == null) {
			jButton2 = new JButton();
			jButton2.setBackground(new Color(238, 238, 238));
			jButton2.setIcon(new ImageIcon("./src/Imagenes/nuevo2.png"));
			if (usuario!=null){
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						jButton2.setToolTipText("Nueva plantilla");
					else
						jButton2.setToolTipText("New framework");
				}
				else{
					if (idioma.equals("español"))
						jButton2.setToolTipText("Nuevo proyecto");
					else
						jButton2.setToolTipText("New project");
				}
			}
			else{
				jButton2.setVisible(false);
			}
			jButton2.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					NuevoProyectoPlantilla ventana=new NuevoProyectoPlantilla(Principal.this, false);
					ventana.setLocationRelativeTo(Principal.this);
					ventana.setVisible(true);
				}
			});
		}
		return jButton2;
	}

	
	private JButton getJButton3() {
		if (jButton3 == null) {
			jButton3 = new JButton();
			if (idioma.equals("español"))
				jButton3.setText("Instancias");
			else
				jButton3.setText("Instances");
			jButton3.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					try{				
						int idbloque = jList3.getSelectedIndex();
						if (idbloque==-1){
							if (idioma.equals("español"))
								throw new Exception("Error, selecciona un bloque de la lista");
							else
								throw new Exception("Error, select a block of the list");
						}
						else{
							BloqueConstructivo bloque = (BloqueConstructivo) modeloBloque.getElementAt(idbloque);
							
							MantenimientoInstancia instancia = new MantenimientoInstancia(Principal.this, bloque);
							instancia.setLocationRelativeTo(Principal.this);
							instancia.setVisible(true);
						}
					}catch (Exception exp) {
						// TODO: handle exception
						JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
					}
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Administrator") || usuario.getRol().equals("Implanter"))))
				jButton3.setVisible(true);
			else
				jButton3.setVisible(false);
		}
		return jButton3;
	}
	
	
	private JButton getJButton4() {
		if (jButton4 == null) {
			jButton4 = new JButton();
			jButton4.setIcon(new ImageIcon("./src/Imagenes/help.png"));
			if (idioma.equals("español"))
				jButton4.setToolTipText("Ayuda");
			else
				jButton4.setToolTipText("Help");
			jButton4.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Ayuda ventana=new Ayuda(Principal.this);
					ventana.setLocationRelativeTo(Principal.this);
					ventana.setVisible(true);
				}
			});
			
		}
		return jButton4;
	}

	
	private JButton getJButton5() {
		if (jButton5 == null) {
			jButton5 = new JButton();
			jButton5.setIcon(new ImageIcon("./src/Imagenes/importar.png"));
			if (usuario!=null){
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						jButton5.setToolTipText("Importar");
					else
						jButton5.setToolTipText("Import");
				}
				else{
					if (idioma.equals("español"))
						jButton5.setToolTipText("Importar");
					else
						jButton5.setToolTipText("Import");
				}
			}
			else{
				jButton5.setVisible(false);
			}
			
			jButton5.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//Importar();
					ImportarLecturaXML();
				}
			});
			if (usuario!=null && ( usuario.getRol().equals("Developer") || usuario.getRol().equals("Implanter")))
				jButton5.setVisible(true);
			else
				jButton5.setVisible(false);
		}
		return jButton5;
	}

	
	private JButton getJButton6() {
		if (jButton6 == null) {
			jButton6 = new JButton();
			jButton6.setIcon(new ImageIcon("./src/Imagenes/exportar.png"));
			if (usuario!=null){
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						jButton6.setToolTipText("Exportar");
					else
						jButton6.setToolTipText("Export");
				}
				else{
					if (idioma.equals("español"))
						jButton6.setToolTipText("Exportar");
					else
						jButton6.setToolTipText("Export");
				}
			}
			else{
				jButton6.setVisible(false);
			}
			jButton6.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//Exportar();
					ExportarEscrituraXML();
				}
			});
			if (usuario!=null && (usuario.getRol().equals("Developer") || usuario.getRol().equals("Implanter")))
				jButton6.setVisible(true);
			else
				jButton6.setVisible(false);
		}
		return jButton6;
	}

	
	private JButton getJButton7() {
		if (jButton7 == null) {
			jButton7 = new JButton();
			jButton7.setIcon(new ImageIcon("./src/Imagenes/editar.png"));
			if (usuario!=null){
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						jButton7.setToolTipText("Editar plantilla");
					else
						jButton7.setToolTipText("Edit framework");
				}
				else{
					if (idioma.equals("español"))
						jButton7.setToolTipText("Editar proyecto");
					else
						jButton7.setToolTipText("Edit project");
				}
			}
			else{
				jButton7.setVisible(false);
			}
			jButton7.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Modificar();
				}
			});
		}
		return jButton7;
	}

	
	private JButton getJButton8() {
		if (jButton8 == null) {
			jButton8 = new JButton();
			jButton8.setIcon(new ImageIcon("./src/Imagenes/duplicar.png"));
			if (usuario!=null){
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						jButton8.setToolTipText("Duplicar plantilla");
					else
						jButton8.setToolTipText("Duplicate framework");
				}
				else{
					if (idioma.equals("español"))
						jButton8.setToolTipText("Duplicar proyecto");
					else
						jButton8.setToolTipText("Duplicate project");
				}
			}
			else{
				jButton8.setVisible(false);
			}
			jButton8.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Duplicar();
				}
			});
		}
		return jButton8;
	}

	
	private JButton getJButton9() {
		if (jButton9 == null) {
			jButton9 = new JButton();
			jButton9.setIcon(new ImageIcon("./src/Imagenes/informe_instancias.png"));
			if (idioma.equals("español"))
				jButton9.setToolTipText("Informe de instancias");
			else
				jButton9.setToolTipText("Report of instances");
			jButton9.setPreferredSize(new Dimension(25, 25));
			
			jButton9.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Informe_instancias();
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Administrator") || usuario.getRol().equals("Implanter"))))
				jButton9.setVisible(true);
			else
				jButton9.setVisible(false);
			
		}
		return jButton9;
	}

	
	private JButton getJButton10() {
		if (jButton10 == null) {
			jButton10 = new JButton();
			if (idioma.equals("español"))
				jButton10.setIcon(new ImageIcon("./src/Imagenes/informe_fases.png"));
			else
				jButton10.setIcon(new ImageIcon("./src/Imagenes/informe_phases.png"));
			if (usuario!=null){
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						jButton10.setToolTipText("Informe de fases");
					else
						jButton10.setToolTipText("Report of phases");
				}
				else{
					if (idioma.equals("español"))
						jButton10.setToolTipText("Informe de fases");
					else
						jButton10.setToolTipText("Report of phases");
				}
			}
			else{
				jButton10.setVisible(false);
			}
			jButton10.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Informe_fases();
				}
			});
		}
		return jButton10;
	}

	
	private JButton getJButton11() {
		if (jButton11 == null) {
			jButton11 = new JButton();
			jButton11.setIcon(new ImageIcon("./src/Imagenes/informe_vistas.png"));
			if (usuario!=null){
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						jButton11.setToolTipText("Informe de vistas");
					else
						jButton11.setToolTipText("Report of views");
				}
				else{
					if (idioma.equals("español"))
						jButton11.setToolTipText("Informe de vistas");
					else
						jButton11.setToolTipText("Report of views");
				}
			}
			else{
				jButton11.setVisible(false);
			}
			jButton11.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Informe_vistas();
				}
			});
		}
		return jButton11;
	}

	
	private JButton getJButton12() {
		if (jButton12 == null) {
			jButton12 = new JButton();
			jButton12.setIcon(new ImageIcon("./src/Imagenes/informe_bloques.png"));
			if (usuario!=null){
				if (usuario.getRol().equals("Developer")){
					if (idioma.equals("español"))
						jButton12.setToolTipText("Informe de bloques");
					else
						jButton12.setToolTipText("Report of blocks");
				}
				else{
					if (idioma.equals("español"))
						jButton12.setToolTipText("Informe de bloques");
					else
						jButton12.setToolTipText("Report of blocks");
				}
			}
			else{
				jButton12.setVisible(false);
			}
			jButton12.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Informe_bloques();
				}
			});
		}
		return jButton12;
	}
	

	/************************* Campos de texto ***********************************/
	private JTextArea getJTextArea() {
		if (jTextArea == null) {
			jTextArea = new JTextArea();
			jTextArea.setEditable(false);
			jTextArea.setBorder(null);
			jTextArea.setFont(new Font("Dialog", Font.PLAIN, 12));
			Color c = new Color(238,238,238);
			jTextArea.setBackground(c);
			
		}
		return jTextArea;
	}
	
	
	private JTextField getJTextField() {
		if (jTextField == null) {
			jTextField = new JTextField();
			jTextField.setEditable(false);
			jTextField.setBorder(BorderFactory.createLineBorder(Color.lightGray, 1));
			jTextField.setBackground(new Color(238, 238, 238));
			
		}
		return jTextField;
	}
	
	

	
	private JTextField getJTextField1() {
		if (jTextField1 == null) {
			jTextField1 = new JTextField();
			jTextField1.setBackground(new Color(238, 238, 238));
			jTextField1.setEditable(false);
			jTextField1.setBorder(BorderFactory.createLineBorder(Color.lightGray, 1));
			jTextField1.setVisible(false);
		}
		return jTextField1;
	}
	
	
	/**************************** Listas ******************************************/
	public JList getJList() {
		if (jList == null) {
			jList = new JList();
			jList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
					try{
					
						int indice = jList.getSelectedIndex();
						if (indice != -1){

							modeloVista.removeAllElements();
							modeloFase.removeAllElements();
							
							Proyecto proyecto = null;
							Plantilla plantilla = null;
							
							if (usuario.getRol().equals("Implanter")){

								proyecto = (Proyecto) modelo.getElementAt(indice);
								jTextField.setText(proyecto.getNombre());
								jTextField1.setText(marco_seleccionado.getNombre());
								jTextArea.setText(proyecto.getDescripcion());
								if (idioma.equals("español"))
									jLabel.setText("Proyecto: " + proyecto.getNombre());
								else
									jLabel.setText("Project: " + proyecto.getNombre());
							}
							else if (usuario.getRol().equals("Developer")){
								
								plantilla = (Plantilla) modelo.getElementAt(indice);
								jTextField.setText(plantilla.getNombre());
								jTextArea.setText(plantilla.getDescripcion());
								if (idioma.equals("español"))
									jLabel.setText("Marco: " + plantilla.getNombre());
								else
									jLabel.setText("Framework: " + plantilla.getNombre());
							}
							
							Session session = UtilidadHibernate.getSessionFactory().openSession();
							
							Transaction tx = session.beginTransaction();
							
							modeloBloque.removeAllElements();
							List messages = null;
							if (usuario.getRol().equals("Implanter")){
								messages = session.createQuery("from BloqueConstructivo m where id_plantilla = '"+marco_seleccionado.getIdPlantilla()+"' order by nombre asc").list();
							}
							else if (usuario.getRol().equals("Developer")){
								messages = session.createQuery("from BloqueConstructivo m where id_plantilla = '"+plantilla.getIdPlantilla()+"' order by nombre asc").list();
							}
							
							//System.out.println("Número de elementos: " + messages.size());
							for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
								BloqueConstructivo bloque = (BloqueConstructivo) iter.next();
								modeloBloque.addElement(bloque);
								
							}
							jList3.setModel(modeloBloque);
							tx.commit();
							session.close();
						}
					}
					catch (Exception exp) {
						// TODO: handle exception
						JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
					}
						
				}
			});
			if ((usuario!=null && (usuario.getRol().equals("Administrator") || usuario.getRol().equals("Developer") || usuario.getRol().equals("Implanter"))))
				jList.setEnabled(true);
			else
				jList.setEnabled(false);
		}
		return jList;
	}
	

	private JList getJList1() {
		if (jList1 == null) {
			jList1 = new JList();
			jList1.setSize(new Dimension(212, 100));
		}
		return jList1;
	}
	
	
	private JList getJList2() {
		if (jList2 == null) {
			jList2 = new JList();
			jList2.setSize(new Dimension(212, 100));
		}
		return jList2;
	}
	

	private JList getJList3() {
		if (jList3 == null) {
			jList3 = new JList();
			jList3.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
					try{
						
						int indice = jList3.getSelectedIndex();
						if (indice != -1){

							BloqueConstructivo bloque = (BloqueConstructivo) modeloBloque.getElementAt(indice);

							modeloFase.removeAllElements();
							modeloVista.removeAllElements();
							
							//Añadir las fases del bloque seleccionado en la lista de Fases
							Session session = UtilidadHibernate.getSessionFactory().openSession();
							
							List messages = session.createQuery("from FaseBloque b where id_bloque = '"+bloque.getIdBloque()+"'").list();
							for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
								FaseBloque fasebloque = (FaseBloque) iter.next();
								
								List messages2 = session.createQuery("from FasePlantilla where id_fase_plantilla = '"+fasebloque.getFasePlantilla().getIdFasePlantilla()+"'").list();
								for ( Iterator iter2 = messages2.iterator(); iter2.hasNext(); ) {
									FasePlantilla faseplantilla = (FasePlantilla) iter2.next();
									modeloFase.addElement(faseplantilla);
								}
							}
							
							jList2.setModel(modeloFase);
							
							//VISTA
							//Añadir las vistas del bloque seleccionado en la lista de Vistas
							messages = session.createQuery("from VistaBloque where id_bloque = '"+bloque.getIdBloque()+"'").list();
							for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
								VistaBloque vistabloque = (VistaBloque) iter.next();
								
								List messages2 = session.createQuery("from VistaPlantilla where id_vista_plantilla = '"+vistabloque.getVistaPlantilla().getIdVistaPlantilla()+"'").list();
								for ( Iterator iter2 = messages2.iterator(); iter2.hasNext(); ) {
									VistaPlantilla vistaplantilla = (VistaPlantilla) iter2.next();
									modeloVista.addElement(vistaplantilla);
								}
							}
							
							/*ArrayList conjunto_vistas = (ArrayList) bloque.getListaVistas();
							for (Iterator iter = conjunto_vistas.iterator(); iter.hasNext();){
								Vista vista = (Vista) iter.next();
								modeloVista.addElement(vista);
								//Fase fase = (Fase) session.get(Fase.class, bloque.getFases().get(0));
							}*/
							jList1.setModel(modeloVista);
						}
					}
					catch (Exception exp) {
						// TODO: handle exception
						JOptionPane.showMessageDialog(null, exp.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
					}
				}
			});
		}
		return jList3;
	}
	
	
	public JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setPreferredSize(new Dimension(200, 3));
			jScrollPane.setViewportView(getJList());
		}
		return jScrollPane;
	}

	
	private JScrollPane getJScrollPane1() {
		if (jScrollPane1 == null) {
			jScrollPane1 = new JScrollPane();
			jScrollPane1.setViewportView(getJPanel());
		}
		return jScrollPane1;
	}
	
	

	
	
	private JScrollPane getJScrollPane2() {
		if (jScrollPane2 == null) {
			jScrollPane2 = new JScrollPane();
			jScrollPane2.setBorder(BorderFactory.createLineBorder(Color.lightGray, 1));
			jScrollPane2.setViewportView(getJTextArea());
		}
		return jScrollPane2;
	}
	
	

	
	private JScrollPane getJScrollPane3() {
		if (jScrollPane3 == null) {
			jScrollPane3 = new JScrollPane();
			jScrollPane3.setViewportView(getJList3());
		}
		return jScrollPane3;
	}
	
	
	
	
	private JScrollPane getJScrollPane4() {
		if (jScrollPane4 == null) {
			jScrollPane4 = new JScrollPane();
			jScrollPane4.setPreferredSize(new Dimension(3, 100));
			jScrollPane4.setViewportView(getJList1());
		}
		return jScrollPane4;
	}
	
	
	private JScrollPane getJScrollPane5() {
		if (jScrollPane5 == null) {
			jScrollPane5 = new JScrollPane();
			jScrollPane5.setPreferredSize(new Dimension(3, 100));
			jScrollPane5.setViewportView(getJList2());
		}
		return jScrollPane5;
	}


	/********************************* Otros *********************************/

	private JFileChooser getJFileChooser() {
		if (jFileChooser == null) {
			jFileChooser = new JFileChooser();
			jFileChooser.setSize(new Dimension(354, 271));
		}
		return jFileChooser;
	}
	
	
	
	/**
	 * This method initializes jMenuItem1215	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	/*private JMenuItem getJMenuItem1215() {
		if (jMenuItem1215 == null) {
			jMenuItem1215 = new JMenuItem();
			jMenuItem1215.setIcon(new ImageIcon("./src/Imagenes/informe_modelo_madurez.png"));
			if (idioma.equals("español")){
				jMenuItem1215.setText("Listado de modelo de madurez");
			}
			else{
				jMenuItem1215.setText("List of maturity model");
			}
			jMenuItem1215.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Informe_modelo_madurez();
				}
			});
		}
		return jMenuItem1215;
	}*/

	/**
	 * This method initializes jMenu9	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenu9() {
		if (jMenu9 == null) {
			jMenu9 = new JMenu();
			if (idioma.equals("español")){
				jMenu9.setText("Modelo de madurez");
			}
			else{
				jMenu9.setText("Madurity model");
			}
			jMenu9.add(getJMenuItem1216());
			jMenu9.add(getJMenuItem1217());
			jMenu9.add(getJMenuItem1218());
						
		}
		return jMenu9;
	}

	/**
	 * This method initializes jMenuItem1216	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItem1216() {
		if (jMenuItem1216 == null) {
			jMenuItem1216 = new JMenuItem();
			jMenuItem1216.setIcon(new ImageIcon("./src/Imagenes/informe_modelo_madurez.png"));
			if (idioma.equals("español")){
				jMenuItem1216.setText("Informe de modelo de madurez");
			}
			else{
				jMenuItem1216.setText("Madurity modelo report");
			}
			jMenuItem1216.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//Informe_modelo_madurez();
					try{
						int id_proyecto = jList.getSelectedIndex();
						if (id_proyecto >= 0){
							
							ModeloMadurezPorFechas ventana = new ModeloMadurezPorFechas(Principal.this, 0, marco_seleccionado);
							ventana.setLocationRelativeTo(Principal.this);
							ventana.setVisible(true);
						}
						else{
							if (idioma.equals("español"))
								throw new Exception("Error, selecciona un proyecto de la lista de proyectos.");
							else
								throw new Exception("Error, select a project of the project list.");
						}
					}
					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);
					}
				}
			});
			
		}
		return jMenuItem1216;
	}

	/**
	 * This method initializes jMenuItem1217	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItem1217() {
		if (jMenuItem1217 == null) {
			jMenuItem1217 = new JMenuItem();
			if (idioma.equals("español")){
				jMenuItem1217.setText("Gráfico de medias parciales");
				jMenuItem1217.setIcon(new ImageIcon("./src/Imagenes/grafico_media_parcial.png"));
			}
			else{
				jMenuItem1217.setText("Partial average graphic");
				jMenuItem1217.setIcon(new ImageIcon("./src/Imagenes/graphic_partial_average.png"));
			}
			jMenuItem1217.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//Grafico_modelo_madurez_parcial();
					try{
						int id_proyecto = jList.getSelectedIndex();
						if (id_proyecto >= 0){
							
							ModeloMadurezPorFechas ventana = new ModeloMadurezPorFechas(Principal.this, 1, marco_seleccionado);
							ventana.setLocationRelativeTo(Principal.this);
							ventana.setVisible(true);
						}
						else{
							if (idioma.equals("español"))
								throw new Exception("Error, selecciona un proyecto de la lista de proyectos.");
							else
								throw new Exception("Error, select a project of the project list.");
						}
					}
					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);
					}
					
				}
			});
		}
		return jMenuItem1217;
	}

	/**
	 * This method initializes jMenuItem1218	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItem1218() {
		if (jMenuItem1218 == null) {
			jMenuItem1218 = new JMenuItem();
			if (idioma.equals("español")){
				jMenuItem1218.setText("Gráfico de medias globales");
				jMenuItem1218.setIcon(new ImageIcon("./src/Imagenes/grafico_media_global.png"));
			}
			else{
				jMenuItem1218.setText("Global average graphic");
				jMenuItem1218.setIcon(new ImageIcon("./src/Imagenes/graphic_global_average.png"));
			}
			jMenuItem1218.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//Grafico_modelo_madurez_global();
					try{
						int id_proyecto = jList.getSelectedIndex();
						if (id_proyecto >= 0){
							
							ModeloMadurezPorFechas ventana = new ModeloMadurezPorFechas(Principal.this, 2, marco_seleccionado);
							ventana.setLocationRelativeTo(Principal.this);
							ventana.setVisible(true);
						}
						else{
							if (idioma.equals("español"))
								throw new Exception("Error, selecciona un proyecto de la lista de proyectos.");
							else
								throw new Exception("Error, select a project of the project list.");
						}
					}
					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);
					}
				}
			});
		}
		return jMenuItem1218;
	}

	/*********************************************************************/	
	/*********************************************************************/	
	/**************************** MAIN ***********************************/
	/*********************************************************************/
	/*********************************************************************/
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				/*Runtime aplicacion = Runtime.getRuntime(); 
		        try{
		        	aplicacion.exec("cmd.exe /K start C:/hsql/demo/runServer.bat"); }
		        catch(Exception e){
		        	System.out.println(e);
		        }*/
				
				/*Runtime aplicacion = Runtime.getRuntime(); 
		        try{
		        	aplicacion.exec("cmd.exe /K start C:/hsql/demo/runServer.bat"); }
		        catch(Exception e){
		        	System.out.println(e);
		        }*/
		        
		        /*Runtime aplicacion = Runtime.getRuntime(); 
		        try{
		        	aplicacion.exec("cmd.exe /K start D:/MISPRO~1/AP1585~1/ECLIPS~2.2SD/HSQLDB~1.10/demo/runServer.bat"); }
		        catch(Exception e){
		        	System.out.println(e);
		        }*/
				
				/*Runtime aplicacion = Runtime.getRuntime(); 
		        try{
		        	aplicacion.exec("cmd.exe /K start C:/PFC/BD/demo/runServer.bat"); }
		        catch(Exception e){
		        	System.out.println(e);
		        }*/
				
				
				createAndShowGUI();
				
				/*Principal thisClass = new Principal(false);
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);*/
				
				
				/*Runtime aplicacion = Runtime.getRuntime(); 
		        try{
		        	aplicacion.exec("cmd.exe /K start C:/hsql/demo/runServer.bat"); }
		        catch(Exception e){
		        	System.out.println(e);
		        }*/
				
			}
		});
	}

	
	
	
	/*********************************************************************/	
	/*********************************************************************/	
	/************************* CONSTRUCTORES *****************************/
	/*********************************************************************/
	/*********************************************************************/
	
	public Principal(boolean opcion) {
		super();
		flag_cambio_idioma=opcion;
		initialize();
	}
	
	public Principal(boolean opcion, Usuario user) {
		super();
		flag_cambio_idioma=opcion;
		usuario=user;
		initialize();
	}
	
	public Principal(boolean opcion, Usuario user, Plantilla m) {
		super();
		flag_cambio_idioma=opcion;
		usuario=user;
		marco_seleccionado=m;
		initialize();
	}
	
	

	
	/*********************************************************************/	
	/*********************************************************************/	
	/************************* CLASE DE INICIALIZACIÓN *******************/
	/*********************************************************************/
	
	private void initialize() {
		
		Session session=null;
		
		session = UtilidadHibernate.getSessionFactory().openSession();
		
		Transaction tx = session.beginTransaction();
		
		List message = session.createQuery("from Idioma").list();
		Idioma i = new Idioma();
		if (message.size()>0){
		
			Iterator iter = message.iterator();
			
			i = (Idioma) iter.next();
			
			idioma = i.getNombre();
			
			if (idioma.equals("ingles")){
				JOptionPane.setDefaultLocale(new Locale("en", "", ""));
			}
			else
				JOptionPane.setDefaultLocale(new Locale("es", "", ""));
			
			session.update(i);
		}
		else{
			idioma="español";
			i.setNombre(idioma);
			session.save(i);
		}
		tx.commit();
		

		this.setSize(800,600);
		this.setExtendedState(this.MAXIMIZED_BOTH);
		int d = this.MAXIMIZED_BOTH;

		this.setPreferredSize(new Dimension(640, 480));
		this.setJMenuBar(getJJMenuBar());
		this.setContentPane(getJContentPane());
		if (idioma.equals("español"))
			this.setTitle("Arquitectura del marco de trabajo");
		else
			this.setTitle("Architecture Framework");
		
		
		this.addWindowListener(new java.awt.event.WindowAdapter() {   
			public void windowClosing(java.awt.event.WindowEvent e) {    
				Session sesion = UtilidadHibernate.getSessionFactory().openSession();
				Transaction tx = sesion.beginTransaction();
				sesion.createSQLQuery("shutdown");
				tx.commit();
				sesion.close();
			}
			public void windowOpened(java.awt.event.WindowEvent e) {
				
				
				ActualizaListaProyectosPlantillas(marco_seleccionado);
				
				//Limpiamos las listas de bloques, Vistas y Fases
				jList1.removeAll(); //Limpiamos la lista Vistas
				jList2.removeAll(); //Limpiamos la lista de Fases
				jList3.removeAll(); //Limpiamos la lista de Bloques Constructivos
				
				Session sesion = UtilidadHibernate.getSessionFactory().openSession();
				
				List message = sesion.createQuery("from Aspecto").list();
				
				Iterator iter = message.iterator();
				
				Aspecto aspect = (Aspecto) iter.next();

				if (aspect.getNombre().equals("System")){
					jMenuItem124.setEnabled(true);
					jMenuItem123.setEnabled(false);
				}
				else{
					jMenuItem123.setEnabled(true);
					jMenuItem124.setEnabled(false);
				}
				
				sesion.close();
				
			}	
		});
		
	}
	
	//Gráficos
	private static void createAndShowGUI() {
		
		Session session = UtilidadHibernate.getSessionFactory().openSession();
		
		Transaction tx = session.beginTransaction();
		
		List message = session.createQuery("from Aspecto").list();
		Aspecto a = new Aspecto();
		
		if (message.size()>0){
			Iterator iter = message.iterator();	
			a = (Aspecto) iter.next();
			session.update(a);
		}
		else{
			a.setNombre("System");
			session.save(a);
		}
		tx.commit();
		
		session.close();
		
//		Inicializa el look and feel
		initLookAndFeel(a.getNombre());
		Principal thisClass = new Principal(false);
		thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		thisClass.setVisible(true);
	}

}
