KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > it > businesslogic > ireport > plugin > locale > TranslationStatusDetailDialog


1 /*
2  * Copyright (C) 2005 - 2006 JasperSoft Corporation. All rights reserved.
3  * http://www.jaspersoft.com.
4  *
5  * Unless you have purchased a commercial license agreement from JasperSoft,
6  * the following license terms apply:
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as published by
10  * the Free Software Foundation.
11  *
12  * This program is distributed WITHOUT ANY WARRANTY; and without the
13  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14  * See the GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
18  * or write to:
19  *
20  * Free Software Foundation, Inc.,
21  * 59 Temple Place - Suite 330,
22  * Boston, MA USA 02111-1307
23  *
24  *
25  *
26  *
27  * TranslationStatusDetailDialog.java
28  *
29  * Created on March 27, 2006, 8:06 PM
30  *
31  */

32
33 package it.businesslogic.ireport.plugin.locale;
34
35
36 import it.businesslogic.ireport.gui.MainFrame;
37 import it.businesslogic.ireport.plugin.locale.ResourceKey;
38 import it.businesslogic.ireport.util.Misc;
39 import java.awt.Cursor JavaDoc;
40 import java.io.File JavaDoc;
41 import java.io.FileOutputStream JavaDoc;
42 import java.io.OutputStreamWriter JavaDoc;
43 import java.io.PrintWriter JavaDoc;
44 import java.util.Iterator JavaDoc;
45 import java.util.List JavaDoc;
46 import java.util.Properties JavaDoc;
47 import javax.swing.DefaultListSelectionModel JavaDoc;
48 import javax.swing.JFileChooser JavaDoc;
49 import javax.swing.JOptionPane JavaDoc;
50 import javax.swing.SwingUtilities JavaDoc;
51 import javax.swing.event.ListSelectionEvent JavaDoc;
52 import javax.swing.event.ListSelectionListener JavaDoc;
53 import javax.swing.table.DefaultTableModel JavaDoc;
54 import javax.swing.table.TableColumn JavaDoc;
55 import javax.swing.table.TableColumnModel JavaDoc;
56 import it.businesslogic.ireport.util.I18n;
57
58 /**
59  *
60  * @author gtoffoli
61  */

