KickJava   Java API By Example, From Geeks To Geeks.

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


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  * TranslationStatusDialog.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.IReportConnection;
37 import it.businesslogic.ireport.gui.MainFrame;
38 import it.businesslogic.ireport.util.LocaleAdapter;
39 import it.businesslogic.ireport.util.Misc;
40 import java.io.File JavaDoc;
41 import java.io.FileOutputStream JavaDoc;
42 import java.util.Iterator JavaDoc;
43 import java.util.List JavaDoc;
44 import java.util.Locale JavaDoc;
45 import java.util.Properties JavaDoc;
46 import javax.swing.DefaultListSelectionModel JavaDoc;
47 import javax.swing.JOptionPane JavaDoc;
48 import javax.swing.event.ListSelectionEvent JavaDoc;
49 import javax.swing.event.ListSelectionListener JavaDoc;
50 import javax.swing.table.DefaultTableModel JavaDoc;
51 import javax.swing.table.TableColumn JavaDoc;
52 import javax.swing.table.TableColumnModel JavaDoc;
53 import it.businesslogic.ireport.util.I18n;
54 import java.sql.PreparedStatement JavaDoc;
55 import java.util.Enumeration JavaDoc;
56
57 /**
58  *
59  * @author gtoffoli
60  */

61 public class TranslationStatusDialog extends javax.swing.JDialog JavaDoc {
62     
63     /** Creates new form TranslationStatusDialog */
64     public TranslationStatusDialog(java.awt.Frame JavaDoc parent, boolean modal) {
65         super(parent, modal);
66         initComponents();
67         
68         TableColumnModel JavaDoc tcm = jTableLanguages.getColumnModel();
69         TableColumn JavaDoc tc = tcm.getColumn(1);
70         tc.setCellRenderer(new ProgressBarCellRenderer());
71         
72         DefaultListSelectionModel JavaDoc dsm = new DefaultListSelectionModel JavaDoc();
73         dsm.setSelectionMode( dsm.SINGLE_SELECTION );
74         dsm.addListSelectionListener( new ListSelectionListener JavaDoc() {
75             public void valueChanged(ListSelectionEvent JavaDoc e) {
76                 jButtonDetails.setEnabled( jTableLanguages.getSelectedRow() >= 0);
77             }
78         });
79         jTableLanguages.setSelectionModel( dsm );
80         
81         
82         applyI18n();
83         
84         updateStatus();
85         
86         this.jButtonInsertDb.setVisible(false);
87         
88         pack();
89         Misc.centerFrame(this);
90         
91         javax.swing.KeyStroke JavaDoc escape = javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE, 0, false);
92             javax.swing.Action JavaDoc escapeAction = new javax.swing.AbstractAction JavaDoc() {
93                 public void actionPerformed(java.awt.event.ActionEvent JavaDoc e) {
94                     jButtonOkActionPerformed(e);
95                 }
96             };
97
98             getRootPane().getInputMap(javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE");
99             getRootPane().getActionMap().put("ESCAPE", escapeAction);
100
101
102         
103             //to make the default button ...
104
this.getRootPane().setDefaultButton(this.jButtonOk);
105     }
106     
107     
108     public void updateStatus()
109     {
110         
111         List JavaDoc listOfLanguages = it.businesslogic.ireport.util.I18n.getListOfAvailLanguages();
112         
113         DefaultTableModel JavaDoc dtm = (DefaultTableModel JavaDoc)jTableLanguages.getModel();
114         dtm.setRowCount(0);
115         
116         //dtm.addRow(new Object[]{"Default",null,null});
117

118         Properties JavaDoc props_default = new Properties JavaDoc();
119         try {
120             props_default.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/Ireport.properties") );
121         } catch (Exception JavaDoc ex)
122         {
123             ex.printStackTrace();
124         }
125         
126         jLabelLocalizableString.setText( I18n.getFormattedString("translationStatusDialog.localizableStrings","Localizable strings: {0}", new Object JavaDoc[]{new Integer JavaDoc( props_default.size() - 1 )} ));
127         
128         
129         for (int i=0; i< listOfLanguages.size(); ++i)
130         {
131             Locale JavaDoc lang = (Locale JavaDoc)listOfLanguages.get(i);
132             LocaleAdapter adapter = new LocaleAdapter(lang);
133             String JavaDoc language = lang.getLanguage();
134             String JavaDoc country = lang.getCountry();
135             String JavaDoc variant = lang.getVariant();
136         
137             String JavaDoc language_name = (language.length() > 0) ? "_" + language : "";
138             language_name += (country.length() > 0) ? "_" + country : "";
139             language_name += (variant.length() > 0) ? "_" + variant : "";
140             
141             language_name = "Ireport" + language_name + ".properties";
142             
143             int percentage_language = getLanguageCompletation(props_default,language_name);
144             /*
145             if( lang.getCountry().equals(selectedCountry) &&
146                 lang.getLanguage().equals(selectedLanguage) &&
147                 lang.getVariant().equals(selectedVariant) ) {
148                         def_language = "" + adapter;
149             }
150             */

151             
152             dtm.addRow(new Object JavaDoc[]{adapter,new Integer JavaDoc(percentage_language),language_name});
153         }
154         
155         
156         
157     }
158     
159     public int getLanguageCompletation(Properties JavaDoc defaultTranslations, String JavaDoc language)
160     {
161         Properties JavaDoc props2 = new Properties JavaDoc();
162         try {
163         props2.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/" + language ) );
164         } catch (Exception JavaDoc ex){}
165         
166         
167         
168         double size = 0;
169         Iterator JavaDoc namesIterator = defaultTranslations.keySet().iterator();
170         size = defaultTranslations.size();
171         double translated = 0;
172         while (namesIterator.hasNext())
173         {
174             String JavaDoc name = ""+namesIterator.next();
175             if (name.equals("defaultFont"))
176             {
177                 size--;
178                 continue;
179             }
180             if (props2.getProperty(name) != null)
181             {
182                 translated++;
183             }
184         }
185         if (translated == 0) return 0;
186         return (int)((translated/size)*100);
187     }
188     
189     /** This method is called from within the constructor to
190      * initialize the form
191      * WARNING: Do NOT modify this code. The content of this method is
192      * always regenerated by the Form Editor.
193      */

194     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
195
private void initComponents() {
196         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
197
198         jLabelLocalizableString = new javax.swing.JLabel JavaDoc();
199         jScrollPane1 = new javax.swing.JScrollPane JavaDoc();
200         jTableLanguages = new javax.swing.JTable JavaDoc();
201         jPanel1 = new javax.swing.JPanel JavaDoc();
202         jButtonDetails = new javax.swing.JButton JavaDoc();
203         jButtonInsertDb = new javax.swing.JButton JavaDoc();
204         jButtonExportToJB = new javax.swing.JButton JavaDoc();
205         jButtonOk = new javax.swing.JButton JavaDoc();
206
207         getContentPane().setLayout(new java.awt.GridBagLayout JavaDoc());
208
209         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
210         jLabelLocalizableString.setText("Localizable strings:");
211         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
212         gridBagConstraints.gridwidth = 2;
213         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
214         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 4, 4);
215         getContentPane().add(jLabelLocalizableString, gridBagConstraints);
216
217         jTableLanguages.setModel(new javax.swing.table.DefaultTableModel JavaDoc(
218             new Object JavaDoc [][] {
219
220             },
221             new String JavaDoc [] {
222                 "Title 1", "Title 2", "Title 3"
223             }
224         ) {
225             boolean[] canEdit = new boolean [] {
226                 false, false, false
227             };
228
229             public boolean isCellEditable(int rowIndex, int columnIndex) {
230                 return canEdit [columnIndex];
231             }
232         });
233         jTableLanguages.setGridColor(new java.awt.Color JavaDoc(204, 204, 204));
234         jTableLanguages.setShowVerticalLines(false);
235         jTableLanguages.addMouseListener(new java.awt.event.MouseAdapter JavaDoc() {
236             public void mouseClicked(java.awt.event.MouseEvent JavaDoc evt) {
237                 jTableLanguagesMouseClicked(evt);
238             }
239         });
240
241         jScrollPane1.setViewportView(jTableLanguages);
242
243         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
244         gridBagConstraints.gridx = 0;
245         gridBagConstraints.gridwidth = 2;
246         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
247         gridBagConstraints.weightx = 1.0;
248         gridBagConstraints.weighty = 1.0;
249         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 4, 4);
250         getContentPane().add(jScrollPane1, gridBagConstraints);
251
252         jPanel1.setLayout(new java.awt.GridBagLayout JavaDoc());
253
254         jButtonDetails.setText("Details...");
255         jButtonDetails.setEnabled(false);
256         jButtonDetails.addActionListener(new java.awt.event.ActionListener JavaDoc() {
257             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
258                 jButtonDetailsActionPerformed(evt);
259             }
260         });
261
262         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
263         gridBagConstraints.gridx = 0;
264         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
265         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 4, 4);
266         jPanel1.add(jButtonDetails, gridBagConstraints);
267
268         jButtonInsertDb.setText("InsertDB");
269         jButtonInsertDb.addActionListener(new java.awt.event.ActionListener JavaDoc() {
270             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
271                 jButtonInsertDbActionPerformed(evt);
272             }
273         });
274
275         jPanel1.add(jButtonInsertDb, new java.awt.GridBagConstraints JavaDoc());
276
277         jButtonExportToJB.setText("Import from JasperBabylon");
278         jButtonExportToJB.addActionListener(new java.awt.event.ActionListener JavaDoc() {
279             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
280                 jButtonExportToJBjButtonDetailsActionPerformed2(evt);
281             }
282         });
283
284         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
285         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
286         gridBagConstraints.weightx = 1.0;
287         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 0, 4, 4);
288         jPanel1.add(jButtonExportToJB, gridBagConstraints);
289
290         jButtonOk.setText("Close");
291         jButtonOk.addActionListener(new java.awt.event.ActionListener JavaDoc() {
292             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
293                 jButtonOkActionPerformed(evt);
294             }
295         });
296
297         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
298         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
299         gridBagConstraints.weightx = 1.0;
300         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 4, 4);
301         jPanel1.add(jButtonOk, gridBagConstraints);
302
303         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
304         gridBagConstraints.gridx = 0;
305         gridBagConstraints.gridwidth = 2;
306         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
307         gridBagConstraints.weightx = 1.0;
308         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 0, 4, 0);
309         getContentPane().add(jPanel1, gridBagConstraints);
310
311         pack();
312     }// </editor-fold>//GEN-END:initComponents
313

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

