View Javadoc

1   package es.inteco.eni.swing;
2   
3   import java.io.IOException;
4   
5   import javax.swing.JOptionPane;
6   import javax.swing.JTabbedPane;
7   import javax.swing.event.ChangeEvent;
8   import javax.swing.event.ChangeListener;
9   
10  import org.apache.log4j.Logger;
11  
12  import es.inteco.eni.commons.MessagesHelper;
13  import es.inteco.eni.utils.ExceptionUtils;
14  import es.inteco.eni.xml.ENIXmlUtils;
15  import es.inteco.eni.xml.ValidationXmlResult;
16  
17  /**
18   * Listener que controla la seleccion de una pestaña
19   * 
20   * 
21   *
22   */
23  public class ChangeTabListener implements ChangeListener{
24  	/**
25  	 * Log
26  	 */
27  	private static Logger log = Logger.getLogger(ChangeTabListener.class);
28  	/**
29  	 * Ventana del validador
30  	 */
31  	private ENIValidator eniValidator;
32  	
33  	/**
34  	 * Constructor
35  	 * @param eniValidator Ventana del validador
36  	 */
37  	public ChangeTabListener(ENIValidator eniValidator){
38  		this.eniValidator = eniValidator;
39  	}
40  	
41  	/**
42  	 * 
43  	 * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent)
44  	 */
45  	@Override
46  	public void stateChanged(ChangeEvent evt) {
47  		JTabbedPane pane = (JTabbedPane)evt.getSource();
48  		//Pestaña
49  		int selectedTab = pane.getSelectedIndex(); 
50  		eniValidator.cleanConsole();
51  		eniValidator.getTransformedViewPane().setXmlTree(null);
52  		if(selectedTab == ENIValidator.TRANSFORMED_VIEW_TAB_INDEX){
53  			//Mensaje "Construyendo..." en la consola
54  			eniValidator.appendConsoleMessage(MessagesHelper.getText("eni.view.build.message"));
55  			eniValidator.getTransformedViewRadioButton().setSelected(true);
56  			//Borra los posibles elementos de la vista transformada y añade la vista en forma de esquema
57  			eniValidator.getGraphicViewPanel().removeAll();
58  			eniValidator.getGraphicViewPanel().add(eniValidator.getTransformedViewScroll());
59  			eniValidator.repaint();
60  			
61  			new XMLTreeThread(eniValidator).start();
62  		}
63  		
64  	}
65  
66  	/**
67  	 * Thread para construir el arbol a partir del XML
68  	 * 
69  	 *
70  	 */
71  	private static final class XMLTreeThread extends Thread {
72  		/**
73  		 * Ventana del validador
74  		 */
75  		private ENIValidator eniValidator;
76  		
77  		/**
78  		 * Constructor
79  		 * @param eniValidator Ventana del validador
80  		 */
81  		private XMLTreeThread(ENIValidator eniValidator){
82  			this.eniValidator = eniValidator;
83  		}
84  
85  		/**
86  		 * 
87  		 * @see java.lang.Thread#run()
88  		 */
89  		@Override
90  		public void run() {
91  			try{
92  				//XML
93  				String xmlContent = eniValidator.getXmlContentTextarea().getText();
94  				//Valida y constrye el arbol
95  				String filePath = eniValidator.getFile()!=null && eniValidator.getParentFile()!=null? eniValidator.getParentFile().getAbsolutePath() : "";
96  				ValidationXmlResult validationXmlResult = ENIXmlUtils.validateWithExtXSD(xmlContent, filePath);
97  				
98  				if(!validationXmlResult.isValidationError()){
99  					//Muestra la vista a partir del arbol
100 					eniValidator.getTransformedViewPane().setXmlTree(validationXmlResult.getXmlTree());
101 					eniValidator.getTreeViewPane().setXmlTree(validationXmlResult.getXmlTree());
102 					eniValidator.cleanConsole();
103 				}else{
104 					//Muestra los errores
105 					eniValidator.appendConsoleMessage(MessagesHelper.getText("eni.view.error.message"));
106 				}
107 				eniValidator.repaint();
108 			}catch (IOException ioe) {
109 				log.error(ExceptionUtils.stackTraceToString(ioe));
110 				JOptionPane.showMessageDialog(eniValidator, 
111 						MessagesHelper.getText("eni.load.xml.error.message"),
112 						MessagesHelper.getText("eni.load.xml.error.title"),
113 						JOptionPane.ERROR_MESSAGE);
114 			}
115 		}
116 	}
117 }