62 public class TranslationStatusDetailDialog extends javax.swing.JDialog JavaDoc implements JasperBabylonRunnerListener {
63     
64     private java.util.Properties JavaDoc properties = null;
65     private String JavaDoc fileName = "";
66     
67     /** Creates new form TranslationStatusDialog */
68     public TranslationStatusDetailDialog(java.awt.Frame JavaDoc parent, boolean modal) {
69         super(parent, modal);
70         initAll();
71     }
72     
73     /**
74      */

75     public TranslationStatusDetailDialog(java.awt.Dialog JavaDoc parent, boolean modal) {
76         super(parent, modal);
77         initAll();
78     }
79     
80     private void initAll()
81     {
82         initComponents();
83         
84         TableColumnModel JavaDoc tcm = jTableLanguages.getColumnModel();
85         TableColumn JavaDoc tc = tcm.getColumn(0);
86         tc.setCellRenderer(new MissingResourceCellRenderer());
87         
88         DefaultListSelectionModel JavaDoc dsm = new DefaultListSelectionModel JavaDoc();
89         dsm.setSelectionMode( dsm.SINGLE_SELECTION );
90         dsm.addListSelectionListener( new ListSelectionListener JavaDoc() {
91             public void valueChanged(ListSelectionEvent JavaDoc e) {
92                 jButtonDetails.setEnabled( jTableLanguages.getSelectedRow() >= 0);
93             }
94         });
95         jTableLanguages.setSelectionModel( dsm );
96         
97         applyI18n();
98         pack();
99         Misc.centerFrame(this);
100         
101         javax.swing.KeyStroke JavaDoc escape = javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE, 0, false);
102             javax.swing.Action JavaDoc escapeAction = new javax.swing.AbstractAction JavaDoc() {
103                 public void actionPerformed(java.awt.event.ActionEvent JavaDoc e) {
104                     jButtonOkActionPerformed(e);
105                 }
106             };
107
108             getRootPane().getInputMap(javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE");
109             getRootPane().getActionMap().put("ESCAPE", escapeAction);
110
111
112             //to make the default button ...
113
this.getRootPane().setDefaultButton(this.jButtonOk);
114     }
115     
116     /*
117      * languageFile (es. ireport_it.properties)
118      */

119     public void setLanguage(String JavaDoc language, Properties JavaDoc defaultTranslations)
120     {
121         DefaultTableModel JavaDoc dtm = (DefaultTableModel JavaDoc)jTableLanguages.getModel();
122         dtm.setRowCount(0);
123         properties = new Properties JavaDoc();
124         this.fileName = language;
125         try {
126         properties.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/" + language ) );
127         } catch (Exception JavaDoc ex){}
128         
129         Iterator JavaDoc namesIterator = defaultTranslations.keySet().iterator();
130         String JavaDoc[] names = new String JavaDoc[defaultTranslations.keySet().size()];
131         for (int i=0; i<names.length; ++i)
132         {
133             names[i] = (String JavaDoc)namesIterator.next();
134             
135         }
136         java.util.Arrays.sort(names);
137         
138         
139         double translated = 0;
140         for (int i=0; i<names.length; ++i)
141         {
142             String JavaDoc name = ""+names[i];
143             ResourceKey rk = new ResourceKey(name);
144             if (properties.getProperty(name) == null)
145             {
146                 rk.setMissing(true);
147             }
148             dtm.addRow(new Object JavaDoc[]{rk, ((!rk.isMissing()) ? properties.getProperty(name) : ""), defaultTranslations.getProperty(name) });
149             
150         }
151         
152         jTableLanguages.updateUI();
153     }
154     
155        
156     /** This method is called from within the constructor to
157      * initialize the form
158      * WARNING: Do NOT modify this code. The content of this method is
159      * always regenerated by the Form Editor.
160      */

161     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
162
private void initComponents() {
163         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
164
165         jPanel2 = new javax.swing.JPanel JavaDoc();
166         jButtonImportFromJB = new javax.swing.JButton JavaDoc();
167         jButtonExportToJB = new javax.swing.JButton JavaDoc();
168         jScrollPane1 = new javax.swing.JScrollPane JavaDoc();
169         jTableLanguages = new javax.swing.JTable JavaDoc();
170         jPanel1 = new javax.swing.JPanel JavaDoc();
171         jButtonSave = new javax.swing.JButton JavaDoc();
172         jButtonDetails = new javax.swing.JButton JavaDoc();
173         jButtonOk = new javax.swing.JButton JavaDoc();
174
175         getContentPane().setLayout(new java.awt.GridBagLayout JavaDoc());
176
177         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
178         jPanel2.setLayout(new java.awt.GridBagLayout JavaDoc());
179
180         jButtonImportFromJB.setText("Import from JasperBabylon");
181         jButtonImportFromJB.setActionCommand("Import from JasperBabylon");
182         jButtonImportFromJB.addActionListener(new java.awt.event.ActionListener JavaDoc() {
183             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
184                 jButtonExportToJBjButtonDetailsActionPerformed2(evt);
185             }
186         });
187
188         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
189         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
190         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 0, 4, 4);
191         jPanel2.add(jButtonImportFromJB, gridBagConstraints);
192
193         jButtonExportToJB.setText("Export to JasperBabylon");
194         jButtonExportToJB.setActionCommand("Export to JasperBabylon");
195         jButtonExportToJB.addActionListener(new java.awt.event.ActionListener JavaDoc() {
196             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
197                 jButtonDetailsActionPerformed2(evt);
198             }
199         });
200
201         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
202         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
203         gridBagConstraints.weightx = 1.0;
204         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 0, 4, 4);
205         jPanel2.add(jButtonExportToJB, gridBagConstraints);
206
207         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
208         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
209         gridBagConstraints.weightx = 1.0;
210         getContentPane().add(jPanel2, gridBagConstraints);
211
212         jTableLanguages.setModel(new javax.swing.table.DefaultTableModel JavaDoc(
213             new Object JavaDoc [][] {
214
215             },
216             new String JavaDoc [] {
217                 "Key", "Translation", "Default"
218             }
219         ) {
220             Class JavaDoc[] types = new Class JavaDoc [] {
221                 java.lang.String JavaDoc.class, java.lang.String JavaDoc.class, java.lang.String JavaDoc.class
222             };
223             boolean[] canEdit = new boolean [] {
224                 false, true, false
225             };
226
227             public Class JavaDoc getColumnClass(int columnIndex) {
228                 return types [columnIndex];
229             }
230
231             public boolean isCellEditable(int rowIndex, int columnIndex) {
232                 return canEdit [columnIndex];
233             }
234         });
235         jTableLanguages.setGridColor(new java.awt.Color JavaDoc(204, 204, 204));
236         jTableLanguages.addMouseListener(new java.awt.event.MouseAdapter JavaDoc() {
237             public void mouseClicked(java.awt.event.MouseEvent JavaDoc evt) {
238                 jTableLanguagesMouseClicked(evt);
239             }
240         });
241
242         jScrollPane1.setViewportView(jTableLanguages);
243
244         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
245         gridBagConstraints.gridx = 0;
246         gridBagConstraints.gridwidth = 2;
247         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
248         gridBagConstraints.weightx = 1.0;
249         gridBagConstraints.weighty = 1.0;
250         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 4, 4);
251         getContentPane().add(jScrollPane1, gridBagConstraints);
252
253         jPanel1.setLayout(new java.awt.GridBagLayout JavaDoc());
254
255         jButtonSave.setText("Save");
256         jButtonSave.addActionListener(new java.awt.event.ActionListener JavaDoc() {
257             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
258                 jButtonDetailsActionPerformed1(evt);
259             }
260         });
261
262         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
263         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
264         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 0, 4, 4);
265         jPanel1.add(jButtonSave, gridBagConstraints);
266
267         jButtonDetails.setLabel("Export to file");
268         jButtonDetails.addActionListener(new java.awt.event.ActionListener JavaDoc() {
269             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
270                 jButtonDetailsActionPerformed(evt);
271             }
272         });
273
274         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
275         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
276         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 0, 4, 4);
277         jPanel1.add(jButtonDetails, gridBagConstraints);
278
279         jButtonOk.setText("Close");
280         jButtonOk.addActionListener(new java.awt.event.ActionListener JavaDoc() {
281             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
282                 jButtonOkActionPerformed(evt);
283             }
284         });
285
286         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
287         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
288         gridBagConstraints.weightx = 1.0;
289         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 0, 4, 0);
290         jPanel1.add(jButtonOk, gridBagConstraints);
291
292         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
293         gridBagConstraints.gridx = 0;
294         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
295         gridBagConstraints.weightx = 1.0;
296         getContentPane().add(jPanel1, gridBagConstraints);
297
298         pack();
299     }// </editor-fold>//GEN-END:initComponents
300