316         QueryLocalesDialog qld = new QueryLocalesDialog(this, true);
317         qld.setVisible(true);
318         if (qld.getDialogResult() == JOptionPane.OK_OPTION)
319         {
320             Misc.saveTemporaryLocale(qld.getLocaleProperties(),"Ireport_" + qld.getLocale_code() + ".properties");
321             this.updateStatus();
322         }
323         
324     }//GEN-LAST:event_jButtonExportToJBjButtonDetailsActionPerformed2
325

326     private void jButtonInsertDbActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonInsertDbActionPerformed
327

328         IReportConnection c = (IReportConnection)MainFrame.getMainInstance().getProperties().get("DefaultConnection");
329         java.sql.Connection JavaDoc conn = null;
330         PreparedStatement JavaDoc stmt = null;
331         try {
332             if (c == null || !( c instanceof it.businesslogic.ireport.connection.JDBCConnection) ) {
333                 javax.swing.JOptionPane.showMessageDialog(this, "Not a JDBC connection","",javax.swing.JOptionPane.ERROR_MESSAGE);
334                 return;
335             }
336
337             conn = c.getConnection();
338             conn.createStatement().execute("delete from translations where app_id=1");
339             
340             stmt = conn.prepareStatement("insert into translations (app_id, language_id, s_key, s_value) values(1,?,?,?);");
341
342             // 1. Add default keys...
343
Properties JavaDoc props_default = new Properties JavaDoc();
344             try {
345                 props_default.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/Ireport.properties") );
346             } catch (Exception JavaDoc ex)
347             {
348                 ex.printStackTrace();
349             }
350             Enumeration JavaDoc enum_keys = props_default.keys();
351             while (enum_keys.hasMoreElements())
352             {
353                 String JavaDoc key = (""+enum_keys.nextElement()).trim();
354                 String JavaDoc val = props_default.getProperty(key);
355             
356                 stmt.setString(1,"");
357                 stmt.setString(2,key);
358                 stmt.setString(3,val);
359                 stmt.executeUpdate();
360             }
361             
362             List JavaDoc listOfLanguages = it.businesslogic.ireport.util.I18n.getListOfAvailLanguages();
363             
364             System.out.println("Languages: " + listOfLanguages.size());
365             for (int k=0; k<listOfLanguages.size(); ++k)
366             {
367                 Locale JavaDoc lang = (Locale JavaDoc)listOfLanguages.get(k);
368                 LocaleAdapter adapter = new LocaleAdapter(lang);
369                 String JavaDoc language = lang.getLanguage();
370                 String JavaDoc country = lang.getCountry();
371                 String JavaDoc variant = lang.getVariant();
372         
373                 String JavaDoc language_id = language;
374                 language_id += (country.length() > 0) ? "_" + country : "";
375                 language_id += (variant.length() > 0) ? "_" + variant : "";
376             
377                 String JavaDoc language_name = "Ireport" + ( (language.length() > 0) ? "_" : "") + language_id + ".properties";
378                 
379                 System.out.println("Working on " + language_name);
380                 
381                 // 2. Add keys for each langauge
382
Properties JavaDoc props2 = new Properties JavaDoc();
383                 try {
384                     props2.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/" + language_name ) );
385                 } catch (Exception JavaDoc ex){
386                     ex.printStackTrace();
387                 }
388
389                 enum_keys = props2.keys();
390                 while (enum_keys.hasMoreElements())
391                 {
392                     String JavaDoc key = (""+enum_keys.nextElement()).trim();
393                     String JavaDoc val = props2.getProperty(key);
394                     if (props_default.containsKey(key))
395                     {
396                         stmt.setString(1,language_id);
397                         stmt.setString(2,key);
398                         stmt.setString(3, val);
399                         stmt.executeUpdate();
400                     }
401                 }
402             }
403
404         } catch (Exception JavaDoc ex)
405         {
406             ex.printStackTrace();
407         }
408         finally
409         {
410             if (conn != null) try {conn.close();} catch (Exception JavaDoc ex) { }
411         }
412         
413         
414     }//GEN-LAST:event_jButtonInsertDbActionPerformed
415

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

