1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
package us.paulevans.basicxslt; |
17 | |
|
18 | |
import java.awt.BorderLayout; |
19 | |
import java.awt.Color; |
20 | |
import java.awt.Component; |
21 | |
import java.awt.Cursor; |
22 | |
import java.awt.FlowLayout; |
23 | |
import java.awt.Font; |
24 | |
import java.awt.GridBagConstraints; |
25 | |
import java.awt.GridBagLayout; |
26 | |
import java.awt.event.ActionEvent; |
27 | |
import java.awt.event.ActionListener; |
28 | |
import java.awt.event.WindowAdapter; |
29 | |
import java.awt.event.WindowEvent; |
30 | |
import java.io.File; |
31 | |
import java.io.IOException; |
32 | |
import java.net.SocketException; |
33 | |
import java.net.UnknownHostException; |
34 | |
import java.text.MessageFormat; |
35 | |
import java.util.ArrayList; |
36 | |
import java.util.Enumeration; |
37 | |
import java.util.List; |
38 | |
|
39 | |
import javax.swing.BorderFactory; |
40 | |
import javax.swing.JButton; |
41 | |
import javax.swing.JCheckBox; |
42 | |
import javax.swing.JCheckBoxMenuItem; |
43 | |
import javax.swing.JComboBox; |
44 | |
import javax.swing.JFileChooser; |
45 | |
import javax.swing.JFrame; |
46 | |
import javax.swing.JLabel; |
47 | |
import javax.swing.JMenu; |
48 | |
import javax.swing.JMenuBar; |
49 | |
import javax.swing.JMenuItem; |
50 | |
import javax.swing.JOptionPane; |
51 | |
import javax.swing.JPanel; |
52 | |
import javax.swing.JScrollPane; |
53 | |
import javax.swing.JSeparator; |
54 | |
import javax.swing.JTextField; |
55 | |
import javax.swing.border.BevelBorder; |
56 | |
import javax.xml.parsers.ParserConfigurationException; |
57 | |
import javax.xml.transform.TransformerException; |
58 | |
|
59 | |
import net.blueslate.commons.gui.GUIUtils; |
60 | |
import net.blueslate.commons.io.IOUtils; |
61 | |
import net.blueslate.commons.xml.TransformOutputProperties; |
62 | |
import net.blueslate.commons.xml.TransformParameters; |
63 | |
import net.blueslate.commons.xml.XMLUtils; |
64 | |
|
65 | |
import org.apache.commons.lang.BooleanUtils; |
66 | |
import org.apache.commons.lang.StringUtils; |
67 | |
import org.apache.commons.lang.exception.ExceptionUtils; |
68 | |
import org.apache.log4j.Logger; |
69 | |
import org.xml.sax.SAXException; |
70 | |
|
71 | |
|
72 | |
|
73 | |
|
74 | |
|
75 | |
|
76 | 0 | public class BasicXSLTFrame extends JFrame implements ActionListener, |
77 | |
Runnable { |
78 | |
|
79 | |
|
80 | |
private static UserPreferences userPrefs; |
81 | |
private static String lastFileChosen; |
82 | |
|
83 | |
|
84 | 0 | private static final LabelStringFactory stringFactory = |
85 | |
LabelStringFactory.getInstance(); |
86 | |
|
87 | |
|
88 | |
private static final int THREADMODE_DO_TRANSFORM = 0; |
89 | |
private static final int THREADMODE_DO_VALIDATE = 1; |
90 | |
private static final int THREADMODE_DO_XML_IDENTITY_TRANSFORM = 2; |
91 | |
|
92 | |
|
93 | |
private static final int XML_VALIDATE_ACTION_INDEX = 2; |
94 | |
private static final int XML_VIEW_EDIT_OUTPUT_PROPS_INDEX = 3; |
95 | |
private static final int XML_CLEAR_OUTPUT_PROPS_INDEX = 4; |
96 | |
private static final int XML_DO_IDENTITY_TRANSFORM_ACTION_INDEX = 5; |
97 | |
|
98 | |
|
99 | |
|
100 | |
private static final String DEFAULT_FRAME_WIDTH = "930"; |
101 | |
private static final String DEFAULT_FRAME_HEIGHT = "415"; |
102 | |
|
103 | |
|
104 | 0 | private static final String XML_ACTIONS[] = { |
105 | |
stringFactory.getString(LabelStringFactory.XML_ACTION_TAKE_ACTION), |
106 | |
AppConstants.SEPARATOR, |
107 | |
stringFactory.getString(LabelStringFactory.XML_ACTION_VALIDATE), |
108 | |
stringFactory.getString( |
109 | |
LabelStringFactory.XML_ACTION_IT_OUTPUT_PROPERITES), |
110 | |
stringFactory.getString( |
111 | |
LabelStringFactory.XML_ACTION_CLEAR_IT_PROPERTIES), |
112 | |
stringFactory.getString(LabelStringFactory.XML_ACTION_PERFORM_IT) |
113 | |
}; |
114 | |
|
115 | |
|
116 | 0 | private static final Logger logger = Logger.getLogger(BasicXSLTFrame.class); |
117 | |
|
118 | |
|
119 | |
private int threadMode; |
120 | |
private String label, identityTransformMessage; |
121 | |
private String identityTransformSourceXmlFile, |
122 | |
identityTransformResultXmlFile; |
123 | |
private JTextField textField; |
124 | |
private boolean suppressSuccessDialog; |
125 | |
private List<Component> components; |
126 | |
private JTextField sourceXmlTf, autosavePathTf; |
127 | |
private List<XSLRow> xslRows; |
128 | |
private JPanel xslPanel; |
129 | |
private GridBagLayout xslPanelLayout; |
130 | |
private GridBagConstraints xslPanelConstraints; |
131 | |
private JLabel transformTimeLabel, currentConfigLabel, |
132 | |
outputAsTextIfXmlLabel, xmlIndicatorLabel; |
133 | |
private JButton exitBtn, transformBtn, addXslBtn, |
134 | |
removeCheckedBtn, validateAutosaveBtn; |
135 | |
private JComboBox xmlAction; |
136 | |
private JButton browseXmlBtn, browseAutosavePathBtn; |
137 | |
private JCheckBoxMenuItem checkSaxWarning, checkSaxError, |
138 | |
checkSaxFatalError; |
139 | |
private JCheckBox autosaveCb, suppressOutputWindowCb, outputAsTextIfXml; |
140 | |
private JMenuItem exit, about, resetForm, transformTimings, |
141 | |
saveConfiguration, saveAsConfiguration, loadConfiguration; |
142 | |
private long lastTotalTransformTime; |
143 | |
private TransformOutputProperties xmlIdentityTransformOutputProps; |
144 | |
private boolean areXmlOutputPropertiesSet; |
145 | |
|
146 | |
|
147 | |
|
148 | |
|
149 | 0 | private BasicXSLTFrame() throws IOException { |
150 | |
|
151 | |
int width, height; |
152 | |
|
153 | 0 | userPrefs = Utils.getUserPrefs(); |
154 | 0 | userPrefs.loadDefaultConfiguration(); |
155 | 0 | lastFileChosen = |
156 | |
userPrefs.getProperty(AppConstants.LAST_FILE_CHOSEN_PROP); |
157 | 0 | components = new ArrayList<Component>(); |
158 | 0 | buildGui(); |
159 | 0 | setTitle(stringFactory.getString( |
160 | |
LabelStringFactory.MAIN_FRAME_TITLE_BAR)); |
161 | 0 | addWindowListener(new WindowAdapter() { |
162 | 0 | public void windowClosing(WindowEvent evt) { |
163 | 0 | destroy(); |
164 | 0 | } |
165 | |
}); |
166 | 0 | width = Integer.parseInt(userPrefs.getProperty( |
167 | |
AppConstants.FRAME_WIDTH_PROP, DEFAULT_FRAME_WIDTH)); |
168 | 0 | height = Integer.parseInt(userPrefs.getProperty( |
169 | |
AppConstants.FRAME_HEIGHT_PROP, DEFAULT_FRAME_HEIGHT)); |
170 | 0 | setSize(width, height); |
171 | 0 | initializeControls(); |
172 | 0 | setToolTips(); |
173 | 0 | setVisible(true); |
174 | 0 | } |
175 | |
|
176 | |
|
177 | |
|
178 | |
|
179 | |
|
180 | |
private void setToolTips() { |
181 | 0 | transformTimings.setToolTipText(stringFactory.getString( |
182 | |
LabelStringFactory.TOOL_TIP_TRANSFORM_TIMINGS)); |
183 | 0 | xmlAction.setToolTipText(stringFactory.getString( |
184 | |
LabelStringFactory.TOOL_TIP_XML_ACTION)); |
185 | 0 | transformBtn.setToolTipText(stringFactory.getString( |
186 | |
LabelStringFactory.TOOL_TIP_TRANSFORM_BTN)); |
187 | 0 | exitBtn.setToolTipText(stringFactory.getString( |
188 | |
LabelStringFactory.TOOL_TIP_EXIT_BTN)); |
189 | 0 | addXslBtn.setToolTipText(stringFactory.getString( |
190 | |
LabelStringFactory.TOOL_TIP_ADD_XSL_BTN)); |
191 | 0 | removeCheckedBtn.setToolTipText(stringFactory.getString( |
192 | |
LabelStringFactory.TOOL_TIP_REMOVE_CHECKED_BTN)); |
193 | 0 | validateAutosaveBtn.setToolTipText(stringFactory.getString( |
194 | |
LabelStringFactory.TOOL_TIP_VALIDATE_AUTOSAVE_BTN)); |
195 | 0 | autosavePathTf.setToolTipText(stringFactory.getString( |
196 | |
LabelStringFactory.TOOL_TIP_AUTOSAVE_TEXTFIELD)); |
197 | 0 | sourceXmlTf.setToolTipText(stringFactory.getString( |
198 | |
LabelStringFactory.TOOL_TIP_SOURCE_XML_TEXTFIELD)); |
199 | 0 | browseAutosavePathBtn.setToolTipText(stringFactory.getString( |
200 | |
LabelStringFactory.TOOL_TIP_BROWSE_AUTOSAVE_PATH_BTN)); |
201 | 0 | browseXmlBtn.setToolTipText(stringFactory.getString( |
202 | |
LabelStringFactory.TOOL_TIP_BROWSE_XML_BTN)); |
203 | 0 | suppressOutputWindowCb.setToolTipText(stringFactory.getString( |
204 | |
LabelStringFactory.TOOL_TIP_SUPPRESS_OUTPUT_WINDOW_CB)); |
205 | 0 | autosaveCb.setToolTipText(stringFactory.getString( |
206 | |
LabelStringFactory.TOOL_TIP_AUTOSAVE_CB)); |
207 | 0 | outputAsTextIfXml.setToolTipText(stringFactory.getString( |
208 | |
LabelStringFactory.TOOL_TIP_OUTPUT_AS_TEXT_IF_XML_CB)); |
209 | 0 | } |
210 | |
|
211 | |
private static void loadParameters(XSLRow aXSLRow) { |
212 | |
|
213 | |
|
214 | |
TransformParameters parameters; |
215 | |
Enumeration propertyNames; |
216 | |
String propName, propValue, prefix; |
217 | |
int index; |
218 | |
|
219 | 0 | parameters = aXSLRow.getTransformParameters(); |
220 | 0 | propertyNames = userPrefs.propertyNames(); |
221 | 0 | prefix = userPrefs.getConfiguration() + ".xsl_" + |
222 | |
aXSLRow.getIndex() + "_params_"; |
223 | 0 | while (propertyNames.hasMoreElements()) { |
224 | 0 | propName = (String)propertyNames.nextElement(); |
225 | 0 | if (propName.startsWith(prefix)) { |
226 | 0 | propValue = userPrefs.getPropertyNoPrefix(propName); |
227 | 0 | index = propName.indexOf('{'); |
228 | 0 | if (index != -1) { |
229 | 0 | propName = propName.substring(index); |
230 | 0 | } else { |
231 | 0 | index = propName.indexOf("_", prefix.length()); |
232 | 0 | propName = propName.substring(index + 1); |
233 | |
} |
234 | 0 | parameters.setParameter( |
235 | |
TransformParameters.getNamespaceURI(propName), |
236 | |
TransformParameters.getParameterName(propName), |
237 | |
propValue); |
238 | 0 | } |
239 | |
} |
240 | 0 | } |
241 | |
|
242 | |
|
243 | |
|
244 | |
|
245 | |
|
246 | |
|
247 | |
|
248 | |
private void loadOutputProperties( |
249 | |
TransformOutputProperties aOutputProperties, |
250 | |
String aPropertyNamePrefix) { |
251 | |
|
252 | 0 | aOutputProperties.setCDATA_SECTION_ELEMENTS( |
253 | |
StringUtils.defaultString(userPrefs.getProperty( |
254 | |
aPropertyNamePrefix + AppConstants.CDATA_SECTION_ELEMENTS))); |
255 | 0 | aOutputProperties.setDOCTYPE_PUBLIC( |
256 | |
StringUtils.defaultString(userPrefs.getProperty( |
257 | |
aPropertyNamePrefix + AppConstants.DOCTYPE_PUBLIC))); |
258 | 0 | aOutputProperties.setDOCTYPE_SYSTEM( |
259 | |
StringUtils.defaultString(userPrefs.getProperty( |
260 | |
aPropertyNamePrefix + AppConstants.DOCTYPE_SYSTEM))); |
261 | 0 | aOutputProperties.setENCODING( |
262 | |
StringUtils.defaultString(userPrefs.getProperty( |
263 | |
aPropertyNamePrefix + AppConstants.ENCODING))); |
264 | 0 | aOutputProperties.setINDENT(BooleanUtils.toBoolean( |
265 | |
userPrefs.getProperty(aPropertyNamePrefix + |
266 | |
AppConstants.INDENT))); |
267 | 0 | aOutputProperties.setMEDIA_TYPE( |
268 | |
StringUtils.defaultString(userPrefs.getProperty( |
269 | |
aPropertyNamePrefix + AppConstants.MEDIA_TYPE))); |
270 | 0 | aOutputProperties.setMETHOD( |
271 | |
StringUtils.defaultString(userPrefs.getProperty( |
272 | |
aPropertyNamePrefix + AppConstants.METHOD))); |
273 | 0 | aOutputProperties.setOMIT_XML_DECLARATION( |
274 | |
BooleanUtils.toBoolean(userPrefs.getProperty( |
275 | |
aPropertyNamePrefix + AppConstants.OMIT_XML_DECLARATION))); |
276 | 0 | aOutputProperties.setSTANDALONE( |
277 | |
BooleanUtils.toBoolean(userPrefs.getProperty( |
278 | |
aPropertyNamePrefix + AppConstants.STANDALONE))); |
279 | 0 | aOutputProperties.setVERSION( |
280 | |
StringUtils.defaultString(userPrefs.getProperty( |
281 | |
aPropertyNamePrefix + AppConstants.VERSION))); |
282 | 0 | } |
283 | |
|
284 | |
|
285 | |
|
286 | |
|
287 | |
|
288 | |
private void initializeControls() { |
289 | |
|
290 | |
String val, xCoord, yCoord, propertyNamePrefix; |
291 | |
boolean areGoodCoordinates; |
292 | |
int loop; |
293 | |
XSLRow xslRow; |
294 | |
|
295 | 0 | loop = 0; |
296 | 0 | val = userPrefs.getProperty(AppConstants.CHK_WARNINGS_PROP); |
297 | 0 | checkSaxWarning.setSelected(val != null ? |
298 | |
Boolean.valueOf(val).booleanValue() : false); |
299 | 0 | val = userPrefs.getProperty(AppConstants.CHK_ERRORS_PROP); |
300 | 0 | checkSaxError.setSelected(val != null ? |
301 | |
Boolean.valueOf(val).booleanValue() : false); |
302 | 0 | val = userPrefs.getProperty(AppConstants.CHK_FATAL_ERRORS_PROP); |
303 | 0 | checkSaxFatalError.setSelected(val != null ? |
304 | |
Boolean.valueOf(val).booleanValue() : false); |
305 | 0 | xCoord = userPrefs.getProperty(AppConstants.X_COORD_PROP); |
306 | 0 | yCoord = userPrefs.getProperty(AppConstants.Y_COORD_PROP); |
307 | 0 | areGoodCoordinates = false; |
308 | 0 | if (xCoord != null && yCoord != null) { |
309 | 0 | this.setLocation(Integer.parseInt(xCoord), Integer.parseInt(yCoord)); |
310 | 0 | areGoodCoordinates = true; |
311 | |
} |
312 | 0 | if (!areGoodCoordinates) { |
313 | 0 | GUIUtils.center(this, null); |
314 | |
} |
315 | 0 | sourceXmlTf.setText(userPrefs.getProperty( |
316 | |
AppConstants.LAST_XML_FILE_PROP)); |
317 | 0 | val = userPrefs.getProperty(AppConstants.SUPPRESS_OUTPUT_WINDOW_PROP); |
318 | 0 | suppressOutputWindowCb.setSelected(BooleanUtils.toBoolean(val)); |
319 | 0 | val = userPrefs.getProperty(AppConstants.OUTPUT_AS_TEXT_IF_XML_PROP); |
320 | 0 | outputAsTextIfXml.setSelected(BooleanUtils.toBoolean(val)); |
321 | 0 | outputAsTextIfXmlLabel.setEnabled(!suppressOutputWindowCb.isSelected()); |
322 | 0 | outputAsTextIfXml.setEnabled(!suppressOutputWindowCb.isSelected()); |
323 | 0 | val = userPrefs.getProperty(AppConstants.AUTOSAVE_RESULT_PROP); |
324 | 0 | autosaveCb.setSelected(BooleanUtils.toBoolean(val)); |
325 | 0 | autosavePathTf.setText(userPrefs.getProperty( |
326 | |
AppConstants.AUTOSAVE_FILE_PROP)); |
327 | 0 | autosavePathTf.setEnabled(autosaveCb.isSelected()); |
328 | 0 | browseAutosavePathBtn.setEnabled(autosaveCb.isSelected()); |
329 | 0 | removeCheckedBtn.setEnabled(false); |
330 | |
|
331 | 0 | xmlIdentityTransformOutputProps = new TransformOutputProperties(); |
332 | |
|
333 | 0 | val = userPrefs.getProperty("xml_identity_transform_opInd"); |
334 | 0 | setAreOutputPropertiesSet(BooleanUtils.toBoolean(val)); |
335 | 0 | loadOutputProperties(xmlIdentityTransformOutputProps, |
336 | |
"xml_identity_transform_outputproperties_"); |
337 | |
|
338 | 0 | refreshXmlIndicatorLabel(); |
339 | |
|
340 | |
do { |
341 | 0 | propertyNamePrefix = "xsl_" + loop + "_outputproperties_"; |
342 | 0 | val = userPrefs.getProperty("xsl_" + loop + "_file"); |
343 | 0 | if (val != null) { |
344 | 0 | xslRow = xslRows.get(loop); |
345 | 0 | loadParameters(xslRow); |
346 | 0 | xslRow.getTextField().setText(val); |
347 | 0 | val = userPrefs.getProperty("xsl_" + loop + "_onoff"); |
348 | 0 | xslRow.setOn(BooleanUtils.toBoolean(val)); |
349 | 0 | val = userPrefs.getProperty("xsl_" + loop + "_opInd"); |
350 | 0 | xslRow.setAreOutputPropertiesSet(BooleanUtils.toBoolean(val)); |
351 | 0 | loadOutputProperties(xslRow.getTransformOutputProperties(), |
352 | |
propertyNamePrefix); |
353 | 0 | loop++; |
354 | |
} |
355 | 0 | } while (val != null); |
356 | 0 | } |
357 | |
|
358 | |
public static void setLastFileChosen(String aLastFileChosen) { |
359 | 0 | lastFileChosen = aLastFileChosen; |
360 | 0 | userPrefs.setProperty(AppConstants.LAST_FILE_CHOSEN_PROP, |
361 | |
lastFileChosen); |
362 | 0 | } |
363 | |
|
364 | |
|
365 | |
|
366 | |
|
367 | |
|
368 | |
private void buildMenuBar() { |
369 | |
|
370 | |
|
371 | |
JMenuBar menuBar; |
372 | |
JMenu help, file, validation, view; |
373 | |
|
374 | |
|
375 | 0 | file = new JMenu(stringFactory.getString(LabelStringFactory.MF_FILE_MENU)); |
376 | 0 | file.setMnemonic(stringFactory.getMnemonic( |
377 | |
LabelStringFactory.MF_FILE_MENU)); |
378 | 0 | resetForm = new JMenuItem(stringFactory.getString( |
379 | |
LabelStringFactory.MF_FILE_RESET_FORM_MI)); |
380 | 0 | resetForm.setMnemonic(stringFactory.getMnemonic( |
381 | |
LabelStringFactory.MF_FILE_RESET_FORM_MI)); |
382 | 0 | resetForm.addActionListener(this); |
383 | 0 | file.add(resetForm); |
384 | 0 | file.add(new JSeparator()); |
385 | 0 | file.add(loadConfiguration = new JMenuItem(stringFactory.getString( |
386 | |
LabelStringFactory.MF_FILE_LOAD_CONFIGURATION_MI))); |
387 | 0 | loadConfiguration.setMnemonic(stringFactory.getMnemonic( |
388 | |
LabelStringFactory.MF_FILE_LOAD_CONFIGURATION_MI)); |
389 | 0 | file.add(saveConfiguration = new JMenuItem(stringFactory.getString( |
390 | |
LabelStringFactory.MF_FILE_SAVE_CONFIGURATION_MI))); |
391 | 0 | saveConfiguration.setMnemonic(stringFactory.getMnemonic( |
392 | |
LabelStringFactory.MF_FILE_SAVE_CONFIGURATION_MI)); |
393 | 0 | file.add(saveAsConfiguration = new JMenuItem(stringFactory.getString( |
394 | |
LabelStringFactory.MF_FILE_SAVE_CONFIGURATION_AS_MI))); |
395 | 0 | saveAsConfiguration.setMnemonic(stringFactory.getMnemonic( |
396 | |
LabelStringFactory.MF_FILE_SAVE_CONFIGURATION_AS_MI)); |
397 | 0 | loadConfiguration.addActionListener(this); |
398 | 0 | saveConfiguration.addActionListener(this); |
399 | 0 | saveAsConfiguration.addActionListener(this); |
400 | 0 | file.add(new JSeparator()); |
401 | 0 | exit = new JMenuItem(stringFactory.getString( |
402 | |
LabelStringFactory.MF_FILE_EXIT_MI)); |
403 | 0 | exit.setMnemonic(stringFactory.getMnemonic( |
404 | |
LabelStringFactory.MF_FILE_EXIT_MI)); |
405 | 0 | exit.addActionListener(this); |
406 | 0 | file.add(exit); |
407 | |
|
408 | |
|
409 | 0 | validation = new JMenu(stringFactory.getString( |
410 | |
LabelStringFactory.MF_VALIDATION_MENU)); |
411 | 0 | validation.setMnemonic(stringFactory.getMnemonic( |
412 | |
LabelStringFactory.MF_VALIDATION_MENU)); |
413 | 0 | validation.add(checkSaxWarning = new JCheckBoxMenuItem( |
414 | |
stringFactory.getString( |
415 | |
LabelStringFactory.MF_VALIDATION_CHECK_SAX_WARNINGS_MI))); |
416 | 0 | checkSaxWarning.setMnemonic(stringFactory.getMnemonic( |
417 | |
LabelStringFactory.MF_VALIDATION_CHECK_SAX_WARNINGS_MI)); |
418 | 0 | validation.add(checkSaxError = new JCheckBoxMenuItem( |
419 | |
stringFactory.getString( |
420 | |
LabelStringFactory.MF_VALIDATION_CHECK_SAX_ERRORS_MI))); |
421 | 0 | checkSaxError.setMnemonic(stringFactory.getMnemonic( |
422 | |
LabelStringFactory.MF_VALIDATION_CHECK_SAX_ERRORS_MI)); |
423 | 0 | validation.add(checkSaxFatalError = new JCheckBoxMenuItem( |
424 | |
stringFactory.getString( |
425 | |
LabelStringFactory.MF_VALIDATION_CHECK_SAX_FATAL_MI))); |
426 | 0 | checkSaxFatalError.setMnemonic(stringFactory.getMnemonic( |
427 | |
LabelStringFactory.MF_VALIDATION_CHECK_SAX_FATAL_MI)); |
428 | |
|
429 | |
|
430 | 0 | view = new JMenu(stringFactory.getString(LabelStringFactory.MF_VIEW_MENU)); |
431 | 0 | view.setMnemonic(stringFactory.getMnemonic( |
432 | |
LabelStringFactory.MF_VIEW_MENU)); |
433 | 0 | view.add(transformTimings = new JMenuItem(stringFactory.getString( |
434 | |
LabelStringFactory.MF_VIEW_LAST_TIMINGS_MI))); |
435 | 0 | transformTimings.setMnemonic(stringFactory.getMnemonic( |
436 | |
LabelStringFactory.MF_VIEW_LAST_TIMINGS_MI)); |
437 | 0 | transformTimings.setEnabled(false); |
438 | 0 | transformTimings.addActionListener(this); |
439 | |
|
440 | |
|
441 | 0 | help = new JMenu(stringFactory.getString(LabelStringFactory.MF_HELP_MENU)); |
442 | 0 | help.setMnemonic(stringFactory.getMnemonic( |
443 | |
LabelStringFactory.MF_HELP_MENU)); |
444 | 0 | about = new JMenuItem(stringFactory.getString( |
445 | |
LabelStringFactory.MF_HELP_ABOUT_MI)); |
446 | 0 | about.setMnemonic(stringFactory.getMnemonic( |
447 | |
LabelStringFactory.MF_HELP_ABOUT_MI)); |
448 | 0 | about.addActionListener(this); |
449 | 0 | help.add(about); |
450 | |
|
451 | |
|
452 | 0 | menuBar = new JMenuBar(); |
453 | 0 | menuBar.add(file); |
454 | 0 | menuBar.add(validation); |
455 | 0 | menuBar.add(view); |
456 | 0 | menuBar.add(help); |
457 | 0 | setJMenuBar(menuBar); |
458 | 0 | } |
459 | |
|
460 | |
|
461 | |
|
462 | |
|
463 | |
|
464 | |
|
465 | |
private void rebuildXSLPanel() { |
466 | |
|
467 | |
int loop, size; |
468 | |
int col, xslPanelRow; |
469 | |
JTextField xslTf; |
470 | |
JButton browseXslBtn, insertBtn; |
471 | |
JComboBox action; |
472 | |
JLabel xslLabel, indicatorLabel; |
473 | |
JCheckBox removeCb; |
474 | |
XSLRow xslRow; |
475 | |
|
476 | 0 | xslPanel.removeAll(); |
477 | 0 | xslPanelRow = 0; |
478 | 0 | GUIUtils.add(xslPanel, new JLabel(""), xslPanelLayout, |
479 | |
xslPanelConstraints, xslPanelRow, col=0, 1, 1, |
480 | |
GridBagConstraints.EAST, GridBagConstraints.BOTH, |
481 | |
GUIUtils.SMALL_INSETS); |
482 | 0 | GUIUtils.add(xslPanel, new JLabel(stringFactory.getString( |
483 | |
LabelStringFactory.MAIN_FRAME_XML_FILE_WITH_COLON)), |
484 | |
xslPanelLayout, xslPanelConstraints, xslPanelRow, ++col, 1, 1, |
485 | |
GridBagConstraints.EAST, GridBagConstraints.BOTH, |
486 | |
GUIUtils.SMALL_INSETS); |
487 | 0 | GUIUtils.add(xslPanel, sourceXmlTf, xslPanelLayout, xslPanelConstraints, |
488 | |
xslPanelRow, ++col, 1, 1, GridBagConstraints.WEST, |
489 | |
GridBagConstraints.BOTH, GUIUtils.SMALL_INSETS); |
490 | 0 | GUIUtils.add(xslPanel, new JLabel(""), xslPanelLayout, |
491 | |
xslPanelConstraints, xslPanelRow, ++col, 1, 1, |
492 | |
GridBagConstraints.WEST, GridBagConstraints.BOTH, |
493 | |
GUIUtils.SMALL_INSETS); |
494 | 0 | GUIUtils.add(xslPanel, browseXmlBtn, |
495 | |
xslPanelLayout, xslPanelConstraints, xslPanelRow, ++col, 1, 1, |
496 | |
GridBagConstraints.EAST, GridBagConstraints.BOTH, |
497 | |
GUIUtils.SMALL_INSETS); |
498 | 0 | GUIUtils.add(xslPanel, xmlAction, |
499 | |
xslPanelLayout, xslPanelConstraints, xslPanelRow, ++col, 1, 1, |
500 | |
GridBagConstraints.EAST, GridBagConstraints.BOTH, |
501 | |
GUIUtils.SMALL_INSETS); |
502 | 0 | GUIUtils.add(xslPanel, xmlIndicatorLabel, xslPanelLayout, |
503 | |
xslPanelConstraints, xslPanelRow++, ++col, 1, 1, |
504 | |
GridBagConstraints.WEST, GridBagConstraints.BOTH, |
505 | |
GUIUtils.SMALL_INSETS); |
506 | 0 | size = xslRows.size(); |
507 | 0 | for (loop = 0; loop < size; loop++) { |
508 | 0 | xslRow = xslRows.get(loop); |
509 | 0 | xslLabel = xslRow.getLabel(); |
510 | 0 | xslTf = xslRow.getTextField(); |
511 | 0 | removeCb = xslRow.getRemoveCb(); |
512 | 0 | browseXslBtn = xslRow.getBrowseBtn(); |
513 | 0 | insertBtn = xslRow.getInsertBtn(); |
514 | 0 | indicatorLabel = xslRow.getIndicatorLabel(); |
515 | 0 | action = xslRow.getAction(); |
516 | 0 | GUIUtils.add(xslPanel, insertBtn, xslPanelLayout, |
517 | |
xslPanelConstraints, xslPanelRow, col=0, 1, 1, |
518 | |
GridBagConstraints.EAST, GridBagConstraints.EAST, |
519 | |
GUIUtils.NO_INSETS); |
520 | 0 | GUIUtils.add(xslPanel, xslLabel, xslPanelLayout, |
521 | |
xslPanelConstraints, xslPanelRow, ++col, 1, 1, |
522 | |
GridBagConstraints.EAST, GridBagConstraints.NONE, |
523 | |
GUIUtils.SMALL_INSETS); |
524 | 0 | GUIUtils.add(xslPanel, xslTf, xslPanelLayout, xslPanelConstraints, |
525 | |
xslPanelRow, ++col, 1, 1, GridBagConstraints.WEST, |
526 | |
GridBagConstraints.BOTH, GUIUtils.SMALL_INSETS); |
527 | 0 | GUIUtils.add(xslPanel, removeCb, |
528 | |
xslPanelLayout, xslPanelConstraints, xslPanelRow, ++col, 1, |
529 | |
1, GridBagConstraints.EAST, GridBagConstraints.BOTH, |
530 | |
GUIUtils.SMALL_INSETS); |
531 | 0 | GUIUtils.add(xslPanel, browseXslBtn, |
532 | |
xslPanelLayout, xslPanelConstraints, xslPanelRow, ++col, 1, |
533 | |
1, GridBagConstraints.EAST, GridBagConstraints.BOTH, |
534 | |
GUIUtils.SMALL_INSETS); |
535 | 0 | GUIUtils.add(xslPanel, action, |
536 | |
xslPanelLayout, xslPanelConstraints, xslPanelRow, ++col, 1, |
537 | |
1, GridBagConstraints.EAST, GridBagConstraints.BOTH, |
538 | |
GUIUtils.SMALL_INSETS); |
539 | 0 | GUIUtils.add(xslPanel, indicatorLabel, xslPanelLayout, |
540 | |
xslPanelConstraints, xslPanelRow++, ++col, 1, 1, |
541 | |
GridBagConstraints.EAST, GridBagConstraints.BOTH, |
542 | |
GUIUtils.SMALL_INSETS); |
543 | |
} |
544 | 0 | } |
545 | |
|
546 | |
|
547 | |
|
548 | |
|
549 | |
|
550 | |
private void refreshStylesheets() { |
551 | |
|
552 | |
int loop; |
553 | |
int numStylesheets; |
554 | |
|
555 | 0 | numStylesheets = Integer.parseInt(userPrefs.getProperty( |
556 | |
AppConstants.NUM_STYLESHEETS_PROP, |
557 | |
AppConstants.DEFAULT_NUM_STYLESHEETS)); |
558 | 0 | xslRows.clear(); |
559 | 0 | for (loop = 0; loop < numStylesheets; loop++) { |
560 | 0 | addXSLRow(); |
561 | |
} |
562 | 0 | rebuildXSLPanel(); |
563 | 0 | } |
564 | |
|
565 | |
|
566 | |
|
567 | |
|
568 | |
|
569 | |
public void setAreOutputPropertiesSet(boolean aAreOutputPropertiesSet) { |
570 | 0 | areXmlOutputPropertiesSet = aAreOutputPropertiesSet; |
571 | 0 | refreshXmlIndicatorLabel(); |
572 | 0 | } |
573 | |
|
574 | |
|
575 | |
|
576 | |
|
577 | |
|
578 | |
private void refreshXmlIndicatorLabel() { |
579 | |
|
580 | |
StringBuffer labelText; |
581 | |
StringBuffer toolTip; |
582 | |
|
583 | 0 | labelText = new StringBuffer(); |
584 | 0 | toolTip = new StringBuffer(); |
585 | 0 | if (areXmlOutputPropertiesSet) { |
586 | 0 | labelText.append(stringFactory.getString( |
587 | |
LabelStringFactory.MAIN_FRAME_XML_INDICATOR_ITOPSPECIFIED)); |
588 | 0 | toolTip.append(stringFactory.getString( |
589 | |
LabelStringFactory. |
590 | |
MAIN_FRAME_XML_INDICATOR_ITOPSPECIFIED_TOOL_TIP)); |
591 | |
} |
592 | 0 | xmlIndicatorLabel.setText(labelText.toString()); |
593 | 0 | xmlIndicatorLabel.setToolTipText(toolTip.toString()); |
594 | 0 | } |
595 | |
|
596 | |
|
597 | |
|
598 | |
|
599 | |
private void buildGui() { |
600 | |
|
601 | |
JPanel centerPanel; |
602 | 0 | buildMenuBar(); |
603 | |
JScrollPane stylesheetsPane; |
604 | |
|
605 | 0 | xslPanelLayout = new GridBagLayout(); |
606 | 0 | xslPanelConstraints = new GridBagConstraints(); |
607 | 0 | centerPanel = new JPanel(); |
608 | 0 | xslPanel = new JPanel(xslPanelLayout); |
609 | 0 | stylesheetsPane = new JScrollPane(xslPanel, |
610 | |
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, |
611 | |
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); |
612 | 0 | sourceXmlTf = new JTextField(AppConstants.TF_LENGTH); |
613 | 0 | browseXmlBtn = new JButton(stringFactory.getString( |
614 | |
LabelStringFactory.MAIN_FRAME_BROWSE_BTN)); |
615 | 0 | xmlAction = new JComboBox(XML_ACTIONS); |
616 | 0 | browseXmlBtn.addActionListener(this); |
617 | 0 | xmlIndicatorLabel = new JLabel(""); |
618 | 0 | xmlIndicatorLabel.setFont(new Font("arial", Font.PLAIN, 10)); |
619 | 0 | xmlAction.addActionListener(this); |
620 | 0 | xslRows = new ArrayList<XSLRow>(); |
621 | 0 | refreshStylesheets(); |
622 | 0 | centerPanel.setLayout(new BorderLayout()); |
623 | 0 | centerPanel.add(stylesheetsPane, BorderLayout.CENTER); |
624 | 0 | centerPanel.add(new JScrollPane(buildAutosavePanel(), |
625 | |
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, |
626 | |
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.SOUTH); |
627 | 0 | browseAutosavePathBtn.addActionListener(this); |
628 | 0 | getContentPane().setLayout(new BorderLayout()); |
629 | 0 | getContentPane().add(buildNorthPanel(), BorderLayout.NORTH); |
630 | 0 | getContentPane().add(centerPanel, BorderLayout.CENTER); |
631 | 0 | getContentPane().add(buildSouthPanel(), BorderLayout.SOUTH); |
632 | 0 | } |
633 | |
|
634 | |
|
635 | |
|
636 | |
|
637 | |
|
638 | |
private JPanel buildNorthPanel() { |
639 | |
|
640 | |
JPanel northPanel; |
641 | |
JLabel title; |
642 | |
|
643 | 0 | northPanel = new JPanel(new FlowLayout()); |
644 | 0 | title = new JLabel(stringFactory.getString( |
645 | |
LabelStringFactory.MAIN_FRAME_TITLE)); |
646 | 0 | title.setFont(new Font("helvetica", Font.BOLD, 18)); |
647 | 0 | northPanel.add(title); |
648 | 0 | return northPanel; |
649 | |
} |
650 | |
|
651 | |
|
652 | |
|
653 | |
|
654 | |
|
655 | |
private JPanel buildAutosavePanel() { |
656 | |
|
657 | |
int row; |
658 | |
JPanel buttons; |
659 | |
JPanel autosavePanel; |
660 | |
|
661 | 0 | row = 0; |
662 | 0 | buttons = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
663 | 0 | buttons.add(addXslBtn = new JButton(stringFactory.getString( |
664 | |
LabelStringFactory.MAIN_FRAME_ADD_XSL_BTN))); |
665 | 0 | buttons.add(removeCheckedBtn = new JButton( |
666 | |
stringFactory.getString( |
667 | |
LabelStringFactory.MAIN_FRAME_REMOVE_CHECKED_BTN))); |
668 | 0 | addXslBtn.addActionListener(this); |
669 | 0 | removeCheckedBtn.addActionListener(this); |
670 | 0 | autosavePanel = new JPanel(xslPanelLayout); |
671 | 0 | GUIUtils.add(autosavePanel, buttons, xslPanelLayout, |
672 | |
xslPanelConstraints, row++, 0, 1, 3, GridBagConstraints.WEST, |
673 | |
GridBagConstraints.NONE, GUIUtils.SMALL_INSETS); |
674 | 0 | GUIUtils.add(autosavePanel, new JLabel(stringFactory.getString( |
675 | |
LabelStringFactory.MAIN_FRAME_AUTOSAVERESULT)), xslPanelLayout, |
676 | |
xslPanelConstraints, row, 0, 1, 1, GridBagConstraints.EAST, |
677 | |
GridBagConstraints.NONE, GUIUtils.SMALL_INSETS); |
678 | 0 | GUIUtils.add(autosavePanel, autosaveCb = new JCheckBox(), |
679 | |
xslPanelLayout, xslPanelConstraints, row, 1, 1, 1, |
680 | |
GridBagConstraints.WEST, GridBagConstraints.NONE, |
681 | |
GUIUtils.SMALL_INSETS); |
682 | 0 | autosaveCb.addActionListener(this); |
683 | 0 | GUIUtils.add(autosavePanel, autosavePathTf = new JTextField( |
684 | |
AppConstants.TF_LENGTH-4), xslPanelLayout, xslPanelConstraints, |
685 | |
row, 2, 1, 1, GridBagConstraints.EAST, GridBagConstraints.NONE, |
686 | |
GUIUtils.SMALL_INSETS); |
687 | 0 | GUIUtils.add(autosavePanel, browseAutosavePathBtn = new JButton( |
688 | |
stringFactory.getString( |
689 | |
LabelStringFactory.MAIN_FRAME_BROWSE_BTN)), |
690 | |
xslPanelLayout, xslPanelConstraints, row, 3, 1, 1, |
691 | |
GridBagConstraints.EAST, GridBagConstraints.NONE, |
692 | |
GUIUtils.SMALL_INSETS); |
693 | 0 | GUIUtils.add(autosavePanel, validateAutosaveBtn = new JButton( |
694 | |
stringFactory.getString( |
695 | |
LabelStringFactory.MAIN_FRAME_VALIDATE_BTN)), |
696 | |
xslPanelLayout, xslPanelConstraints, row++, 4, 1, 1, |
697 | |
GridBagConstraints.EAST, GridBagConstraints.NONE, |
698 | |
GUIUtils.SMALL_INSETS); |
699 | 0 | validateAutosaveBtn.addActionListener(this); |
700 | 0 | GUIUtils.add(autosavePanel, new JLabel(stringFactory.getString( |
701 | |
LabelStringFactory.MAIN_FRAME_SUPRESS_OUTPUT_WINDOW)), |
702 | |
xslPanelLayout, xslPanelConstraints, row, 0, 1, 1, |
703 | |
GridBagConstraints.EAST, GridBagConstraints.NONE, |
704 | |
GUIUtils.SMALL_INSETS); |
705 | 0 | GUIUtils.add(autosavePanel, suppressOutputWindowCb = new JCheckBox(), |
706 | |
xslPanelLayout, xslPanelConstraints, row++, 1, 1, 1, |
707 | |
GridBagConstraints.WEST, GridBagConstraints.NONE, |
708 | |
GUIUtils.SMALL_INSETS); |
709 | 0 | GUIUtils.add(autosavePanel, outputAsTextIfXmlLabel = new JLabel( |
710 | |
stringFactory.getString( |
711 | |
LabelStringFactory. |
712 | |
MAIN_FRAME_DISPLAY_OUTPUT_AS_TEXT_IF_XML)), |
713 | |
xslPanelLayout, xslPanelConstraints, row, 0, 1, 1, |
714 | |
GridBagConstraints.EAST, GridBagConstraints.NONE, |
715 | |
GUIUtils.SMALL_INSETS); |
716 | 0 | GUIUtils.add(autosavePanel, outputAsTextIfXml = new JCheckBox(), |
717 | |
xslPanelLayout, xslPanelConstraints, row++, 1, 1, 1, |
718 | |
GridBagConstraints.WEST, GridBagConstraints.NONE, |
719 | |
GUIUtils.SMALL_INSETS); |
720 | 0 | suppressOutputWindowCb.addActionListener(this); |
721 | 0 | return autosavePanel; |
722 | |
} |
723 | |
|
724 | |
|
725 | |
|
726 | |
|
727 | |
|
728 | |
private JPanel buildSouthPanel() { |
729 | |
|
730 | |
JPanel transformBtnPanel; |
731 | |
JPanel footerPanel; |
732 | |
JPanel southPanel; |
733 | |
JPanel panel; |
734 | |
JLabel label; |
735 | |
Font footerPanelFont; |
736 | |
Font footerPanelFontBold; |
737 | |
|
738 | 0 | transformBtnPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); |
739 | 0 | transformBtnPanel.add(transformBtn = new JButton( |
740 | |
stringFactory.getString( |
741 | |
LabelStringFactory.MAIN_FRAME_TRANSFORM_BTN))); |
742 | 0 | transformBtnPanel.add(exitBtn = new JButton(stringFactory.getString( |
743 | |
LabelStringFactory.MAIN_FRAME_EXIT_BTN))); |
744 | |
|
745 | 0 | footerPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
746 | 0 | southPanel = new JPanel(new BorderLayout()); |
747 | 0 | southPanel.add(transformBtnPanel, BorderLayout.CENTER); |
748 | 0 | southPanel.add(footerPanel, BorderLayout.SOUTH); |
749 | 0 | footerPanelFont = new Font("arial", Font.PLAIN, 12); |
750 | 0 | footerPanelFontBold = new Font("arial", Font.BOLD, 12); |
751 | 0 | footerPanel.setBorder(BorderFactory.createBevelBorder( |
752 | |
BevelBorder.LOWERED)); |
753 | |
|
754 | 0 | panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
755 | 0 | panel.add(label = new JLabel(stringFactory.getString( |
756 | |
LabelStringFactory.MAIN_FRAME_CURRENT_CONFIGURATION))); |
757 | 0 | label.setFont(footerPanelFontBold); |
758 | 0 | label.setForeground(Color.BLUE); |
759 | 0 | panel.add(currentConfigLabel = new JLabel( |
760 | |
userPrefs.getConfiguration())); |
761 | 0 | currentConfigLabel.setFont(footerPanelFont); |
762 | 0 | footerPanel.add(panel); |
763 | |
|
764 | 0 | panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
765 | 0 | panel.add(label = new JLabel(stringFactory.getString( |
766 | |
LabelStringFactory.MAIN_FRAME_TOTAL_TRANSFORM_TIME))); |
767 | 0 | label.setFont(footerPanelFontBold); |
768 | 0 | label.setForeground(Color.BLUE); |
769 | 0 | panel.add(transformTimeLabel = new JLabel(lastTotalTransformTime + " " + |
770 | |
stringFactory.getString(LabelStringFactory. |
771 | |
MAIN_FRAME_MILLISECONDS_ABBREVIATION))); |
772 | 0 | transformTimeLabel.setFont(footerPanelFont); |
773 | 0 | footerPanel.add(panel); |
774 | |
|
775 | 0 | transformTimeLabel.setFont(footerPanelFont); |
776 | 0 | footerPanel.add(new JLabel("")); |
777 | 0 | footerPanel.add(new JLabel("")); |
778 | 0 | transformBtn.addActionListener(this); |
779 | 0 | exitBtn.addActionListener(this); |
780 | 0 | return southPanel; |
781 | |
} |
782 | |
|
783 | |
|
784 | |
|
785 | |
|
786 | |
|
787 | |
private void about() { |
788 | |
|
789 | |
StringBuffer aboutMsg; |
790 | |
|
791 | 0 | aboutMsg = new StringBuffer(); |
792 | 0 | aboutMsg.append(stringFactory.getString( |
793 | |
LabelStringFactory.TOOL_ABOUTDIALOG_TOOLTITLE) + "\n\n"); |
794 | 0 | aboutMsg.append(stringFactory.getString( |
795 | |
LabelStringFactory.TOOL_ABOUTDIALOG_VERSION)).append( |
796 | |
AppConstants.APP_VERSION).append("\n\n"); |
797 | 0 | aboutMsg.append(stringFactory.getString( |
798 | |
LabelStringFactory.TOOL_DESCRIPTION)).append("\n\n"); |
799 | 0 | aboutMsg.append(stringFactory.getString( |
800 | |
LabelStringFactory.TOOL_DEVELOPED_BY) + "\n\n"); |
801 | 0 | aboutMsg.append(stringFactory.getString( |
802 | |
LabelStringFactory.TOOL_LICENSE)); |
803 | 0 | Utils.showDialog(this, aboutMsg.toString(), stringFactory.getString( |
804 | |
LabelStringFactory.TOOL_ABOUTDIALOG_TITLE), |
805 | |
JOptionPane.INFORMATION_MESSAGE); |
806 | 0 | } |
807 | |
|
808 | |
|
809 | |
|
810 | |
|
811 | |
|
812 | |
|
813 | |
private static boolean isEmpty(JTextField aTextField) { |
814 | 0 | return StringUtils.isBlank(aTextField.getText()); |
815 | |
} |
816 | |
|
817 | |
|
818 | |
|
819 | |
|
820 | |
|
821 | |
|
822 | |
|
823 | |
private static boolean isValidFile(JTextField aFileTextField) { |
824 | |
|
825 | |
File physFile; |
826 | |
|
827 | 0 | physFile = new File(aFileTextField.getText()); |
828 | 0 | return physFile.exists(); |
829 | |
} |
830 | |
|
831 | |
|
832 | |
|
833 | |
|
834 | |
|
835 | |
|
836 | |
|
837 | |
|
838 | |
private boolean validateXml(String aLabel, JTextField aTextField, |
839 | |
boolean aSuppressSuccessDialog) { |
840 | |
|
841 | |
boolean isValid; |
842 | |
|
843 | 0 | isValid = false; |
844 | 0 | if (isEmpty(aTextField)) { |
845 | 0 | Utils.showDialog(this, stringFactory.getString( |
846 | |
LabelStringFactory.MAIN_FRAME_XML_FILE_NOT_SPECIFIED), |
847 | |
stringFactory.getString( |
848 | |
LabelStringFactory.MAIN_FRAME_ERROR_LBL), |
849 | |
JOptionPane.ERROR_MESSAGE); |
850 | 0 | } else if (!isValidFile(aTextField)) { |
851 | 0 | Utils.showDialog(this, stringFactory.getString( |
852 | |
LabelStringFactory. |
853 | |
MAIN_FRAME_XML_FILE_NOT_EXIST_SPECIFY_VALID_FILE), |
854 | |
stringFactory.getString( |
855 | |
LabelStringFactory.MAIN_FRAME_ERROR_LBL), |
856 | |
JOptionPane.ERROR_MESSAGE); |
857 | 0 | } else { |
858 | 0 | isValid = validateXml(aLabel, aTextField.getText(), |
859 | |
checkSaxWarning.isSelected(), checkSaxError.isSelected(), |
860 | |
checkSaxFatalError.isSelected(), this, |
861 | |
aSuppressSuccessDialog); |
862 | |
} |
863 | 0 | return isValid; |
864 | |
} |
865 | |
|
866 | |
|
867 | |
|
868 | |
|
869 | |
|
870 | |
private boolean validateAll() { |
871 | |
|
872 | |
boolean isValid; |
873 | |
int loop, size; |
874 | |
String autosavePath; |
875 | |
XSLRow xslRow; |
876 | |
JTextField textField; |
877 | |
File file; |
878 | |
|
879 | 0 | isValid = true; |
880 | 0 | if (autosaveCb.isSelected()) { |
881 | 0 | autosavePath = autosavePathTf.getText(); |
882 | 0 | if (StringUtils.isNotBlank(autosavePath)) { |
883 | 0 | file = new File(autosavePathTf.getText()); |
884 | 0 | if ((file.getParentFile() == null) || |
885 | |
(!(isValid = file.getParentFile().exists()))) { |
886 | 0 | isValid = false; |
887 | 0 | Utils.showDialog(this, MessageFormat.format( |
888 | |
stringFactory.getString(LabelStringFactory. |
889 | |
MAIN_FRAME_AUTOSAVE_PATH_DOES_NOT_EXIST), |
890 | |
file.getAbsolutePath()), stringFactory.getString( |
891 | |
LabelStringFactory. |
892 | |
MAIN_FRAME_INVALID_AUTOSAVE_PATH), |
893 | |
JOptionPane.ERROR_MESSAGE); |
894 | 0 | } |
895 | |
} else { |
896 | 0 | isValid = false; |
897 | 0 | Utils.showDialog(this, stringFactory.getString( |
898 | |
LabelStringFactory. |
899 | |
MAIN_FRAME_PLEASE_SPECIFY_AUTOSAVE_PATH), |
900 | |
stringFactory.getString(LabelStringFactory. |
901 | |
MAIN_FRAME_INVALID_AUTOSAVE_PATH) , |
902 | |
JOptionPane.ERROR_MESSAGE); |
903 | |
} |
904 | |
} |
905 | 0 | if (isValid) { |
906 | 0 | if (isValid = validateXml(stringFactory.getString( |
907 | |
LabelStringFactory.MAIN_FRAME_XML_FILE), sourceXmlTf, |
908 | |
true)) { |
909 | 0 | size = xslRows.size(); |
910 | 0 | for (loop = 0; (loop < size) && isValid; loop++) { |
911 | 0 | xslRow = xslRows.get(loop); |
912 | 0 | textField = xslRow.getTextField(); |
913 | 0 | if (xslRow.isOnAndNotEmpty()) { |
914 | 0 | isValid = validateXml(xslRow.getDescription(), |
915 | |
textField, true); |
916 | |
} |
917 | |
} |
918 | |
} |
919 | |
} |
920 | 0 | return isValid; |
921 | |
} |
922 | |
|
923 | |
|
924 | |
|
925 | |
|
926 | |
|
927 | |
|
928 | |
private boolean areAnyStylesheets() { |
929 | |
|
930 | |
boolean areAnyStylesheets; |
931 | |
XSLRow xslRow; |
932 | |
int loop, size; |
933 | |
|
934 | 0 | areAnyStylesheets = false; |
935 | 0 | size = xslRows.size(); |
936 | 0 | for (loop = 0; loop < size; loop++) { |
937 | 0 | xslRow = xslRows.get(loop); |
938 | 0 | if (xslRow.isOnAndNotEmpty()) { |
939 | 0 | areAnyStylesheets = true; |
940 | 0 | break; |
941 | |
} |
942 | |
} |
943 | 0 | return areAnyStylesheets; |
944 | |
} |
945 | |
|
946 | |
|
947 | |
|
948 | |
|
949 | |
|
950 | |
private void refreshXSLPanel() { |
951 | 0 | rebuildXSLPanel(); |
952 | 0 | xslPanel.repaint(); |
953 | 0 | xslPanel.revalidate(); |
954 | 0 | } |
955 | |
|
956 | |
|
957 | |
|
958 | |
|
959 | |
|
960 | |
private void resetForm() { |
961 | 0 | XSLRow.removeAll(xslRows); |
962 | 0 | addXSLRow(); |
963 | 0 | addXSLRow(); |
964 | 0 | addXSLRow(); |
965 | 0 | refreshXSLPanel(); |
966 | 0 | sourceXmlTf.setText(""); |
967 | 0 | xmlIdentityTransformOutputProps.clear(); |
968 | 0 | setAreOutputPropertiesSet(false); |
969 | 0 | autosaveCb.setSelected(false); |
970 | 0 | autosavePathTf.setText(""); |
971 | 0 | autosavePathTf.setEnabled(false); |
972 | 0 | browseAutosavePathBtn.setEnabled(false); |
973 | 0 | checkSaxError.setSelected(false); |
974 | 0 | checkSaxWarning.setSelected(false); |
975 | 0 | checkSaxFatalError.setSelected(false); |
976 | 0 | removeCheckedBtn.setEnabled(false); |
977 | 0 | suppressOutputWindowCb.setSelected(false); |
978 | 0 | outputAsTextIfXml.setSelected(false); |
979 | 0 | outputAsTextIfXml.setEnabled(true); |
980 | 0 | outputAsTextIfXmlLabel.setEnabled(true); |
981 | 0 | } |
982 | |
|
983 | |
|
984 | |
|
985 | |
|
986 | |
|
987 | |
public void actionPerformed(ActionEvent evt) { |
988 | |
|
989 | |
String actionCommand, action, allConfigurations[]; |
990 | |
Object eventSource; |
991 | |
XSLRow xslRow; |
992 | |
|
993 | 0 | eventSource = evt.getSource(); |
994 | 0 | setCursor(new Cursor(Cursor.WAIT_CURSOR)); |
995 | |
try { |
996 | 0 | if (eventSource == transformBtn) { |
997 | 0 | if (areAnyStylesheets()) { |
998 | 0 | doTransform(); |
999 | 0 | } else { |
1000 | 0 | Utils.showDialog(this, |
1001 | |
stringFactory.getString(LabelStringFactory. |
1002 | |
MAIN_FRAME_SPECIFICY_AT_LEAST_ONE_STYLESHEET), |
1003 | |
stringFactory.getString(LabelStringFactory. |
1004 | |
MAIN_FRAME_TRANSFORM_MESSAGE), |
1005 | |
JOptionPane.ERROR_MESSAGE); |
1006 | |
} |
1007 | 0 | } else if (eventSource == about) { |
1008 | 0 | about(); |
1009 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1010 | 0 | } else if (eventSource == exit) { |
1011 | 0 | destroy(); |
1012 | 0 | } else if (eventSource == transformTimings) { |
1013 | 0 | new TimingsFrame(this, Utils.toArray(xslRows)); |
1014 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1015 | 0 | } else if (eventSource == validateAutosaveBtn) { |
1016 | 0 | doValidateXml(stringFactory.getString( |
1017 | |
LabelStringFactory.MAIN_FRAME_XML_FILE), autosavePathTf, |
1018 | |
false); |
1019 | 0 | } else if (eventSource == exitBtn) { |
1020 | 0 | destroy(); |
1021 | 0 | } else if (eventSource == resetForm) { |
1022 | 0 | resetForm(); |
1023 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1024 | 0 | } else if (eventSource == browseAutosavePathBtn) { |
1025 | 0 | populateTFFromFileDialog(autosavePathTf); |
1026 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1027 | 0 | } else if (eventSource == browseXmlBtn) { |
1028 | 0 | populateTFFromFileDialog(sourceXmlTf); |
1029 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1030 | 0 | } else if (eventSource == autosaveCb) { |
1031 | 0 | autosavePathTf.setEnabled(autosaveCb.isSelected()); |
1032 | 0 | browseAutosavePathBtn.setEnabled(autosaveCb.isSelected()); |
1033 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1034 | 0 | } else if (eventSource == suppressOutputWindowCb) { |
1035 | 0 | outputAsTextIfXmlLabel.setEnabled( |
1036 | |
!suppressOutputWindowCb.isSelected()); |
1037 | 0 | outputAsTextIfXml.setEnabled( |
1038 | |
!suppressOutputWindowCb.isSelected()); |
1039 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1040 | 0 | } else if (eventSource == removeCheckedBtn) { |
1041 | 0 | transformTimings.setEnabled(false); |
1042 | 0 | XSLRow.removeChecked(xslRows); |
1043 | 0 | if (xslRows.size() == 0) { |
1044 | 0 | addXSLRow(); |
1045 | 0 | refreshXSLPanel(); |
1046 | |
} |
1047 | 0 | enableRemoveCheckedBtn(); |
1048 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1049 | 0 | } else if (eventSource == addXslBtn) { |
1050 | 0 | transformTimings.setEnabled(false); |
1051 | 0 | addXSLRow(); |
1052 | 0 | refreshXSLPanel(); |
1053 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1054 | 0 | } else if (eventSource == saveConfiguration) { |
1055 | 0 | persistUserPrefs(); |
1056 | 0 | userPrefs.persistUserPrefs(); |
1057 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1058 | 0 | } else if (eventSource == saveAsConfiguration) { |
1059 | 0 | new SaveAsConfigurationFrame(this, |
1060 | |
userPrefs.getConfiguration()); |
1061 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1062 | 0 | } else if (eventSource == loadConfiguration) { |
1063 | 0 | allConfigurations = userPrefs.getAllConfigurations(); |
1064 | 0 | if (allConfigurations.length > 0) { |
1065 | 0 | new LoadConfigurationFrame(this, |
1066 | |
userPrefs.getConfiguration(), allConfigurations); |
1067 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1068 | 0 | } else { |
1069 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1070 | 0 | Utils.showDialog(this, MessageFormat.format( |
1071 | |
stringFactory.getString(LabelStringFactory. |
1072 | |
MAIN_FRAME_ONLY_CONFIGURATION), |
1073 | |
userPrefs.getConfiguration(), |
1074 | |
saveAsConfiguration.getText()), |
1075 | |
stringFactory.getString(LabelStringFactory. |
1076 | |
MAIN_FRAME_MESSAGE), |
1077 | |
JOptionPane.INFORMATION_MESSAGE); |
1078 | |
} |
1079 | 0 | } else if (eventSource == xmlAction) { |
1080 | 0 | if (xmlAction.getItemCount() > 0) { |
1081 | 0 | action = (String)xmlAction.getSelectedItem(); |
1082 | 0 | xmlAction.setSelectedIndex(0); |
1083 | 0 | if (action.equals(XML_ACTIONS[XML_VALIDATE_ACTION_INDEX])) { |
1084 | 0 | components.clear(); |
1085 | 0 | components.add(sourceXmlTf); |
1086 | 0 | components.add(xmlAction); |
1087 | 0 | components.add(browseXmlBtn); |
1088 | 0 | doValidateXml(stringFactory.getString( |
1089 | |
LabelStringFactory.MAIN_FRAME_XML_FILE), |
1090 | |
sourceXmlTf, false); |
1091 | 0 | } else if (action.equals( |
1092 | |
XML_ACTIONS[XML_VIEW_EDIT_OUTPUT_PROPS_INDEX])) { |
1093 | 0 | new TransformOutputPropertiesFrame(this, |
1094 | |
xmlIdentityTransformOutputProps, |
1095 | |
sourceXmlTf.getText()); |
1096 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1097 | 0 | } else if (action.equals( |
1098 | |
XML_ACTIONS[XML_CLEAR_OUTPUT_PROPS_INDEX])) { |
1099 | 0 | xmlIdentityTransformOutputProps.clear(); |
1100 | 0 | setAreOutputPropertiesSet(false); |
1101 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1102 | 0 | } else if (action.equals( |
1103 | |
XML_ACTIONS[XML_DO_IDENTITY_TRANSFORM_ACTION_INDEX])) { |
1104 | |
|
1105 | 0 | if (validateXml(stringFactory.getString( |
1106 | |
LabelStringFactory.MAIN_FRAME_XML_FILE), |
1107 | |
sourceXmlTf, true)) { |
1108 | 0 | components.clear(); |
1109 | 0 | components.add(sourceXmlTf); |
1110 | 0 | components.add(browseXmlBtn); |
1111 | 0 | components.add(xmlAction); |
1112 | 0 | doIdentityTransform( |
1113 | |
stringFactory.getString( |
1114 | |
LabelStringFactory. |
1115 | |
MAIN_FRAME_SELECT_FILE_FOR_IT_RESULT), |
1116 | |
sourceXmlTf.getText(), |
1117 | |
sourceXmlTf.getText()); |
1118 | 0 | } else { |
1119 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1120 | |
} |
1121 | 0 | } else { |
1122 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1123 | |
} |
1124 | 0 | } |
1125 | |
} else { |
1126 | 0 | actionCommand = evt.getActionCommand(); |
1127 | 0 | if (AppConstants.INSERT.equals(actionCommand)) { |
1128 | 0 | xslRow = XSLRow.getRowByInsertBtn(xslRows, |
1129 | |
(JButton)eventSource); |
1130 | 0 | insertXSLRow(xslRow.getIndex()); |
1131 | 0 | refreshXSLPanel(); |
1132 | 0 | } else if (AppConstants.REMOVE_CB.equals(actionCommand)) { |
1133 | 0 | enableRemoveCheckedBtn(); |
1134 | 0 | } else if (stringFactory.getString( |
1135 | |
LabelStringFactory.MAIN_FRAME_BROWSE_BTN).equals( |
1136 | |
actionCommand)) { |
1137 | 0 | xslRow = XSLRow.getRowByBrowseBtn(xslRows, |
1138 | |
(JButton)eventSource); |
1139 | 0 | populateTFFromFileDialog(xslRow.getTextField()); |
1140 | 0 | } else if (AppConstants.TAKE_ACTION.equals(actionCommand)) { |
1141 | 0 | xslRow = XSLRow.getRowByAction(xslRows, |
1142 | |
(JComboBox)eventSource); |
1143 | 0 | if (xslRow.getAction().getItemCount() > 0) { |
1144 | 0 | action = (String)xslRow.getAction().getSelectedItem(); |
1145 | 0 | xslRow.setSelectedActionIndex(0); |
1146 | 0 | if (action.equals( |
1147 | |
XSLRow.ACTIONS[XSLRow.VALIDATE_INDEX])) { |
1148 | 0 | components.clear(); |
1149 | 0 | components.add(xslRow.getTextField()); |
1150 | 0 | components.add(xslRow.getAction()); |
1151 | 0 | components.add(xslRow.getRemoveCb()); |
1152 | 0 | components.add(xslRow.getInsertBtn()); |
1153 | 0 | components.add(xslRow.getBrowseBtn()); |
1154 | 0 | doValidateXml(stringFactory.getString( |
1155 | |
LabelStringFactory.MAIN_FRAME_XSL_PREFIX) + |
1156 | |
(xslRow.getIndex() + 1), |
1157 | |
xslRow.getTextField(), false); |
1158 | 0 | } else if ( |
1159 | |
action.startsWith(XSLRow.ON_OFF_ITEM_PREFIX)) { |
1160 | 0 | xslRow.toggleOnOffBtn(); |
1161 | 0 | } else if (action.equals( |
1162 | |
XSLRow.ACTIONS[XSLRow.VIEW_EDIT_OUTPUT_PROPS_INDEX])) { |
1163 | 0 | new TransformOutputPropertiesFrame(this, xslRow); |
1164 | 0 | } else if (action.equals( |
1165 | |
XSLRow.ACTIONS[XSLRow.CLEAR_OUTPUT_PROPS_INDEX])) { |
1166 | 0 | xslRow.setAreOutputPropertiesSet(false); |
1167 | 0 | xslRow.clearOutputProperties(); |
1168 | 0 | } else if (action.equals( |
1169 | |
XSLRow.ACTIONS[XSLRow. |
1170 | |
CLEAR_ALL_PARAMETERS_INDEX])) { |
1171 | 0 | xslRow.clearAllParameters(); |
1172 | 0 | } else if (action.equals(XSLRow.ACTIONS[XSLRow. |
1173 | |
VIEW_EDIT_PARAMETERS_INDEX])) { |
1174 | 0 | new TransformParametersFrame(this, xslRow); |
1175 | 0 | } else if (action.equals(XSLRow.ACTIONS[XSLRow. |
1176 | |
PERFORM_IDENTITY_TRANSFORM_INDEX])) { |
1177 | 0 | if (validateXml(stringFactory.getString( |
1178 | |
LabelStringFactory.MAIN_FRAME_XSL_PREFIX) + |
1179 | |
(xslRow.getIndex()+1), |
1180 | |
xslRow.getTextField(), true)) { |
1181 | 0 | components.clear(); |
1182 | 0 | components.add(xslRow.getBrowseBtn()); |
1183 | 0 | components.add(xslRow.getRemoveCb()); |
1184 | 0 | components.add(xslRow.getInsertBtn()); |
1185 | 0 | components.add(xslRow.getTextField()); |
1186 | 0 | doIdentityTransform( |
1187 | |
stringFactory.getString( |
1188 | |
LabelStringFactory. |
1189 | |
MAIN_FRAME_PICK_FILE_FOR_IT), |
1190 | |
xslRow.getTextField().getText(), |
1191 | |
xslRow.getTextField().getText()); |
1192 | 0 | } else { |
1193 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1194 | |
} |
1195 | |
} |
1196 | |
} |
1197 | |
} |
1198 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1199 | |
} |
1200 | 0 | } catch (Throwable aAny) { |
1201 | |
|
1202 | 0 | logger.error(ExceptionUtils.getFullStackTrace(aAny)); |
1203 | 0 | Utils.showErrorDialog(this, aAny); |
1204 | 0 | } |
1205 | 0 | } |
1206 | |
|
1207 | |
|
1208 | |
|
1209 | |
|
1210 | |
|
1211 | |
public void refreshConfigurationLabel() { |
1212 | 0 | currentConfigLabel.setText(userPrefs.getConfiguration()); |
1213 | 0 | } |
1214 | |
|
1215 | |
|
1216 | |
|
1217 | |
|
1218 | |
|
1219 | |
public void refreshApplication() { |
1220 | 0 | refreshStylesheets(); |
1221 | 0 | refreshConfigurationLabel(); |
1222 | 0 | initializeControls(); |
1223 | 0 | } |
1224 | |
|
1225 | |
|
1226 | |
|
1227 | |
|
1228 | |
|
1229 | |
|
1230 | |
public void populateTFFromFileDialog(JTextField aTextField) |
1231 | |
throws IOException { |
1232 | |
|
1233 | |
int returnVal; |
1234 | |
File file; |
1235 | |
|
1236 | 0 | Utils.getInstance().getFileChooser().setDialogType( |
1237 | |
JFileChooser.OPEN_DIALOG); |
1238 | 0 | returnVal = Utils.getInstance().getFileChooser().showOpenDialog(this); |
1239 | 0 | if (returnVal == JFileChooser.APPROVE_OPTION) { |
1240 | 0 | file = Utils.getInstance().getFileChooser().getSelectedFile(); |
1241 | 0 | setLastFileChosen(file.getAbsolutePath()); |
1242 | 0 | aTextField.setText(file.getAbsolutePath()); |
1243 | |
} |
1244 | 0 | } |
1245 | |
|
1246 | |
|
1247 | |
|
1248 | |
|
1249 | |
|
1250 | |
private void insertXSLRow(int aIndex) { |
1251 | |
|
1252 | |
int size, loop; |
1253 | |
|
1254 | 0 | xslRows.add(aIndex, new XSLRow(this, xslPanel, |
1255 | |
new JButton(AppConstants.INSERT), |
1256 | |
|
1257 | |
new JLabel(""), |
1258 | |
new JTextField(AppConstants.TF_LENGTH), |
1259 | |
new JCheckBox(), new JButton(stringFactory.getString( |
1260 | |
LabelStringFactory.MAIN_FRAME_BROWSE_BTN)), |
1261 | |
new JComboBox(), new JLabel(), -1)); |
1262 | 0 | size = xslRows.size(); |
1263 | 0 | for (loop = 0; loop < size; loop++) { |
1264 | 0 | ((XSLRow)(xslRows.get(loop))).setIndex(loop); |
1265 | |
} |
1266 | 0 | } |
1267 | |
|
1268 | |
|
1269 | |
|
1270 | |
|
1271 | |
|
1272 | |
private void addXSLRow() { |
1273 | |
|
1274 | |
int size; |
1275 | |
|
1276 | 0 | size = xslRows.size(); |
1277 | 0 | xslRows.add(new XSLRow(this, xslPanel, new JButton(AppConstants.INSERT), |
1278 | |
new JLabel(MessageFormat.format(stringFactory.getString( |
1279 | |
LabelStringFactory.XSLROW_XSL_LABEL), |
1280 | |
xslRows.size()+1)), |
1281 | |
new JTextField(AppConstants.TF_LENGTH), |
1282 | |
new JCheckBox(), new JButton(stringFactory.getString( |
1283 | |
LabelStringFactory.MAIN_FRAME_BROWSE_BTN)), |
1284 | |
new JComboBox(), new JLabel(), size)); |
1285 | 0 | } |
1286 | |
|
1287 | |
|
1288 | |
|
1289 | |
|
1290 | |
|
1291 | |
|
1292 | |
private void enableRemoveCheckedBtn() { |
1293 | |
|
1294 | |
boolean enable; |
1295 | |
int size, loop; |
1296 | |
|
1297 | 0 | enable = false; |
1298 | 0 | size = xslRows.size(); |
1299 | 0 | for (loop = 0; loop < size; loop++) { |
1300 | 0 | if (((XSLRow)(xslRows.get(loop))).getRemoveCb().isSelected()) { |
1301 | 0 | enable = true; |
1302 | 0 | break; |
1303 | |
} |
1304 | |
} |
1305 | 0 | removeCheckedBtn.setEnabled(enable); |
1306 | 0 | } |
1307 | |
|
1308 | |
|
1309 | |
|
1310 | |
|
1311 | |
private boolean validateXml(String aLabel, String sourceXmlFile, |
1312 | |
boolean checkWarnings, boolean checkErrors, |
1313 | |
boolean checkFatalErrors, JFrame parent, |
1314 | |
boolean aSuppressSuccessDialog) { |
1315 | |
|
1316 | |
boolean isValid; |
1317 | |
|
1318 | 0 | isValid = false; |
1319 | |
try { |
1320 | 0 | Utils.getInstance().isValidXml(new File(sourceXmlFile), |
1321 | |
checkWarnings, checkErrors, checkFatalErrors); |
1322 | 0 | isValid = true; |
1323 | 0 | if (!aSuppressSuccessDialog) { |
1324 | 0 | Utils.showDialog(parent, MessageFormat.format( |
1325 | |
stringFactory.getString(LabelStringFactory. |
1326 | |
MAIN_FRAME_VALID_XML_MSG), |
1327 | |
sourceXmlFile), |
1328 | |
stringFactory.getString(LabelStringFactory. |
1329 | |
MAIN_FRAME_VALID_XML_MSG_HDR_YES), |
1330 | |
JOptionPane.INFORMATION_MESSAGE); |
1331 | |
} |
1332 | 0 | } catch (UnknownHostException aException) { |
1333 | 0 | logger.error(aException); |
1334 | 0 | Utils.handleXMLError(stringFactory.getString(LabelStringFactory. |
1335 | |
MAIN_FRAME_VALID_XML_MSG_HDR_NO), aLabel, |
1336 | |
stringFactory.getString(LabelStringFactory. |
1337 | |
MAIN_FRAME_XML_VALIDATION_ERR), |
1338 | |
sourceXmlFile, this, aException.getMessage()); |
1339 | 0 | } catch (SocketException aException) { |
1340 | 0 | logger.error(aException); |
1341 | 0 | Utils.handleXMLError(stringFactory.getString(LabelStringFactory. |
1342 | |
MAIN_FRAME_VALID_XML_MSG_HDR_NO), aLabel, |
1343 | |
stringFactory.getString(LabelStringFactory. |
1344 | |
MAIN_FRAME_XML_VALIDATION_ERR), |
1345 | |
sourceXmlFile, this, aException.getMessage()); |
1346 | 0 | } catch (Throwable aAny) { |
1347 | 0 | Utils.handleXMLError(stringFactory.getString(LabelStringFactory. |
1348 | |
MAIN_FRAME_VALID_XML_MSG_HDR_NO), aLabel, |
1349 | |
stringFactory.getString(LabelStringFactory. |
1350 | |
MAIN_FRAME_XML_VALIDATION_ERR), |
1351 | |
sourceXmlFile, this, aAny); |
1352 | 0 | } |
1353 | 0 | return isValid; |
1354 | |
} |
1355 | |
|
1356 | |
|
1357 | |
|
1358 | |
|
1359 | |
|
1360 | |
|
1361 | |
|
1362 | |
|
1363 | |
private boolean isNextStylesheet(int aStartIndex, int aSizeOfList) { |
1364 | |
|
1365 | |
boolean isNextStylesheet; |
1366 | |
int loop; |
1367 | |
|
1368 | 0 | isNextStylesheet = false; |
1369 | 0 | for (loop = aStartIndex; loop < aSizeOfList; loop++) { |
1370 | 0 | if (((XSLRow)(xslRows.get(loop))).isOnAndNotEmpty()) { |
1371 | 0 | isNextStylesheet = true; |
1372 | 0 | break; |
1373 | |
} |
1374 | |
} |
1375 | 0 | return isNextStylesheet; |
1376 | |
} |
1377 | |
|
1378 | |
|
1379 | |
|
1380 | |
|
1381 | |
|
1382 | |
|
1383 | |
|
1384 | |
private void doValidateXml(String aLabel, JTextField aTextField, |
1385 | |
boolean aSuppressSuccessDialog) { |
1386 | 0 | label = aLabel; |
1387 | 0 | textField = aTextField; |
1388 | 0 | suppressSuccessDialog = aSuppressSuccessDialog; |
1389 | 0 | threadMode = THREADMODE_DO_VALIDATE; |
1390 | 0 | Utils.setEnabled(components, false); |
1391 | 0 | new Thread(this).start(); |
1392 | 0 | } |
1393 | |
|
1394 | |
|
1395 | |
|
1396 | |
|
1397 | |
public void run() { |
1398 | |
|
1399 | |
String sresultsFile; |
1400 | |
File xmlFile, resultsFile; |
1401 | |
byte results[]; |
1402 | |
|
1403 | |
try { |
1404 | 0 | switch (threadMode) { |
1405 | |
case THREADMODE_DO_TRANSFORM: |
1406 | 0 | executeTransform(); |
1407 | 0 | break; |
1408 | |
case THREADMODE_DO_VALIDATE: |
1409 | 0 | validateXml(label, textField, suppressSuccessDialog); |
1410 | 0 | break; |
1411 | |
case THREADMODE_DO_XML_IDENTITY_TRANSFORM: |
1412 | 0 | xmlFile = new File(identityTransformSourceXmlFile); |
1413 | 0 | sresultsFile = (String)JOptionPane.showInputDialog(this, |
1414 | |
identityTransformMessage, stringFactory.getString( |
1415 | |
LabelStringFactory. |
1416 | |
MAIN_FRAME_IDENTITY_TRANSFORM), |
1417 | |
JOptionPane.QUESTION_MESSAGE, |
1418 | |
null, null, identityTransformResultXmlFile); |
1419 | 0 | if (sresultsFile != null) { |
1420 | 0 | resultsFile = new File(sresultsFile); |
1421 | 0 | resultsFile.getParentFile().mkdirs(); |
1422 | 0 | results = XMLUtils.transform(xmlFile, |
1423 | |
xmlIdentityTransformOutputProps); |
1424 | 0 | IOUtils.writeFile(resultsFile, results); |
1425 | |
} |
1426 | |
break; |
1427 | |
} |
1428 | 0 | } catch (Throwable aAny) { |
1429 | 0 | logger.error(ExceptionUtils.getFullStackTrace(aAny)); |
1430 | 0 | Utils.showErrorDialog(this, aAny); |
1431 | |
} finally { |
1432 | 0 | Utils.setEnabled(components, true); |
1433 | 0 | setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
1434 | 0 | } |
1435 | 0 | } |
1436 | |
|
1437 | |
|
1438 | |
|
1439 | |
|
1440 | |
|
1441 | |
private void doTransform() { |
1442 | 0 | components.clear(); |
1443 | 0 | components.add(transformBtn); |
1444 | 0 | threadMode = THREADMODE_DO_TRANSFORM; |
1445 | 0 | Utils.setEnabled(components, false); |
1446 | 0 | new Thread(this).start(); |
1447 | 0 | } |
1448 | |
|
1449 | |
|
1450 | |
|
1451 | |
|
1452 | |
|
1453 | |
|
1454 | |
|
1455 | |
private void doIdentityTransform(String aMessage, |
1456 | |
String aIdentityTransformSourceXmlFile, |
1457 | |
String aIdentityTransformResultXmlFile) { |
1458 | 0 | Utils.setEnabled(components, false); |
1459 | 0 | threadMode = THREADMODE_DO_XML_IDENTITY_TRANSFORM; |
1460 | 0 | identityTransformMessage = aMessage; |
1461 | 0 | identityTransformSourceXmlFile = aIdentityTransformSourceXmlFile; |
1462 | 0 | identityTransformResultXmlFile = aIdentityTransformResultXmlFile; |
1463 | 0 | new Thread(this).start(); |
1464 | 0 | } |
1465 | |
|
1466 | |
|
1467 | |
|
1468 | |
|
1469 | |
|
1470 | |
private void executeTransform() throws Exception { |
1471 | |
|
1472 | |
int loop; |
1473 | |
XSLRow lrows[]; |
1474 | |
|
1475 | 0 | if (validateAll()) { |
1476 | 0 | lrows = Utils.toArray(xslRows); |
1477 | 0 | for (loop = 0; loop < lrows.length; loop++) { |
1478 | 0 | lrows[loop].setTimeToTransform(0); |
1479 | |
} |
1480 | 0 | transform(IOUtils.getContents(sourceXmlTf.getText())); |
1481 | |
} |
1482 | 0 | } |
1483 | |
|
1484 | |
|
1485 | |
|
1486 | |
|
1487 | |
private void transform(byte aXmlContents[]) throws TransformerException, |
1488 | |
IOException, ParserConfigurationException, SAXException { |
1489 | |
|
1490 | |
int loop, size; |
1491 | |
long transformTime; |
1492 | |
byte tmp[]; |
1493 | |
XSLRow xslRow; |
1494 | |
byte transformResult[]; |
1495 | |
boolean success; |
1496 | |
TransformOutputProperties transformOutputProps; |
1497 | |
TransformParameters transformParameters; |
1498 | |
|
1499 | 0 | xslRow = null; |
1500 | 0 | transformOutputProps = null; |
1501 | 0 | transformParameters = null; |
1502 | 0 | size = xslRows.size(); |
1503 | 0 | transformResult = aXmlContents; |
1504 | 0 | success = true; |
1505 | 0 | lastTotalTransformTime = 0; |
1506 | |
try { |
1507 | 0 | for (loop = 0; loop < size; loop++) { |
1508 | 0 | xslRow = (XSLRow)xslRows.get(loop); |
1509 | 0 | transformOutputProps = xslRow.getTransformOutputProperties(); |
1510 | 0 | transformParameters = xslRow.getTransformParameters(); |
1511 | 0 | if (xslRow.isOnAndNotEmpty()) { |
1512 | 0 | transformResult = XMLUtils.transform(tmp = transformResult, |
1513 | |
xslRow.getTextField().getText(), |
1514 | |
transformOutputProps, transformParameters); |
1515 | 0 | transformTime = XMLUtils.getTransformTime(tmp, |
1516 | |
xslRow.getTextField().getText(), |
1517 | |
transformOutputProps, transformParameters); |
1518 | 0 | xslRow.setTimeToTransform(transformTime); |
1519 | 0 | lastTotalTransformTime += transformTime; |
1520 | 0 | if (!XMLUtils.isXml(transformResult)) { |
1521 | 0 | if (isNextStylesheet(loop + 1, size)) { |
1522 | 0 | success = false; |
1523 | 0 | Utils.showDialog(this, MessageFormat.format( |
1524 | |
stringFactory.getString( |
1525 | |
LabelStringFactory. |
1526 | |
MAIN_FRAME_TRANSFORM_RESULT_NOT_XML), |
1527 | |
(loop + 1)), stringFactory.getString( |
1528 | |
LabelStringFactory. |
1529 | |
MAIN_FRAME_TRANSFORM_ERR_MSG), |
1530 | |
JOptionPane.INFORMATION_MESSAGE); |
1531 | 0 | break; |
1532 | |
} |
1533 | |
} |
1534 | |
} |
1535 | |
} |
1536 | 0 | } catch (TransformerException aTransformerException) { |
1537 | 0 | success = false; |
1538 | 0 | Utils.handleXMLError(stringFactory.getString( |
1539 | |
LabelStringFactory.MAIN_FRAME_ERR_IN_XSL), |
1540 | |
xslRow.getDescription(), |
1541 | |
stringFactory.getString( |
1542 | |
LabelStringFactory.MAIN_FRAME_XSL_TRANSFORMATION_ERR), |
1543 | |
xslRow.getTextField().getText(), |
1544 | |
this, aTransformerException); |
1545 | 0 | } |
1546 | 0 | if (success) { |
1547 | 0 | transformTimeLabel.setText(lastTotalTransformTime + " " + |
1548 | |
stringFactory.getString( |
1549 | |
LabelStringFactory. |
1550 | |
MAIN_FRAME_MILLISECONDS_ABBREVIATION)); |
1551 | 0 | logger.info("total transform time: " + lastTotalTransformTime + |
1552 | |
" " + stringFactory.getString(LabelStringFactory. |
1553 | |
MAIN_FRAME_MILLISECONDS_ABBREVIATION)); |
1554 | 0 | transformTimings.setEnabled(true); |
1555 | 0 | if (autosaveCb.isSelected()) { |
1556 | 0 | IOUtils.writeFile(new File(autosavePathTf.getText()), |
1557 | |
transformResult); |
1558 | |
} |
1559 | 0 | if (!suppressOutputWindowCb.isSelected()) { |
1560 | 0 | if (XMLUtils.isXml(transformResult)) { |
1561 | 0 | if (outputAsTextIfXml.isSelected()) { |
1562 | 0 | new OutputFrame(this, stringFactory.getString( |
1563 | |
LabelStringFactory. |
1564 | |
MAIN_FRAME_TRANSFORM_RESULTS), transformResult, |
1565 | |
Utils.toArray(xslRows)); |
1566 | 0 | } else { |
1567 | 0 | new OutputFrame(this, stringFactory.getString( |
1568 | |
LabelStringFactory. |
1569 | |
MAIN_FRAME_TRANSFORM_RESULTS), |
1570 | |
XMLUtils.getDocument(transformResult), |
1571 | |
transformOutputProps, |
1572 | |
Utils.toArray(xslRows), true); |
1573 | |
} |
1574 | 0 | } else { |
1575 | 0 | new OutputFrame(this, stringFactory.getString( |
1576 | |
LabelStringFactory.MAIN_FRAME_TRANSFORM_RESULTS), |
1577 | |
transformResult, Utils.toArray(xslRows)); |
1578 | |
} |
1579 | |
} |
1580 | |
} |
1581 | 0 | } |
1582 | |
|
1583 | |
|
1584 | |
|
1585 | |
|
1586 | |
|
1587 | |
|
1588 | |
|
1589 | |
private void persistOutputProperties( |
1590 | |
TransformOutputProperties aOutputProperties, |
1591 | |
String aPropertyNamePrefix) { |
1592 | |
|
1593 | |
String val; |
1594 | |
|
1595 | 0 | if (StringUtils.isNotBlank(val = |
1596 | |
aOutputProperties.getCDATA_SECTION_ELEMENTS())) { |
1597 | 0 | userPrefs.setProperty(aPropertyNamePrefix + |
1598 | |
AppConstants.CDATA_SECTION_ELEMENTS, val); |
1599 | |
} |
1600 | 0 | if (StringUtils.isNotBlank(val = |
1601 | |
aOutputProperties.getDOCTYPE_PUBLIC())) { |
1602 | 0 | userPrefs.setProperty(aPropertyNamePrefix + |
1603 | |
AppConstants.DOCTYPE_PUBLIC, val); |
1604 | |
} |
1605 | 0 | if (StringUtils.isNotBlank(val = |
1606 | |
aOutputProperties.getDOCTYPE_SYSTEM())) { |
1607 | 0 | userPrefs.setProperty(aPropertyNamePrefix + |
1608 | |
AppConstants.DOCTYPE_SYSTEM, val); |
1609 | |
} |
1610 | 0 | if (StringUtils.isNotBlank(val = |
1611 | |
aOutputProperties.getENCODING())) { |
1612 | 0 | userPrefs.setProperty(aPropertyNamePrefix + |
1613 | |
AppConstants.ENCODING, val); |
1614 | |
} |
1615 | 0 | if (StringUtils.isNotBlank(val = |
1616 | |
aOutputProperties.getINDENT())) { |
1617 | 0 | userPrefs.setProperty(aPropertyNamePrefix + |
1618 | |
AppConstants.INDENT, val); |
1619 | |
} |
1620 | 0 | if (StringUtils.isNotBlank(val = |
1621 | |
aOutputProperties.getMEDIA_TYPE())) { |
1622 | 0 | userPrefs.setProperty(aPropertyNamePrefix + |
1623 | |
AppConstants.MEDIA_TYPE, val); |
1624 | |
} |
1625 | 0 | if (StringUtils.isNotBlank(val = |
1626 | |
aOutputProperties.getMETHOD())) { |
1627 | 0 | userPrefs.setProperty(aPropertyNamePrefix + |
1628 | |
AppConstants.METHOD, val); |
1629 | |
} |
1630 | 0 | if (StringUtils.isNotBlank(val = |
1631 | |
aOutputProperties.getOMIT_XML_DECLARATION())) { |
1632 | 0 | userPrefs.setProperty(aPropertyNamePrefix + |
1633 | |
AppConstants.OMIT_XML_DECLARATION, val); |
1634 | |
} |
1635 | 0 | if (StringUtils.isNotBlank(val = |
1636 | |
aOutputProperties.getSTANDALONE())) { |
1637 | 0 | userPrefs.setProperty(aPropertyNamePrefix + |
1638 | |
AppConstants.STANDALONE, val); |
1639 | |
} |
1640 | 0 | if (StringUtils.isNotBlank(val = |
1641 | |
aOutputProperties.getVERSION())) { |
1642 | 0 | userPrefs.setProperty(aPropertyNamePrefix + |
1643 | |
AppConstants.VERSION, val); |
1644 | |
} |
1645 | 0 | } |
1646 | |
|
1647 | |
|
1648 | |
|
1649 | |
|
1650 | |
|
1651 | |
private void persistUserPrefs() { |
1652 | |
|
1653 | |
int loop, size, innerLoop; |
1654 | |
String paramNames[]; |
1655 | |
XSLRow xslRow; |
1656 | |
String propertyName; |
1657 | |
TransformParameters parameters; |
1658 | |
|
1659 | 0 | userPrefs.clearDynamicPrefs(); |
1660 | 0 | userPrefs.setProperty(AppConstants.CHK_WARNINGS_PROP, |
1661 | |
"" + checkSaxWarning.isSelected()); |
1662 | 0 | userPrefs.setProperty(AppConstants.CHK_ERRORS_PROP, |
1663 | |
"" + checkSaxError.isSelected()); |
1664 | 0 | userPrefs.setProperty(AppConstants.CHK_FATAL_ERRORS_PROP, |
1665 | |
"" + checkSaxFatalError.isSelected()); |
1666 | 0 | userPrefs.setProperty(AppConstants.X_COORD_PROP, |
1667 | |
Integer.toString(this.getX())); |
1668 | 0 | userPrefs.setProperty(AppConstants.Y_COORD_PROP, |
1669 | |
Integer.toString(this.getY())); |
1670 | 0 | userPrefs.setProperty(AppConstants.LAST_XML_FILE_PROP, |
1671 | |
sourceXmlTf.getText()); |
1672 | 0 | userPrefs.setProperty(AppConstants.SUPPRESS_OUTPUT_WINDOW_PROP, |
1673 | |
"" + suppressOutputWindowCb.isSelected()); |
1674 | 0 | userPrefs.setProperty(AppConstants.OUTPUT_AS_TEXT_IF_XML_PROP, |
1675 | |
"" + outputAsTextIfXml.isSelected()); |
1676 | 0 | userPrefs.setProperty(AppConstants.AUTOSAVE_RESULT_PROP, |
1677 | |
"" + autosaveCb.isSelected()); |
1678 | 0 | userPrefs.setProperty(AppConstants.AUTOSAVE_FILE_PROP, |
1679 | |
autosavePathTf.getText()); |
1680 | |
|
1681 | 0 | persistOutputProperties(xmlIdentityTransformOutputProps, |
1682 | |
"xml_identity_transform_outputproperties_"); |
1683 | 0 | userPrefs.setProperty("xml_identity_transform_opInd", |
1684 | |
"" + areXmlOutputPropertiesSet); |
1685 | 0 | size = xslRows.size(); |
1686 | 0 | for (loop = 0; loop < size; loop++) { |
1687 | 0 | xslRow = (XSLRow)xslRows.get(loop); |
1688 | |
|
1689 | 0 | propertyName = "xsl_" + loop + "_file"; |
1690 | 0 | userPrefs.setProperty(propertyName, |
1691 | |
xslRow.getTextField().getText()); |
1692 | |
|
1693 | 0 | propertyName = "xsl_" + loop + "_onoff"; |
1694 | 0 | userPrefs.setProperty(propertyName, "" + xslRow.isOn()); |
1695 | |
|
1696 | 0 | propertyName = "xsl_" + loop + "_opInd"; |
1697 | 0 | userPrefs.setProperty(propertyName, "" + |
1698 | |
xslRow.areOutputPropertiesSet()); |
1699 | |
|
1700 | 0 | persistOutputProperties(xslRow.getTransformOutputProperties(), |
1701 | |
"xsl_" + loop + "_outputproperties_"); |
1702 | 0 | parameters = xslRow.getTransformParameters(); |
1703 | 0 | paramNames = parameters.getParameterNames(); |
1704 | 0 | for (innerLoop = 0; innerLoop < paramNames.length; innerLoop++) { |
1705 | 0 | userPrefs.setProperty("xsl_" + loop + "_params_" + |
1706 | |
innerLoop + "_" + paramNames[innerLoop], |
1707 | |
(String)parameters.getParameter(paramNames[innerLoop])); |
1708 | |
} |
1709 | |
} |
1710 | 0 | userPrefs.setProperty(AppConstants.NUM_STYLESHEETS_PROP, |
1711 | |
Integer.toString(size)); |
1712 | 0 | userPrefs.setProperty(AppConstants.FRAME_HEIGHT_PROP, |
1713 | |
Integer.toString(getHeight())); |
1714 | 0 | userPrefs.setProperty(AppConstants.FRAME_WIDTH_PROP, |
1715 | |
Integer.toString(getWidth())); |
1716 | 0 | if (StringUtils.isNotBlank(lastFileChosen)) { |
1717 | 0 | userPrefs.setProperty(AppConstants.LAST_FILE_CHOSEN_PROP, |
1718 | |
lastFileChosen); |
1719 | |
} |
1720 | 0 | } |
1721 | |
|
1722 | |
|
1723 | |
|
1724 | |
|
1725 | |
private void destroy() { |
1726 | |
try { |
1727 | 0 | persistUserPrefs(); |
1728 | 0 | userPrefs.persistUserPrefs(); |
1729 | 0 | } catch (IOException aException) { |
1730 | 0 | logger.error(ExceptionUtils.getFullStackTrace(aException)); |
1731 | 0 | Utils.showErrorDialog(this, aException); |
1732 | |
} finally { |
1733 | 0 | dispose(); |
1734 | 0 | System.exit(0); |
1735 | 0 | } |
1736 | 0 | } |
1737 | |
|
1738 | |
|
1739 | |
|
1740 | |
|
1741 | |
|
1742 | |
public static void main(String aArgs[]) throws Exception { |
1743 | 0 | JFrame.setDefaultLookAndFeelDecorated(true); |
1744 | 0 | new BasicXSLTFrame(); |
1745 | 0 | } |
1746 | |
} |