301     private void jButtonExportToJBjButtonDetailsActionPerformed2(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonExportToJBjButtonDetailsActionPerformed2
302

303         
304         setCursor(Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR));
305         JasperBabylonRunner jbr = new JasperBabylonRunner();
306         jbr.setRunnerListener(this);
307         String JavaDoc code = this.getFileName();
308         if (code.startsWith("Ireport_"))
309         {
310             code = code.substring(8);
311         }
312         if (code.endsWith(".properties"))
313         {
314             code = code.substring(0, code.length() - 11);
315         }
316         jbr.getLocale( code );
317         
318     }//GEN-LAST:event_jButtonExportToJBjButtonDetailsActionPerformed2
319

320     private void jButtonDetailsActionPerformed2(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonDetailsActionPerformed2
321

322         if (JOptionPane.showConfirmDialog(this,"Are you sure you want send your translation on JasperBabylon?") == JOptionPane.YES_OPTION)
323         {
324             java.util.Properties JavaDoc p = new java.util.Properties JavaDoc();
325             for (int i=0; i<jTableLanguages.getRowCount(); ++i)
326             {
327                 ResourceKey rk = (ResourceKey)jTableLanguages.getValueAt(i,0);
328                 String JavaDoc value = (String JavaDoc)jTableLanguages.getValueAt(i,1);
329                 if (value == null || value.length() == 0) continue;
330                 p.setProperty( rk.getKey(), value );
331             }
332             
333             setCursor(Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR));
334             JasperBabylonRunner jbr = new JasperBabylonRunner();
335             jbr.setRunnerListener(this);
336             String JavaDoc code = this.getFileName();
337             if (code.startsWith("Ireport_"))
338             {
339                 code = code.substring(8);
340             }
341             if (code.endsWith(".properties"))
342             {
343                 code = code.substring(0, code.length() - 11);
344             }
345             jbr.putLocale( code, p);
346         }
347         
348         
349     }//GEN-LAST:event_jButtonDetailsActionPerformed2
350