418         this.setVisible(false);
419         this.dispose();
420         
421     }//GEN-LAST:event_jButtonOkActionPerformed
422

423     private void jTableLanguagesMouseClicked(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_jTableLanguagesMouseClicked
424
if (evt.getClickCount() == 2 &&
425             evt.getButton() == evt.BUTTON1)
426         {
427             jButtonDetailsActionPerformed(null);
428         }
429
430     }//GEN-LAST:event_jTableLanguagesMouseClicked
431

432     private void jButtonDetailsActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonDetailsActionPerformed
433

434         if (jTableLanguages.getSelectedRow() < 0) return;
435         int row = jTableLanguages.getSelectedRow();
436         
437         LocaleAdapter adapter = (LocaleAdapter)jTableLanguages.getValueAt(jTableLanguages.getSelectedRow(), 0);
438         
439         TranslationStatusDetailDialog tsdd = new TranslationStatusDetailDialog(this,true);
440         
441         Properties JavaDoc props_default = new Properties JavaDoc();
442         try {
443             props_default.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/Ireport.properties") );
444         } catch (Exception JavaDoc ex)
445         {
446             ex.printStackTrace();
447         }
448         
449         if (props_default != null)
450         {
451             tsdd.setLanguage( ""+ jTableLanguages.getValueAt(jTableLanguages.getSelectedRow(), 2),props_default);
452             tsdd.setVisible(true);
453         }
454         
455         
456     }//GEN-LAST:event_jButtonDetailsActionPerformed
457

