View Javadoc

1   package es.inteco.eni.swing;
2   
3   import java.awt.event.ActionEvent;
4   import java.awt.event.ActionListener;
5   import java.io.IOException;
6   
7   import javax.swing.JOptionPane;
8   
9   import org.apache.log4j.Logger;
10  
11  import es.inteco.eni.commons.MessagesHelper;
12  import es.inteco.eni.utils.ExceptionUtils;
13  import es.inteco.eni.xml.ENIXmlUtils;
14  import es.inteco.eni.xml.ValidationXmlResult;
15  
16  /**
17   * Listener para gestionar el click en el botón de validar
18   * 
19   * 
20   *
21   */
22  public class ValidateButtonActionListener implements ActionListener{
23  	/**
24  	 * Log
25  	 */
26  	private static Logger log = Logger.getLogger(ValidateButtonActionListener.class);
27  
28  	/**
29  	 * Ventana del validador
30  	 */
31  	private ENIValidator eniValidator;
32  
33  	/**
34  	 * Constructor
35  	 * @param eniValidator
36  	 */
37  	public ValidateButtonActionListener(ENIValidator eniValidator){
38  		this.eniValidator = eniValidator;
39  	}
40  
41  	/**
42  	 * 
43  	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
44  	 */
45  	@Override
46  	public void actionPerformed(ActionEvent e) {
47  		//Seleccionamos la pestaña de la vista XML
48  		eniValidator.getTabbedPane().setSelectedIndex(ENIValidator.XML_VIEW_TAB_INDEX);
49  		//Mensaje "Analizando.." en la consola
50  		String filePath = eniValidator.getFile()!=null ? eniValidator.getFile().getAbsolutePath() : "";
51  		eniValidator.appendConsoleMessage(MessagesHelper.getText("eni.analyze.console.message") + " " + filePath + "...");
52  		new XMLValidationThread(eniValidator).start();
53  	}
54  
55  	/**
56  	 * Añade el mensaje de validación a la consola
57  	 * @param validationXmlResult Resultado de la validación
58  	 * @param eniValidator Ventana
59  	 */
60  	public static void addValidationMessage(ValidationXmlResult validationXmlResult, ENIValidator eniValidator){
61  		String newConsoleMessage = "";
62  		if(validationXmlResult.isValidationError()){
63  			newConsoleMessage = MessagesHelper.getText("eni.nook.validation.console.message") + validationXmlResult.getMessage();
64  		}else{
65  			newConsoleMessage =  MessagesHelper.getText("eni.ok.validation.console.message");
66  		}
67  		addValidationMessage(newConsoleMessage, eniValidator);
68  	}
69  	
70  	/**
71  	 * Añade el mensaje de validación a la consola
72  	 * @param validationXmlResult Resultado de la validación
73  	 * @param eniValidator Ventana
74  	 */
75  	public static void addValidationMessage(String newConsoleMessage, ENIValidator eniValidator){
76  		eniValidator.appendConsoleMessage(newConsoleMessage);
77  		log.info(newConsoleMessage);
78  	}
79  
80  
81  	/**
82  	 * Thread para validar el XML
83  	 * 
84  	 *
85  	 */
86  	private static final class XMLValidationThread extends Thread {
87  
88  		/**
89  		 * Ventana del validador
90  		 */
91  		private ENIValidator eniValidator;
92  
93  		/**
94  		 * Constructor
95  		 * @param eniValidator Ventana del validador
96  		 */
97  		private XMLValidationThread(ENIValidator eniValidator){
98  			this.eniValidator = eniValidator;
99  		}
100 
101 		/**
102 		 * 
103 		 * @see java.lang.Thread#run()
104 		 */
105 		@Override
106 		public void run() {
107 			try{
108 				//XML
109 				String xmlContent = eniValidator.getXmlContentTextarea().getText();
110 				
111 				//Validamos
112 				if(xmlContent==null || "".equals(xmlContent)){
113 					String emptyXml =  MessagesHelper.getText("eni.empty.xml.message");
114 					addValidationMessage(emptyXml, eniValidator);
115 				}else{
116 					String filePath = eniValidator.getFile()!=null && eniValidator.getParentFile()!=null? eniValidator.getParentFile().getAbsolutePath() : "";
117 					ValidationXmlResult validationXmlResult = ENIXmlUtils.validateWithExtXSD(xmlContent, filePath);
118 					//Mostramos los resultados en la consola
119 					addValidationMessage(validationXmlResult, eniValidator);
120 				}
121 				eniValidator.repaint();
122 			}catch (IOException ioe) {
123 				log.error(ExceptionUtils.stackTraceToString(ioe));
124 				JOptionPane.showMessageDialog(eniValidator, 
125 						MessagesHelper.getText("eni.load.xml.error.message"),
126 						MessagesHelper.getText("eni.load.xml.error.title"),
127 						JOptionPane.ERROR_MESSAGE);
128 			}
129 		}
130 	}
131 }