351     private void jButtonDetailsActionPerformed1(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonDetailsActionPerformed1
352

353         java.util.Properties JavaDoc p = new java.util.Properties JavaDoc();
354         for (int i=0; i<jTableLanguages.getRowCount(); ++i)
355         {
356             ResourceKey rk = (ResourceKey)jTableLanguages.getValueAt(i,0);
357             String JavaDoc value = (String JavaDoc)jTableLanguages.getValueAt(i,1);
358             if (value == null || value.length() == 0) continue;
359             p.setProperty( rk.getKey(), value );
360         }
361         Misc.saveTemporaryLocale(p, this.getFileName());
362         if (this.getParent() != null &&
363             this.getParent() instanceof TranslationStatusDialog)
364         {
365             ((TranslationStatusDialog)this.getParent()).updateStatus();
366         }
367         jButtonOkActionPerformed(null);
368         
369     }//GEN-LAST:event_jButtonDetailsActionPerformed1
370

371     private void jButtonOkActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonOkActionPerformed
372

373         this.setVisible(false);
374         this.dispose();
375     }//GEN-LAST:event_jButtonOkActionPerformed
376

377     private void jButtonDetailsActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonDetailsActionPerformed
378
// jfilechooser...
379
try {
380         JFileChooser JavaDoc jfc = new JFileChooser JavaDoc();
381             jfc.setSelectedFile(new File JavaDoc(getFileName()));
382         if (jfc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
383                 
384                     FileOutputStream JavaDoc fos = new FileOutputStream JavaDoc(jfc.getSelectedFile());
385                     this.getProperties().store(fos, "");
386                     PrintWriter JavaDoc pw = new PrintWriter JavaDoc(new OutputStreamWriter JavaDoc(fos));
387                     pw.println("\n\n# ---------- Missing translations -------------");
388                     
389                     for (int i=0; i<jTableLanguages.getRowCount(); ++i)
390                     {
391                         ResourceKey rk = (ResourceKey)jTableLanguages.getValueAt(i,0);
392                         if (rk.isMissing())
393                         {
394                             pw.println("#"+rk+"="+jTableLanguages.getValueAt(i,2));
395                         }
396                     }
397                     
398                     pw.close();
399         }
400         } catch (Exception JavaDoc ex)
401         {
402             ex.printStackTrace();
403         }
404         
405     }//GEN-LAST:event_jButtonDetailsActionPerformed
406

407     private void jTableLanguagesMouseClicked(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_jTableLanguagesMouseClicked
408

409     }//GEN-LAST:event_jTableLanguagesMouseClicked
410

411     /**
412      * @param args the command line arguments
413      */