458     /**
459      * @param args the command line arguments
460      */

461     public static void main(String JavaDoc args[]) {
462         java.awt.EventQueue.invokeLater(new Runnable JavaDoc() {
463             public void run() {
464                 new TranslationStatusDialog(new javax.swing.JFrame JavaDoc(), true).setVisible(true);
465             }
466         });
467     }
468     
469     // Variables declaration - do not modify//GEN-BEGIN:variables
470
private javax.swing.JButton JavaDoc jButtonDetails;
471     private javax.swing.JButton JavaDoc jButtonExportToJB;
472     private javax.swing.JButton JavaDoc jButtonInsertDb;
473     private javax.swing.JButton JavaDoc jButtonOk;
474     private javax.swing.JLabel JavaDoc jLabelLocalizableString;
475     private javax.swing.JPanel JavaDoc jPanel1;
476     private javax.swing.JScrollPane JavaDoc jScrollPane1;
477     private javax.swing.JTable JavaDoc jTableLanguages;
478     // End of variables declaration//GEN-END:variables
479

480     public void applyI18n(){
481                 // Start autogenerated code ----------------------
482
jButtonDetails.setText(I18n.getString("translationStatusDialog.buttonDetails","Details..."));
483                 jButtonOk.setText(I18n.getString("translationStatusDialog.buttonOk","Close"));
484                 jLabelLocalizableString.setText( I18n.getFormattedString("translationStatusDialog.buttonOk","Close", new Object JavaDoc[]{new Integer JavaDoc(0)} ));
485                 // End autogenerated code ----------------------
486

487                 jTableLanguages.getColumnModel().getColumn(0).setHeaderValue(I18n.getString("translationStatusDialog.table.Language","Language") );
488                 jTableLanguages.getColumnModel().getColumn(1).setHeaderValue(I18n.getString("translationStatusDialog.table.Status","Status") );
489                 jTableLanguages.getColumnModel().getColumn(2).setHeaderValue(I18n.getString("translationStatusDialog.table.File","File name") );
490     }
491 }
492
Popular Tags