1 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 ; 40 import java.io.File ; 41 import java.io.FileOutputStream ; 42 import java.io.OutputStreamWriter ; 43 import java.io.PrintWriter ; 44 import java.util.Iterator ; 45 import java.util.List ; 46 import java.util.Properties ; 47 import javax.swing.DefaultListSelectionModel ; 48 import javax.swing.JFileChooser ; 49 import javax.swing.JOptionPane ; 50 import javax.swing.SwingUtilities ; 51 import javax.swing.event.ListSelectionEvent ; 52 import javax.swing.event.ListSelectionListener ; 53 import javax.swing.table.DefaultTableModel ; 54 import javax.swing.table.TableColumn ; 55 import javax.swing.table.TableColumnModel ; 56 import it.businesslogic.ireport.util.I18n; 57 58 62 public class TranslationStatusDetailDialog extends javax.swing.JDialog implements JasperBabylonRunnerListener { 63 64 private java.util.Properties properties = null; 65 private String fileName = ""; 66 67 68 public TranslationStatusDetailDialog(java.awt.Frame parent, boolean modal) { 69 super(parent, modal); 70 initAll(); 71 } 72 73 75 public TranslationStatusDetailDialog(java.awt.Dialog parent, boolean modal) { 76 super(parent, modal); 77 initAll(); 78 } 79 80 private void initAll() 81 { 82 initComponents(); 83 84 TableColumnModel tcm = jTableLanguages.getColumnModel(); 85 TableColumn tc = tcm.getColumn(0); 86 tc.setCellRenderer(new MissingResourceCellRenderer()); 87 88 DefaultListSelectionModel dsm = new DefaultListSelectionModel (); 89 dsm.setSelectionMode( dsm.SINGLE_SELECTION ); 90 dsm.addListSelectionListener( new ListSelectionListener () { 91 public void valueChanged(ListSelectionEvent 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 escape = javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE, 0, false); 102 javax.swing.Action escapeAction = new javax.swing.AbstractAction () { 103 public void actionPerformed(java.awt.event.ActionEvent 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 this.getRootPane().setDefaultButton(this.jButtonOk); 114 } 115 116 119 public void setLanguage(String language, Properties defaultTranslations) 120 { 121 DefaultTableModel dtm = (DefaultTableModel )jTableLanguages.getModel(); 122 dtm.setRowCount(0); 123 properties = new Properties (); 124 this.fileName = language; 125 try { 126 properties.load( MainFrame.getMainInstance().getReportClassLoader().getResourceAsStream("it/businesslogic/ireport/locale/" + language ) ); 127 } catch (Exception ex){} 128 129 Iterator namesIterator = defaultTranslations.keySet().iterator(); 130 String [] names = new String [defaultTranslations.keySet().size()]; 131 for (int i=0; i<names.length; ++i) 132 { 133 names[i] = (String )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 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 []{rk, ((!rk.isMissing()) ? properties.getProperty(name) : ""), defaultTranslations.getProperty(name) }); 149 150 } 151 152 jTableLanguages.updateUI(); 153 } 154 155 156 161 private void initComponents() { 163 java.awt.GridBagConstraints gridBagConstraints; 164 165 jPanel2 = new javax.swing.JPanel (); 166 jButtonImportFromJB = new javax.swing.JButton (); 167 jButtonExportToJB = new javax.swing.JButton (); 168 jScrollPane1 = new javax.swing.JScrollPane (); 169 jTableLanguages = new javax.swing.JTable (); 170 jPanel1 = new javax.swing.JPanel (); 171 jButtonSave = new javax.swing.JButton (); 172 jButtonDetails = new javax.swing.JButton (); 173 jButtonOk = new javax.swing.JButton (); 174 175 getContentPane().setLayout(new java.awt.GridBagLayout ()); 176 177 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 178 jPanel2.setLayout(new java.awt.GridBagLayout ()); 179 180 jButtonImportFromJB.setText("Import from JasperBabylon"); 181 jButtonImportFromJB.setActionCommand("Import from JasperBabylon"); 182 jButtonImportFromJB.addActionListener(new java.awt.event.ActionListener () { 183 public void actionPerformed(java.awt.event.ActionEvent evt) { 184 jButtonExportToJBjButtonDetailsActionPerformed2(evt); 185 } 186 }); 187 188 gridBagConstraints = new java.awt.GridBagConstraints (); 189 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 190 gridBagConstraints.insets = new java.awt.Insets (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 () { 196 public void actionPerformed(java.awt.event.ActionEvent evt) { 197 jButtonDetailsActionPerformed2(evt); 198 } 199 }); 200 201 gridBagConstraints = new java.awt.GridBagConstraints (); 202 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 203 gridBagConstraints.weightx = 1.0; 204 gridBagConstraints.insets = new java.awt.Insets (4, 0, 4, 4); 205 jPanel2.add(jButtonExportToJB, gridBagConstraints); 206 207 gridBagConstraints = new java.awt.GridBagConstraints (); 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 ( 213 new Object [][] { 214 215 }, 216 new String [] { 217 "Key", "Translation", "Default" 218 } 219 ) { 220 Class [] types = new Class [] { 221 java.lang.String .class, java.lang.String .class, java.lang.String .class 222 }; 223 boolean[] canEdit = new boolean [] { 224 false, true, false 225 }; 226 227 public Class 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 (204, 204, 204)); 236 jTableLanguages.addMouseListener(new java.awt.event.MouseAdapter () { 237 public void mouseClicked(java.awt.event.MouseEvent evt) { 238 jTableLanguagesMouseClicked(evt); 239 } 240 }); 241 242 jScrollPane1.setViewportView(jTableLanguages); 243 244 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (4, 4, 4, 4); 251 getContentPane().add(jScrollPane1, gridBagConstraints); 252 253 jPanel1.setLayout(new java.awt.GridBagLayout ()); 254 255 jButtonSave.setText("Save"); 256 jButtonSave.addActionListener(new java.awt.event.ActionListener () { 257 public void actionPerformed(java.awt.event.ActionEvent evt) { 258 jButtonDetailsActionPerformed1(evt); 259 } 260 }); 261 262 gridBagConstraints = new java.awt.GridBagConstraints (); 263 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 264 gridBagConstraints.insets = new java.awt.Insets (4, 0, 4, 4); 265 jPanel1.add(jButtonSave, gridBagConstraints); 266 267 jButtonDetails.setLabel("Export to file"); 268 jButtonDetails.addActionListener(new java.awt.event.ActionListener () { 269 public void actionPerformed(java.awt.event.ActionEvent evt) { 270 jButtonDetailsActionPerformed(evt); 271 } 272 }); 273 274 gridBagConstraints = new java.awt.GridBagConstraints (); 275 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 276 gridBagConstraints.insets = new java.awt.Insets (4, 0, 4, 4); 277 jPanel1.add(jButtonDetails, gridBagConstraints); 278 279 jButtonOk.setText("Close"); 280 jButtonOk.addActionListener(new java.awt.event.ActionListener () { 281 public void actionPerformed(java.awt.event.ActionEvent evt) { 282 jButtonOkActionPerformed(evt); 283 } 284 }); 285 286 gridBagConstraints = new java.awt.GridBagConstraints (); 287 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 288 gridBagConstraints.weightx = 1.0; 289 gridBagConstraints.insets = new java.awt.Insets (4, 0, 4, 0); 290 jPanel1.add(jButtonOk, gridBagConstraints); 291 292 gridBagConstraints = new java.awt.GridBagConstraints (); 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 } 301 private void jButtonExportToJBjButtonDetailsActionPerformed2(java.awt.event.ActionEvent evt) { 303 304 setCursor(Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR)); 305 JasperBabylonRunner jbr = new JasperBabylonRunner(); 306 jbr.setRunnerListener(this); 307 String 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 } 320 private void jButtonDetailsActionPerformed2(java.awt.event.ActionEvent evt) { 322 if (JOptionPane.showConfirmDialog(this,"Are you sure you want send your translation on JasperBabylon?") == JOptionPane.YES_OPTION) 323 { 324 java.util.Properties p = new java.util.Properties (); 325 for (int i=0; i<jTableLanguages.getRowCount(); ++i) 326 { 327 ResourceKey rk = (ResourceKey)jTableLanguages.getValueAt(i,0); 328 String value = (String )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 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 } 351 private void jButtonDetailsActionPerformed1(java.awt.event.ActionEvent evt) { 353 java.util.Properties p = new java.util.Properties (); 354 for (int i=0; i<jTableLanguages.getRowCount(); ++i) 355 { 356 ResourceKey rk = (ResourceKey)jTableLanguages.getValueAt(i,0); 357 String value = (String )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 } 371 private void jButtonOkActionPerformed(java.awt.event.ActionEvent evt) { 373 this.setVisible(false); 374 this.dispose(); 375 } 377 private void jButtonDetailsActionPerformed(java.awt.event.ActionEvent evt) { try { 380 JFileChooser jfc = new JFileChooser (); 381 jfc.setSelectedFile(new File (getFileName())); 382 if (jfc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { 383 384 FileOutputStream fos = new FileOutputStream (jfc.getSelectedFile()); 385 this.getProperties().store(fos, ""); 386 PrintWriter pw = new PrintWriter (new OutputStreamWriter (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 ex) 401 { 402 ex.printStackTrace(); 403 } 404 405 } 407 private void jTableLanguagesMouseClicked(java.awt.event.MouseEvent evt) { 409 } 411 414 public static void main(String args[]) { 415 java.awt.EventQueue.invokeLater(new Runnable () { 416 public void run() { 417 new TranslationStatusDialog(new javax.swing.JFrame (), true).setVisible(true); 418 } 419 }); 420 } 421 422 public java.util.Properties getProperties() { 423 return properties; 424 } 425 426 public void setProperties(java.util.Properties properties) { 427 this.properties = properties; 428 } 429 430 public String getFileName() { 431 return fileName; 432 } 433 434 public void setFileName(String fileName) { 435 this.fileName = fileName; 436 } 437 438 private javax.swing.JButton jButtonDetails; 440 private javax.swing.JButton jButtonExportToJB; 441 private javax.swing.JButton jButtonImportFromJB; 442 private javax.swing.JButton jButtonOk; 443 private javax.swing.JButton jButtonSave; 444 private javax.swing.JPanel jPanel1; 445 private javax.swing.JPanel jPanel2; 446 private javax.swing.JScrollPane jScrollPane1; 447 private javax.swing.JTable jTableLanguages; 448 450 public void applyI18n(){ 451 jButtonDetails.setText(I18n.getString("translationStatusDetailDialog.buttonDetails","Export")); 453 jButtonOk.setText(I18n.getString("translationStatusDetailDialog.buttonOk","Close")); 454 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 list) { 463 } 464 465 public void getLocaleComplete(Properties 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 () { 480 public void run() { 481 setCursor(Cursor.getDefaultCursor()); 482 jTableLanguages.updateUI(); 483 } 484 }); 485 } catch (Exception ex){ 486 ex.printStackTrace(); 487 } 488 } 489 490 public void putLocaleComplete(String returnMessage) { 491 492 493 try { 494 final String msg = returnMessage; 495 SwingUtilities.invokeAndWait(new Runnable () { 496 public void run() { 497 setCursor(Cursor.getDefaultCursor()); 498 JOptionPane.showMessageDialog(TranslationStatusDetailDialog.this,msg); 499 } 500 }); 501 } catch (Exception ex) 502 {} 503 } 504 505 public void operationError(int operation, String message) { 506 try { 507 final String msg = message; 508 SwingUtilities.invokeAndWait(new Runnable () { 509 public void run() { 510 setCursor(Cursor.getDefaultCursor()); 511 JOptionPane.showMessageDialog(TranslationStatusDetailDialog.this,msg); 512 } 513 }); 514 } catch (Exception ex) 515 {} 516 } 517 } 518 | Popular Tags |