414     public static void main(String JavaDoc args[]) {
415         java.awt.EventQueue.invokeLater(new Runnable JavaDoc() {
416             public void run() {
417                 new TranslationStatusDialog(new javax.swing.JFrame JavaDoc(), true).setVisible(true);
418             }
419         });
420     }
421
422     public java.util.Properties JavaDoc getProperties() {
423         return properties;
424     }
425
426     public void setProperties(java.util.Properties JavaDoc properties) {
427         this.properties = properties;
428     }
429
430     public String JavaDoc getFileName() {
431         return fileName;
432     }
433
434     public void setFileName(String JavaDoc fileName) {
435         this.fileName = fileName;
436     }
437     
438     // Variables declaration - do not modify//GEN-BEGIN:variables
439
private javax.swing.JButton JavaDoc jButtonDetails;
440     private javax.swing.JButton JavaDoc jButtonExportToJB;
441     private javax.swing.JButton JavaDoc jButtonImportFromJB;
442     private javax.swing.JButton JavaDoc jButtonOk;
443     private javax.swing.JButton JavaDoc jButtonSave;
444     private javax.swing.JPanel JavaDoc jPanel1;
445     private javax.swing.JPanel JavaDoc jPanel2;
446     private javax.swing.JScrollPane JavaDoc jScrollPane1;
447     private javax.swing.JTable JavaDoc jTableLanguages;
448     // End of variables declaration//GEN-END:variables
449

450     public void applyI18n(){
451                 // Start autogenerated code ----------------------
452
jButtonDetails.setText(I18n.getString("translationStatusDetailDialog.buttonDetails","Export"));
453                 jButtonOk.setText(I18n.getString("translationStatusDetailDialog.buttonOk","Close"));
454                 // End autogenerated code ----------------------
455

456                 jTableLanguages.getColumnModel().getColumn(0).setHeaderValue( I18n.getString("translationStatusDetailDialog.tablecolumn.key","Key") );
457                 jTableLanguages.getColumnModel().getColumn(1).setHeaderValue( I18n.getString("translationStatusDetailDialog.tablecolumn.translation","Translation") );
458                 jTableLanguages.getColumnModel().getColumn(2).setHeaderValue( I18n.getString("translationStatusDetailDialog.tablecolumn.default","Default") );
459                 
460     }
461
462     public void listLocalesComplete(List JavaDoc list) {
463     }
464
465     public void getLocaleComplete(Properties JavaDoc props) {
466         
467         
468         for (int i=0; i<jTableLanguages.getRowCount(); ++i)
469         {
470             ResourceKey rk = (ResourceKey)jTableLanguages.getValueAt(i,0);
471             if (props.getProperty( rk.getKey() ) != null)
472             {
473                 rk.setMissing(false);
474                 jTableLanguages.setValueAt(props.getProperty(rk.getKey()),i,1);
475             }
476         }
477         
478         try {
479         SwingUtilities.invokeAndWait(new Runnable JavaDoc() {
480             public void run() {
481                 setCursor(Cursor.getDefaultCursor());
482                 jTableLanguages.updateUI();
483             }
484         });
485         } catch (Exception JavaDoc ex){
486             ex.printStackTrace();
487         }
488     }
489
490     public void putLocaleComplete(String JavaDoc returnMessage) {
491         
492         
493         try {
494                 final String JavaDoc msg = returnMessage;
495                 SwingUtilities.invokeAndWait(new Runnable JavaDoc() {
496                     public void run() {
497                         setCursor(Cursor.getDefaultCursor());
498                         JOptionPane.showMessageDialog(TranslationStatusDetailDialog.this,msg);
499                     }
500                 });
501             } catch (Exception JavaDoc ex)
502             {}
503     }
504
505     public void operationError(int operation, String JavaDoc message) {
506         try {
507                 final String JavaDoc msg = message;
508                 SwingUtilities.invokeAndWait(new Runnable JavaDoc() {
509                     public void run() {
510                         setCursor(Cursor.getDefaultCursor());
511                         JOptionPane.showMessageDialog(TranslationStatusDetailDialog.this,msg);
512                     }
513                 });
514             } catch (Exception JavaDoc ex)
515             {}
516     }
517 }
518
Popular Tags