1 32 33 package it.businesslogic.ireport.gui.wizard; 34 35 import it.businesslogic.ireport.Band; 36 import it.businesslogic.ireport.Group; 37 import it.businesslogic.ireport.IReportConnection; 38 import it.businesslogic.ireport.IReportTemplate; 39 import it.businesslogic.ireport.JRField; 40 import it.businesslogic.ireport.Report; 41 import it.businesslogic.ireport.ReportElement; 42 import it.businesslogic.ireport.StaticTextReportElement; 43 import it.businesslogic.ireport.SubReportElement; 44 import it.businesslogic.ireport.TextFieldReportElement; 45 import it.businesslogic.ireport.TransformationType; 46 import it.businesslogic.ireport.connection.JDBCConnection; 47 import it.businesslogic.ireport.connection.JRHibernateConnection; 48 import it.businesslogic.ireport.connection.NullConnection; 49 import it.businesslogic.ireport.gui.ConnectionDialog; 50 import it.businesslogic.ireport.gui.MainFrame; 51 import it.businesslogic.ireport.gui.WizardDialog; 52 import it.businesslogic.ireport.util.Misc; 53 import java.io.File ; 54 import java.io.FileInputStream ; 55 import java.io.FilenameFilter ; 56 import java.io.InputStream ; 57 import java.util.Enumeration ; 58 import java.util.Vector ; 59 import javax.swing.DefaultListModel ; 60 import javax.swing.ImageIcon ; 61 import javax.swing.JFileChooser ; 62 import javax.swing.JOptionPane ; 63 import javax.swing.JPanel ; 64 import javax.swing.event.DocumentEvent ; 65 import javax.swing.event.DocumentListener ; 66 67 import org.apache.xerces.parsers.DOMParser; 68 import org.apache.xpath.XPathAPI; 69 import org.apache.xpath.objects.XBoolean; 70 import org.w3c.dom.DOMException ; 71 import org.w3c.dom.Document ; 72 import org.w3c.dom.Node ; 73 import org.w3c.dom.NodeList ; 74 import org.xml.sax.SAXException ; 75 import it.businesslogic.ireport.util.I18n; 76 77 81 public class SubreportWizardNewReport extends javax.swing.JPanel implements GenericWizard, Runnable { 82 83 private String reportFileName = null; 84 private SubReportElement subReportElement = null; 85 private BaseWizardPanel wizardPanel = null; 86 private javax.swing.JDialog wizardDialog = null; 87 88 Vector templates = null; 89 90 private Thread t = null; 91 92 93 public SubreportWizardNewReport() { 94 initComponents(); 95 applyI18n(); 96 jRSQLExpressionArea1.getDocument().addDocumentListener( new DocumentListener () { 97 public void changedUpdate(DocumentEvent e) { 98 if (wizardPanel != null) wizardPanel.updateButtons(); 99 } 100 public void insertUpdate(DocumentEvent e) { 101 if (wizardPanel != null) wizardPanel.updateButtons(); 102 } 103 public void removeUpdate(DocumentEvent e) { 104 if (wizardPanel != null) wizardPanel.updateButtons(); 105 } 106 }); 107 108 jTextFieldBean.getDocument().addDocumentListener( new DocumentListener () { 109 public void changedUpdate(DocumentEvent e) { 110 if (wizardPanel != null) wizardPanel.updateButtons(); 111 } 112 public void insertUpdate(DocumentEvent e) { 113 if (wizardPanel != null) wizardPanel.updateButtons(); 114 } 115 public void removeUpdate(DocumentEvent e) { 116 if (wizardPanel != null) wizardPanel.updateButtons(); 117 } 118 }); 119 120 jTextFieldReportFileName.getDocument().addDocumentListener( new DocumentListener () { 121 public void changedUpdate(DocumentEvent e) { 122 if (wizardPanel != null) wizardPanel.updateButtons(); 123 updateExpressionLabels(); 124 } 125 public void insertUpdate(DocumentEvent e) { 126 if (wizardPanel != null) wizardPanel.updateButtons(); 127 updateExpressionLabels(); 128 } 129 public void removeUpdate(DocumentEvent e) { 130 if (wizardPanel != null) wizardPanel.updateButtons(); 131 updateExpressionLabels(); 132 } 133 }); 134 135 Vector values = new Vector (); 137 138 Report report = MainFrame.getMainInstance().getActiveReportFrame().getReport(); 139 140 values.addAll( report.getFields()); 141 values.addAll( report.getVariables()); 142 values.addAll(report.getParameters()); 143 144 jList1.setModel( new DefaultListModel ()); 145 jList2.setModel( new DefaultListModel ()); 146 jList3.setModel( new DefaultListModel ()); 147 148 149 153 updateTemplatesList(); 154 155 String fileName = report.getFilename(); 156 File f = new File (fileName); 157 String baseFileName = f.getName(); 158 String pathFile = f.getParent(); 159 if (pathFile.length() > 0 && !pathFile.endsWith(File.separator)) 160 { 161 pathFile += File.separator; 162 } 163 164 if (baseFileName.indexOf(".") > 0) 165 baseFileName = baseFileName.substring(0, baseFileName.lastIndexOf(".")); 166 167 File f2 = null; 168 for (int i = 0; ; ++i) 169 { 170 fileName = baseFileName + "_subreport" + i + ".jrxml"; 171 172 f2 = new File (pathFile, fileName); 173 if (!f2.exists()) break; 174 } 175 176 jTextFieldReportFileName.setText(f2.getName()); 177 178 } 179 180 185 private void initComponents() { 187 java.awt.GridBagConstraints gridBagConstraints; 188 189 jPanel0 = new javax.swing.JPanel (); 190 jPanel61 = new javax.swing.JPanel (); 191 jLabel12 = new javax.swing.JLabel (); 192 jComboBoxConnection = new javax.swing.JComboBox (); 193 jButtonNewConnection = new javax.swing.JButton (); 194 jLabel2 = new javax.swing.JLabel (); 195 jPanel41 = new javax.swing.JPanel (); 196 jRSQLExpressionArea1 = new it.businesslogic.ireport.gui.JRTextExpressionArea(); 197 jTextFieldBean = new javax.swing.JTextField (); 198 jPanel5 = new javax.swing.JPanel (); 199 jButtonLoadQuery = new javax.swing.JButton (); 200 jButtonSaveQuery = new javax.swing.JButton (); 201 jPanel6 = new javax.swing.JPanel (); 202 buttonGroup1 = new javax.swing.ButtonGroup (); 203 jPanel1 = new javax.swing.JPanel (); 204 jScrollPane1 = new javax.swing.JScrollPane (); 205 jList1 = new javax.swing.JList (); 206 jScrollPane2 = new javax.swing.JScrollPane (); 207 jList2 = new javax.swing.JList (); 208 jPanelButtons = new javax.swing.JPanel (); 209 jButton1 = new javax.swing.JButton (); 210 jButton2 = new javax.swing.JButton (); 211 jButton3 = new javax.swing.JButton (); 212 jButton4 = new javax.swing.JButton (); 213 jPanel2 = new javax.swing.JPanel (); 214 jRadioButtonColumnarLayout = new javax.swing.JRadioButton (); 215 jRadioButtonTabularLayout = new javax.swing.JRadioButton (); 216 jPanel7 = new javax.swing.JPanel (); 217 jScrollPane3 = new javax.swing.JScrollPane (); 218 jList3 = new javax.swing.JList (); 219 jPanel4 = new javax.swing.JPanel (); 220 jLabelImage = new javax.swing.JLabel (); 221 jPanel3 = new javax.swing.JPanel (); 222 jLabel3 = new javax.swing.JLabel (); 223 jTextFieldReportFileName = new javax.swing.JTextField (); 224 jRadioButton4 = new javax.swing.JRadioButton (); 225 jLabel1 = new javax.swing.JLabel (); 226 jRadioButton5 = new javax.swing.JRadioButton (); 227 jLabel2e = new javax.swing.JLabel (); 228 jButton5 = new javax.swing.JButton (); 229 buttonGroup2 = new javax.swing.ButtonGroup (); 230 231 jPanel0.setLayout(new java.awt.GridBagLayout ()); 232 233 jPanel0.addPropertyChangeListener(new java.beans.PropertyChangeListener () { 234 public void propertyChange(java.beans.PropertyChangeEvent evt) { 235 jPanel0PropertyChange(evt); 236 } 237 }); 238 239 jPanel61.setMinimumSize(new java.awt.Dimension (10, 30)); 240 jPanel61.setPreferredSize(new java.awt.Dimension (10, 30)); 241 jPanel0.add(jPanel61, new java.awt.GridBagConstraints ()); 242 243 jLabel12.setText("Connection / Datasource"); 244 gridBagConstraints = new java.awt.GridBagConstraints (); 245 gridBagConstraints.gridx = 0; 246 gridBagConstraints.gridy = 4; 247 gridBagConstraints.gridwidth = 2; 248 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 249 gridBagConstraints.weightx = 1.0; 250 gridBagConstraints.insets = new java.awt.Insets (0, 20, 2, 0); 251 jPanel0.add(jLabel12, gridBagConstraints); 252 253 jComboBoxConnection.setModel(new javax.swing.DefaultComboBoxModel (new String [] { "Item 1", "Item 2", "Item 3", "Item 4" })); 254 jComboBoxConnection.setMinimumSize(new java.awt.Dimension (51, 22)); 255 jComboBoxConnection.addActionListener(new java.awt.event.ActionListener () { 256 public void actionPerformed(java.awt.event.ActionEvent evt) { 257 jComboBoxConnectionActionPerformed(evt); 258 } 259 }); 260 261 gridBagConstraints = new java.awt.GridBagConstraints (); 262 gridBagConstraints.gridx = 0; 263 gridBagConstraints.gridy = 5; 264 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 265 gridBagConstraints.weightx = 1.0; 266 gridBagConstraints.insets = new java.awt.Insets (0, 20, 0, 0); 267 jPanel0.add(jComboBoxConnection, gridBagConstraints); 268 269 jButtonNewConnection.setText("New"); 270 jButtonNewConnection.addActionListener(new java.awt.event.ActionListener () { 271 public void actionPerformed(java.awt.event.ActionEvent evt) { 272 jButtonNewConnectionActionPerformed(evt); 273 } 274 }); 275 276 gridBagConstraints = new java.awt.GridBagConstraints (); 277 gridBagConstraints.gridx = 1; 278 gridBagConstraints.gridy = 5; 279 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 20); 280 jPanel0.add(jButtonNewConnection, gridBagConstraints); 281 282 jLabel2.setText("Query"); 283 gridBagConstraints = new java.awt.GridBagConstraints (); 284 gridBagConstraints.gridx = 0; 285 gridBagConstraints.gridy = 8; 286 gridBagConstraints.gridwidth = 2; 287 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 288 gridBagConstraints.weightx = 1.0; 289 gridBagConstraints.insets = new java.awt.Insets (30, 20, 2, 0); 290 jPanel0.add(jLabel2, gridBagConstraints); 291 292 jPanel41.setLayout(new java.awt.GridBagLayout ()); 293 294 jPanel41.setMinimumSize(new java.awt.Dimension (391, 120)); 295 jPanel41.setPreferredSize(new java.awt.Dimension (391, 120)); 296 jRSQLExpressionArea1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); 297 jRSQLExpressionArea1.setElectricScroll(0); 298 jRSQLExpressionArea1.setMinimumSize(new java.awt.Dimension (300, 100)); 299 jRSQLExpressionArea1.setPreferredSize(new java.awt.Dimension (300, 100)); 300 gridBagConstraints = new java.awt.GridBagConstraints (); 301 gridBagConstraints.gridx = 0; 302 gridBagConstraints.gridy = 0; 303 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 304 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 305 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; 306 gridBagConstraints.weightx = 1.0; 307 gridBagConstraints.weighty = 1.0; 308 jPanel41.add(jRSQLExpressionArea1, gridBagConstraints); 309 310 jTextFieldBean.addActionListener(new java.awt.event.ActionListener () { 311 public void actionPerformed(java.awt.event.ActionEvent evt) { 312 jTextFieldBeanActionPerformed(evt); 313 } 314 }); 315 316 gridBagConstraints = new java.awt.GridBagConstraints (); 317 gridBagConstraints.gridx = 0; 318 gridBagConstraints.gridy = 0; 319 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 320 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 321 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; 322 gridBagConstraints.weightx = 1.0; 323 gridBagConstraints.weighty = 1.0; 324 jPanel41.add(jTextFieldBean, gridBagConstraints); 325 326 jPanel5.setLayout(new java.awt.GridBagLayout ()); 327 328 jButtonLoadQuery.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/folder_database.png"))); 329 jButtonLoadQuery.setText("Load query"); 330 jButtonLoadQuery.setMargin(new java.awt.Insets (2, 4, 2, 4)); 331 jButtonLoadQuery.addActionListener(new java.awt.event.ActionListener () { 332 public void actionPerformed(java.awt.event.ActionEvent evt) { 333 jButtonLoadQueryActionPerformed(evt); 334 } 335 }); 336 337 gridBagConstraints = new java.awt.GridBagConstraints (); 338 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 339 gridBagConstraints.weightx = 1.0; 340 jPanel5.add(jButtonLoadQuery, gridBagConstraints); 341 342 jButtonSaveQuery.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/database_save.png"))); 343 jButtonSaveQuery.setText("Save query"); 344 jButtonSaveQuery.setMargin(new java.awt.Insets (2, 4, 2, 4)); 345 jButtonSaveQuery.addActionListener(new java.awt.event.ActionListener () { 346 public void actionPerformed(java.awt.event.ActionEvent evt) { 347 jButtonSaveQueryActionPerformed(evt); 348 } 349 }); 350 351 gridBagConstraints = new java.awt.GridBagConstraints (); 352 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 0); 353 jPanel5.add(jButtonSaveQuery, gridBagConstraints); 354 355 gridBagConstraints = new java.awt.GridBagConstraints (); 356 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 357 gridBagConstraints.weightx = 1.0; 358 jPanel41.add(jPanel5, gridBagConstraints); 359 360 gridBagConstraints = new java.awt.GridBagConstraints (); 361 gridBagConstraints.gridy = 10; 362 gridBagConstraints.gridwidth = 2; 363 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 364 gridBagConstraints.weightx = 1.0; 365 gridBagConstraints.weighty = 1.0; 366 gridBagConstraints.insets = new java.awt.Insets (0, 20, 0, 20); 367 jPanel0.add(jPanel41, gridBagConstraints); 368 369 jPanel6.setLayout(new java.awt.GridBagLayout ()); 370 371 gridBagConstraints = new java.awt.GridBagConstraints (); 372 gridBagConstraints.gridx = 0; 373 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 374 gridBagConstraints.weightx = 1.0; 375 jPanel0.add(jPanel6, gridBagConstraints); 376 377 jPanel1.setLayout(new java.awt.GridBagLayout ()); 378 379 jScrollPane1.setViewportView(jList1); 380 381 gridBagConstraints = new java.awt.GridBagConstraints (); 382 gridBagConstraints.gridx = 0; 383 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 384 gridBagConstraints.weightx = 0.5; 385 gridBagConstraints.weighty = 1.0; 386 gridBagConstraints.insets = new java.awt.Insets (10, 10, 10, 5); 387 jPanel1.add(jScrollPane1, gridBagConstraints); 388 389 jScrollPane2.setViewportView(jList2); 390 391 gridBagConstraints = new java.awt.GridBagConstraints (); 392 gridBagConstraints.gridx = 2; 393 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 394 gridBagConstraints.weightx = 0.5; 395 gridBagConstraints.weighty = 1.0; 396 gridBagConstraints.insets = new java.awt.Insets (10, 5, 10, 10); 397 jPanel1.add(jScrollPane2, gridBagConstraints); 398 399 jPanelButtons.setLayout(new java.awt.GridBagLayout ()); 400 401 jButton1.setText(">"); 402 jButton1.setMargin(new java.awt.Insets (2, 0, 2, 0)); 403 jButton1.setMinimumSize(new java.awt.Dimension (28, 28)); 404 jButton1.setPreferredSize(new java.awt.Dimension (28, 28)); 405 jButton1.addActionListener(new java.awt.event.ActionListener () { 406 public void actionPerformed(java.awt.event.ActionEvent evt) { 407 jButton1ActionPerformed(evt); 408 } 409 }); 410 411 gridBagConstraints = new java.awt.GridBagConstraints (); 412 gridBagConstraints.gridx = 0; 413 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 414 gridBagConstraints.insets = new java.awt.Insets (8, 0, 8, 0); 415 jPanelButtons.add(jButton1, gridBagConstraints); 416 417 jButton2.setText(">>"); 418 jButton2.setMargin(new java.awt.Insets (2, 0, 2, 0)); 419 jButton2.setMinimumSize(new java.awt.Dimension (28, 28)); 420 jButton2.setPreferredSize(new java.awt.Dimension (28, 28)); 421 jButton2.addActionListener(new java.awt.event.ActionListener () { 422 public void actionPerformed(java.awt.event.ActionEvent evt) { 423 jButton2ActionPerformed(evt); 424 } 425 }); 426 427 gridBagConstraints = new java.awt.GridBagConstraints (); 428 gridBagConstraints.gridx = 0; 429 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 430 gridBagConstraints.insets = new java.awt.Insets (8, 0, 8, 0); 431 jPanelButtons.add(jButton2, gridBagConstraints); 432 433 jButton3.setText("<<"); 434 jButton3.setMargin(new java.awt.Insets (2, 0, 2, 0)); 435 jButton3.setMinimumSize(new java.awt.Dimension (28, 28)); 436 jButton3.setPreferredSize(new java.awt.Dimension (28, 28)); 437 jButton3.addActionListener(new java.awt.event.ActionListener () { 438 public void actionPerformed(java.awt.event.ActionEvent evt) { 439 jButton3ActionPerformed(evt); 440 } 441 }); 442 443 gridBagConstraints = new java.awt.GridBagConstraints (); 444 gridBagConstraints.gridx = 0; 445 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 446 gridBagConstraints.insets = new java.awt.Insets (8, 0, 8, 0); 447 jPanelButtons.add(jButton3, gridBagConstraints); 448 449 jButton4.setText("<"); 450 jButton4.setMargin(new java.awt.Insets (2, 0, 2, 0)); 451 jButton4.setMinimumSize(new java.awt.Dimension (28, 28)); 452 jButton4.setPreferredSize(new java.awt.Dimension (28, 28)); 453 jButton4.addActionListener(new java.awt.event.ActionListener () { 454 public void actionPerformed(java.awt.event.ActionEvent evt) { 455 jButton4ActionPerformed(evt); 456 } 457 }); 458 459 gridBagConstraints = new java.awt.GridBagConstraints (); 460 gridBagConstraints.gridx = 0; 461 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 462 gridBagConstraints.insets = new java.awt.Insets (8, 0, 8, 0); 463 jPanelButtons.add(jButton4, gridBagConstraints); 464 465 gridBagConstraints = new java.awt.GridBagConstraints (); 466 gridBagConstraints.gridx = 1; 467 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 468 gridBagConstraints.insets = new java.awt.Insets (10, 0, 10, 0); 469 jPanel1.add(jPanelButtons, gridBagConstraints); 470 471 jPanel2.setLayout(new java.awt.GridBagLayout ()); 472 473 buttonGroup1.add(jRadioButtonColumnarLayout); 474 jRadioButtonColumnarLayout.setSelected(true); 475 jRadioButtonColumnarLayout.setText("Columnar layout"); 476 jRadioButtonColumnarLayout.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); 477 jRadioButtonColumnarLayout.setMargin(new java.awt.Insets (0, 0, 0, 0)); 478 jRadioButtonColumnarLayout.addActionListener(new java.awt.event.ActionListener () { 479 public void actionPerformed(java.awt.event.ActionEvent evt) { 480 jRadioButtonColumnarLayoutActionPerformed(evt); 481 } 482 }); 483 484 gridBagConstraints = new java.awt.GridBagConstraints (); 485 gridBagConstraints.gridx = 0; 486 gridBagConstraints.gridy = 1; 487 gridBagConstraints.gridwidth = 2; 488 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 489 gridBagConstraints.weightx = 1.0; 490 gridBagConstraints.insets = new java.awt.Insets (30, 20, 0, 0); 491 jPanel2.add(jRadioButtonColumnarLayout, gridBagConstraints); 492 493 buttonGroup1.add(jRadioButtonTabularLayout); 494 jRadioButtonTabularLayout.setText("Tabular layout"); 495 jRadioButtonTabularLayout.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); 496 jRadioButtonTabularLayout.setMargin(new java.awt.Insets (0, 0, 0, 0)); 497 jRadioButtonTabularLayout.addActionListener(new java.awt.event.ActionListener () { 498 public void actionPerformed(java.awt.event.ActionEvent evt) { 499 jRadioButtonTabularLayoutActionPerformed(evt); 500 } 501 }); 502 503 gridBagConstraints = new java.awt.GridBagConstraints (); 504 gridBagConstraints.gridx = 0; 505 gridBagConstraints.gridy = 2; 506 gridBagConstraints.gridwidth = 2; 507 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 508 gridBagConstraints.weightx = 1.0; 509 gridBagConstraints.insets = new java.awt.Insets (4, 20, 0, 0); 510 jPanel2.add(jRadioButtonTabularLayout, gridBagConstraints); 511 512 jPanel7.setLayout(new java.awt.BorderLayout ()); 513 514 jPanel7.setMinimumSize(new java.awt.Dimension (150, 23)); 515 jPanel7.setPreferredSize(new java.awt.Dimension (150, 0)); 516 jScrollPane3.setMinimumSize(new java.awt.Dimension (100, 23)); 517 jList3.addListSelectionListener(new javax.swing.event.ListSelectionListener () { 518 public void valueChanged(javax.swing.event.ListSelectionEvent evt) { 519 jList3ValueChanged(evt); 520 } 521 }); 522 523 jScrollPane3.setViewportView(jList3); 524 525 jPanel7.add(jScrollPane3, java.awt.BorderLayout.CENTER); 526 527 gridBagConstraints = new java.awt.GridBagConstraints (); 528 gridBagConstraints.gridx = 0; 529 gridBagConstraints.gridy = 5; 530 gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; 531 gridBagConstraints.weighty = 1.0; 532 gridBagConstraints.insets = new java.awt.Insets (8, 20, 10, 0); 533 jPanel2.add(jPanel7, gridBagConstraints); 534 535 jPanel4.setLayout(new java.awt.GridBagLayout ()); 536 537 jLabelImage.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); 538 jLabelImage.setText(" "); 539 jLabelImage.setVerticalAlignment(javax.swing.SwingConstants.TOP); 540 jLabelImage.setOpaque(true); 541 gridBagConstraints = new java.awt.GridBagConstraints (); 542 gridBagConstraints.gridx = 0; 543 gridBagConstraints.gridy = 0; 544 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 545 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 546 gridBagConstraints.weightx = 1.0; 547 gridBagConstraints.weighty = 1.0; 548 jPanel4.add(jLabelImage, gridBagConstraints); 549 550 gridBagConstraints = new java.awt.GridBagConstraints (); 551 gridBagConstraints.gridx = 1; 552 gridBagConstraints.gridy = 5; 553 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 554 gridBagConstraints.weightx = 1.0; 555 gridBagConstraints.weighty = 1.0; 556 gridBagConstraints.insets = new java.awt.Insets (8, 10, 10, 10); 557 jPanel2.add(jPanel4, gridBagConstraints); 558 559 jPanel3.setLayout(new java.awt.GridBagLayout ()); 560 561 jLabel3.setText("Save the subreport as..."); 562 gridBagConstraints = new java.awt.GridBagConstraints (); 563 gridBagConstraints.gridx = 0; 564 gridBagConstraints.gridwidth = 2; 565 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 566 gridBagConstraints.insets = new java.awt.Insets (2, 20, 2, 0); 567 jPanel3.add(jLabel3, gridBagConstraints); 568 569 gridBagConstraints = new java.awt.GridBagConstraints (); 570 gridBagConstraints.gridx = 0; 571 gridBagConstraints.gridy = 2; 572 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 573 gridBagConstraints.weightx = 1.0; 574 gridBagConstraints.insets = new java.awt.Insets (0, 20, 0, 0); 575 jPanel3.add(jTextFieldReportFileName, gridBagConstraints); 576 577 buttonGroup2.add(jRadioButton4); 578 jRadioButton4.setSelected(true); 579 jRadioButton4.setText("Store the directory name in a parameter"); 580 jRadioButton4.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); 581 jRadioButton4.setFocusPainted(false); 582 jRadioButton4.setMargin(new java.awt.Insets (0, 0, 0, 0)); 583 jRadioButton4.setMinimumSize(new java.awt.Dimension (115, 20)); 584 jRadioButton4.setPreferredSize(new java.awt.Dimension (115, 20)); 585 jRadioButton4.addItemListener(new java.awt.event.ItemListener () { 586 public void itemStateChanged(java.awt.event.ItemEvent evt) { 587 jRadioButton1ItemStateChanged2(evt); 588 } 589 }); 590 jRadioButton4.addActionListener(new java.awt.event.ActionListener () { 591 public void actionPerformed(java.awt.event.ActionEvent evt) { 592 jRadioButton1ActionPerformed2(evt); 593 } 594 }); 595 596 gridBagConstraints = new java.awt.GridBagConstraints (); 597 gridBagConstraints.gridx = 0; 598 gridBagConstraints.gridwidth = 2; 599 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 600 gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH; 601 gridBagConstraints.weightx = 1.0; 602 gridBagConstraints.insets = new java.awt.Insets (40, 20, 0, 0); 603 jPanel3.add(jRadioButton4, gridBagConstraints); 604 605 jLabel1.setText("$P{SUBREPORT_DIR} + /name.jasper"); 606 gridBagConstraints = new java.awt.GridBagConstraints (); 607 gridBagConstraints.gridx = 0; 608 gridBagConstraints.gridwidth = 2; 609 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 610 gridBagConstraints.insets = new java.awt.Insets (2, 40, 0, 0); 611 jPanel3.add(jLabel1, gridBagConstraints); 612 613 buttonGroup2.add(jRadioButton5); 614 jRadioButton5.setText("Use a static absolute path reference"); 615 jRadioButton5.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); 616 jRadioButton5.setFocusPainted(false); 617 jRadioButton5.setMargin(new java.awt.Insets (0, 0, 0, 0)); 618 jRadioButton5.setMinimumSize(new java.awt.Dimension (115, 20)); 619 jRadioButton5.setPreferredSize(new java.awt.Dimension (115, 20)); 620 jRadioButton5.addItemListener(new java.awt.event.ItemListener () { 621 public void itemStateChanged(java.awt.event.ItemEvent evt) { 622 jRadioButton2jRadioButton1ItemStateChanged1(evt); 623 } 624 }); 625 jRadioButton5.addActionListener(new java.awt.event.ActionListener () { 626 public void actionPerformed(java.awt.event.ActionEvent evt) { 627 jRadioButton2jRadioButton1ActionPerformed1(evt); 628 } 629 }); 630 631 gridBagConstraints = new java.awt.GridBagConstraints (); 632 gridBagConstraints.gridx = 0; 633 gridBagConstraints.gridwidth = 2; 634 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 635 gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH; 636 gridBagConstraints.weightx = 1.0; 637 gridBagConstraints.insets = new java.awt.Insets (20, 20, 0, 0); 638 jPanel3.add(jRadioButton5, gridBagConstraints); 639 640 jLabel2e.setText("path reference"); 641 gridBagConstraints = new java.awt.GridBagConstraints (); 642 gridBagConstraints.gridx = 0; 643 gridBagConstraints.gridwidth = 2; 644 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 645 gridBagConstraints.insets = new java.awt.Insets (2, 40, 0, 0); 646 jPanel3.add(jLabel2e, gridBagConstraints); 647 648 jButton5.setText("Browse..."); 649 jButton5.addActionListener(new java.awt.event.ActionListener () { 650 public void actionPerformed(java.awt.event.ActionEvent evt) { 651 jButton5ActionPerformed(evt); 652 } 653 }); 654 655 gridBagConstraints = new java.awt.GridBagConstraints (); 656 gridBagConstraints.gridy = 2; 657 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 10); 658 jPanel3.add(jButton5, gridBagConstraints); 659 660 setLayout(new java.awt.BorderLayout ()); 661 662 } 664 private void jButtonSaveQueryActionPerformed(java.awt.event.ActionEvent evt) { Misc.saveSQLQuery( jRSQLExpressionArea1.getText(), this ); 666 } 668 private void jButtonLoadQueryActionPerformed(java.awt.event.ActionEvent evt) { String query = Misc.loadSQLQuery(this); 670 671 if (query != null) { 672 jRSQLExpressionArea1.setText(query); 673 } 674 } 676 private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { 678 679 JFileChooser jfc = new JFileChooser (); 681 File original_file = null; 682 try { 683 original_file = new File (MainFrame.getMainInstance().getActiveReportFrame().getReport().getFilename()); 684 if (original_file!= null && original_file.getParentFile() != null) 685 { 686 jfc.setCurrentDirectory( original_file.getParentFile()); 687 } 688 } catch (Exception ex) 689 { 690 691 } 692 693 jfc.setFileFilter( new javax.swing.filechooser.FileFilter () { 694 public boolean accept(java.io.File file) { 695 String filename = file.getName().toLowerCase(); 696 return (filename.endsWith(".jrxml") || file.isDirectory()) ; 697 } 698 public String getDescription() { 699 return "JasperReports Report file *jrxml"; 700 } 701 }); 702 703 if (jfc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { 704 705 if (original_file != null && original_file.equals(jfc.getSelectedFile())) 706 { 707 JOptionPane.showMessageDialog(this, 708 I18n.getString("messages.subreportWizardNewReport.duplicatedFile", 709 "Master and report files can not be the same file!") ); 710 return; 711 } 712 713 String s = jfc.getSelectedFile().getPath(); 714 if (original_file != null && original_file.getParentFile() != null) 715 { 716 if (original_file.getParentFile().equals( jfc.getSelectedFile().getParentFile())) 717 { 718 s = jfc.getSelectedFile().getName(); 719 } 720 } 721 if (!s.toLowerCase().endsWith(".jrxml")) 722 { 723 if (!s.endsWith(".")) s += "."; 724 s += "jrmxl"; 725 } 726 jTextFieldReportFileName.setText( s ); 727 } 728 if (wizardPanel != null) wizardPanel.updateButtons(); 729 730 } 732 private void jList3ValueChanged(javax.swing.event.ListSelectionEvent evt) { if (jList3.getSelectedIndex() >= 0) { 734 IReportTemplate tf = (IReportTemplate)jList3.getSelectedValue(); 735 737 this.jLabelImage.setIcon( tf.getIcon() ); 738 if (tf.getIcon() == null) 739 { 740 this.jLabelImage.setText(" "); 741 } 742 else 743 { 744 this.jLabelImage.setText(""); 745 } 746 747 this.jLabelImage.updateUI(); 748 if (wizardPanel != null) wizardPanel.updateButtons(); 749 } 750 } 752 private void jRadioButtonTabularLayoutActionPerformed(java.awt.event.ActionEvent evt) { updateTemplatesList(); 754 } 756 private void jRadioButtonColumnarLayoutActionPerformed(java.awt.event.ActionEvent evt) { updateTemplatesList(); 758 } 760 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { int index = jList2.getSelectedIndex(); 762 if (index <0) return; 763 764 Object [] objs = jList2.getSelectedValues(); 765 for (int i=0; i< objs.length; ++i) { 766 Object obj = objs[i]; 767 ((javax.swing.DefaultListModel )jList1.getModel()).addElement(obj); 768 ((javax.swing.DefaultListModel )jList2.getModel()).removeElement(obj); 769 } 770 if (jList1.getModel().getSize()>0) jList1.setSelectedIndex(0); 771 wizardPanel.updateButtons(); 772 } 774 private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { javax.swing.DefaultListModel list2 = (javax.swing.DefaultListModel )jList2.getModel(); 776 javax.swing.DefaultListModel list1 = (javax.swing.DefaultListModel )jList1.getModel(); 777 778 for (int i=0; i< list2.getSize(); ++i) { 779 list1.addElement(list2.getElementAt(i)); 780 } 781 list2.removeAllElements(); 782 if (list1.size()>0) jList1.setSelectedIndex(0); 783 wizardPanel.updateButtons(); 784 } 786 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { javax.swing.DefaultListModel list1 = (javax.swing.DefaultListModel )jList1.getModel(); 788 javax.swing.DefaultListModel list2 = (javax.swing.DefaultListModel )jList2.getModel(); 789 790 for (int i=0; i< list1.getSize(); ++i) { 791 list2.addElement(list1.getElementAt(i)); 792 } 793 list1.removeAllElements(); 794 wizardPanel.updateButtons(); 795 } 797 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { int index = jList1.getSelectedIndex(); 799 if (index <0) return; 800 801 Object [] objs = jList1.getSelectedValues(); 802 for (int i=0; i< objs.length; ++i) { 803 Object obj = objs[i]; 804 ((javax.swing.DefaultListModel )jList2.getModel()).addElement(obj); 805 ((javax.swing.DefaultListModel )jList1.getModel()).removeElement(obj); 806 } 807 if (jList1.getModel().getSize()>0) jList1.setSelectedIndex(0); 808 wizardPanel.updateButtons(); 809 } 811 private void jTextFieldBeanActionPerformed(java.awt.event.ActionEvent evt) { jComboBoxConnectionActionPerformed(null); 813 } 815 private void jButtonNewConnectionActionPerformed(java.awt.event.ActionEvent evt) { ConnectionDialog cd = new ConnectionDialog(wizardDialog,true); 817 cd.setVisible(true); 818 819 IReportConnection con = null; 820 if (cd.getDialogResult() == JOptionPane.OK_OPTION) { 821 con = cd.getIReportConnection(); 822 MainFrame.getMainInstance().getConnections().addElement(con); 823 824 if (MainFrame.getMainInstance().getConnections().size() == 1) { 825 MainFrame.getMainInstance().setActiveConnection(con); 826 } else { 827 MainFrame.getMainInstance().saveiReportConfiguration(); 828 } 829 830 this.updateConnections(); 831 this.jComboBoxConnection.setSelectedItem(con); 832 } 833 } 835 public void updateConnections() { 836 Object ircDefault = MainFrame.getMainInstance().getProperties().get("DefaultConnection"); 837 jComboBoxConnection.removeAllItems(); 838 839 jComboBoxConnection.addItem(new NullConnection()); 840 841 Enumeration e = MainFrame.getMainInstance().getConnections().elements(); 842 while (e.hasMoreElements()) { 843 IReportConnection irc = (IReportConnection)e.nextElement(); 844 jComboBoxConnection.addItem(irc); 845 } 846 847 if (ircDefault != null) { 848 jComboBoxConnection.setSelectedItem(ircDefault); 849 } 850 } 851 852 private void jComboBoxConnectionActionPerformed(java.awt.event.ActionEvent evt) { boolean canNext = false; 854 if (jComboBoxConnection.getSelectedItem() != null) { 855 IReportConnection irc = (IReportConnection)jComboBoxConnection.getSelectedItem(); 856 857 if (irc.isJDBCConnection()) { 858 jLabel2.setText("SQL query"); 859 jTextFieldBean.setVisible(false); 860 jRSQLExpressionArea1.setVisible(true); 861 if (jRSQLExpressionArea1.getText().length() > 0) canNext = true; 862 } else if (irc instanceof JRHibernateConnection) { 863 jLabel2.setText("HQL query"); 864 jTextFieldBean.setVisible(false); 865 jRSQLExpressionArea1.setVisible(true); 866 if (jRSQLExpressionArea1.getText().length() > 0) canNext = true; 867 } else if (irc instanceof it.businesslogic.ireport.connection.JRDataSourceProviderConnection) { 868 jLabel2.setText(" "); 869 jTextFieldBean.setVisible(false); 870 jRSQLExpressionArea1.setVisible(false); 871 canNext = true; 872 } else if (irc instanceof it.businesslogic.ireport.connection.JavaBeanDataSourceConnection) { 873 jLabel2.setText("JavaBean class"); 874 jRSQLExpressionArea1.setVisible(false); 875 jTextFieldBean.setVisible(true); 876 if (jTextFieldBean.getText().length() > 0) canNext = true; 877 } else if (irc instanceof it.businesslogic.ireport.connection.JRCSVDataSourceConnection) { 878 jLabel2.setText(" "); 879 jTextFieldBean.setVisible(false); 880 jRSQLExpressionArea1.setVisible(false); 881 canNext = true; 882 } else if (irc instanceof it.businesslogic.ireport.connection.NullConnection) { 883 jLabel2.setText(" "); 884 jTextFieldBean.setVisible(false); 885 jRSQLExpressionArea1.setVisible(false); 886 canNext = true; 887 } else { 888 jLabel2.setText("You can't use the wizard with this kind of datasource"); 889 jRSQLExpressionArea1.setVisible(false); 890 jTextFieldBean.setVisible(false); 891 canNext = false; 892 } 893 } else { 894 jLabel2.setText("Please create a new connection / datasource."); 895 jRSQLExpressionArea1.setVisible(false); 896 jTextFieldBean.setVisible(false); 897 } 898 jPanel5.setVisible(jRSQLExpressionArea1.isVisible()); 899 if (wizardPanel != null) wizardPanel.updateButtons(); 900 } 902 private void jRadioButton2jRadioButton1ActionPerformed1(java.awt.event.ActionEvent evt) { } 906 private void jRadioButton2jRadioButton1ItemStateChanged1(java.awt.event.ItemEvent evt) { } 910 private void jRadioButton1ActionPerformed2(java.awt.event.ActionEvent evt) { } 914 private void jRadioButton1ItemStateChanged2(java.awt.event.ItemEvent evt) { } 918 private void jPanel0PropertyChange(java.beans.PropertyChangeEvent evt) { 920 921 922 } 924 925 private javax.swing.ButtonGroup buttonGroup1; 927 private javax.swing.ButtonGroup buttonGroup2; 928 private javax.swing.JButton jButton1; 929 private javax.swing.JButton jButton2; 930 private javax.swing.JButton jButton3; 931 private javax.swing.JButton jButton4; 932 private javax.swing.JButton jButton5; 933 private javax.swing.JButton jButtonLoadQuery; 934 private javax.swing.JButton jButtonNewConnection; 935 private javax.swing.JButton jButtonSaveQuery; 936 private javax.swing.JComboBox jComboBoxConnection; 937 private javax.swing.JLabel jLabel1; 938 private javax.swing.JLabel jLabel12; 939 private javax.swing.JLabel jLabel2; 940 private javax.swing.JLabel jLabel2e; 941 private javax.swing.JLabel jLabel3; 942 private javax.swing.JLabel jLabelImage; 943 private javax.swing.JList jList1; 944 private javax.swing.JList jList2; 945 private javax.swing.JList jList3; 946 private javax.swing.JPanel jPanel0; 947 private javax.swing.JPanel jPanel1; 948 private javax.swing.JPanel jPanel2; 949 private javax.swing.JPanel jPanel3; 950 private javax.swing.JPanel jPanel4; 951 private javax.swing.JPanel jPanel41; 952 private javax.swing.JPanel jPanel5; 953 private javax.swing.JPanel jPanel6; 954 private javax.swing.JPanel jPanel61; 955 private javax.swing.JPanel jPanel7; 956 private javax.swing.JPanel jPanelButtons; 957 private it.businesslogic.ireport.gui.JRTextExpressionArea jRSQLExpressionArea1; 958 private javax.swing.JRadioButton jRadioButton4; 959 private javax.swing.JRadioButton jRadioButton5; 960 private javax.swing.JRadioButton jRadioButtonColumnarLayout; 961 private javax.swing.JRadioButton jRadioButtonTabularLayout; 962 private javax.swing.JScrollPane jScrollPane1; 963 private javax.swing.JScrollPane jScrollPane2; 964 private javax.swing.JScrollPane jScrollPane3; 965 private javax.swing.JTextField jTextFieldBean; 966 private javax.swing.JTextField jTextFieldReportFileName; 967 969 970 public String [] getStepsNames() { 971 972 String [] names = new String [4]; 973 names[0] = "Query/datasource"; 974 names[1] = "Fields"; 975 names[2] = "Template"; 976 names[3] = "Expression"; 977 979 return names; 980 } 981 982 public String getStepDescription(int step) { 983 984 if (step==0) return "How fill the subreport"; 985 if (step==1) return "Select the subreport fields"; 986 if (step==2) return "Choose a template"; 987 if (step==3) return "Subreport expession"; 988 989 return ""; 990 } 991 992 public void initWizard() { 993 updateConnections(); 994 } 995 996 public void finish(int currentStep) { 997 if (currentStep < 0) 998 { 999 if (t != null && t.isAlive()) { 1000 t.interrupt(); 1001 return; 1002 } 1003 } 1004 if (currentStep >= 0) 1005 { 1006 try { 1007 Report finalReport = createReport(((IReportTemplate)jList3.getSelectedValue()).getXmlFile(), jRadioButtonColumnarLayout.isSelected() ? 1 : 0); 1008 1009 if (jRadioButton4.isSelected()) 1010 { 1011 Report report = MainFrame.getMainInstance().getActiveReportFrame().getReport(); 1012 Vector v = report.getParameters(); 1013 boolean found = false; 1014 for (int i=0; i<report.getParameters().size(); ++i) 1015 { 1016 it.businesslogic.ireport.JRParameter param = (it.businesslogic.ireport.JRParameter)report.getParameters().elementAt(i); 1017 1018 if (param.getName().equals("SUBREPORT_DIR")) 1019 { 1020 found = true; 1021 1022 break; 1023 } 1024 } 1025 if (!found) 1026 { 1027 it.businesslogic.ireport.JRParameter param = new it.businesslogic.ireport.JRParameter("SUBREPORT_DIR","java.lang.String"); 1028 1030 String s = MainFrame.getMainInstance().getTranslatedCompileDirectory(); 1031 1032 if (s.length() > 0 && !s.endsWith(File.separator)) s += File.separator; 1033 1034 s = Misc.string_replace("\\\\","\\",s); 1035 s = "\"" + s + "\""; 1036 1037 1053 param.setDefaultValueExpression(s); 1054 report.addParameter( param ); 1055 } 1056 getSubReportElement().setSubreportExpression(jLabel1.getText()); 1057 } 1058 else 1059 { 1060 getSubReportElement().setSubreportExpression(jLabel2e.getText()); 1061 } 1062 getSubReportElement().setSubreportExpressionClass("java.lang.String"); 1063 1064 MainFrame.getMainInstance().openNewReportWindow(finalReport); 1065 1066 } catch (Exception ex) 1067 { 1068 javax.swing.JOptionPane.showMessageDialog(getParent(),ex.getMessage()+"", 1069 I18n.getString("message.title.error","Error"), javax.swing.JOptionPane.ERROR_MESSAGE); 1070 ex.printStackTrace(); 1071 } 1072 } 1073 1074 this.getWizardDialog().setVisible(false); 1075 this.getWizardDialog().dispose(); 1076 } 1077 1078 public boolean nextStep(int nextStep) { 1079 1080 if (nextStep == 0) { 1082 1083 } 1084 else if (nextStep == 1) 1085 { 1086 wizardPanel.getJButtonNext().setEnabled(false); 1088 wizardPanel.getJButtonPrev().setEnabled(false); 1089 wizardPanel.getJButtonFinish().setEnabled(false); 1090 t = new Thread (this); 1091 t.start(); 1092 return false; 1093 } 1094 else if (nextStep == 2) 1095 { 1096 1097 updateExpressionLabels(); 1098 } 1099 return true; 1100 } 1101 1102 public boolean previousStep(int previousStep) { 1103 return true; 1104 } 1105 1106 public boolean canFinish(int currentStep) { 1107 1108 if (currentStep<3) return false; 1109 if (jTextFieldReportFileName.getText().trim().length() > 0) 1110 { 1111 String s = jTextFieldReportFileName.getText().trim(); 1112 String s2 = MainFrame.getMainInstance().getActiveReportFrame().getReport().getFilename(); 1113 if (s.indexOf(File.separator) >=0) 1114 { 1115 return (!s.equals(s2)); 1116 } 1117 else 1118 { 1119 File f = new File (s2); 1120 return (!f.getName().equals(s)); 1121 } 1122 } 1123 return false; 1124 } 1125 1126 public boolean canNext(int currentStep) { 1127 1128 if (currentStep == 0) 1129 { 1130 if (jComboBoxConnection.getSelectedItem() != null) { 1131 IReportConnection irc = (IReportConnection)jComboBoxConnection.getSelectedItem(); 1132 1133 if (irc.isJDBCConnection()) { 1134 if (jRSQLExpressionArea1.getText().length() > 0) return true; 1135 } else if (irc instanceof JRHibernateConnection) { 1136 jLabel2.setText("HQL query"); 1137 jTextFieldBean.setVisible(false); 1138 jRSQLExpressionArea1.setVisible(true); 1139 if (jRSQLExpressionArea1.getText().length() > 0) return true; 1140 } else if (irc instanceof it.businesslogic.ireport.connection.JRDataSourceProviderConnection) { 1141 return true; 1142 } else if (irc instanceof it.businesslogic.ireport.connection.JavaBeanDataSourceConnection) { 1143 if (jTextFieldBean.getText().length() > 0) return true; 1144 } else if (irc instanceof it.businesslogic.ireport.connection.JRCSVDataSourceConnection) { 1145 return true; 1146 } else if (irc instanceof it.businesslogic.ireport.connection.NullConnection) { 1147 return true; 1148 } else { 1149 return false; 1150 } 1151 } 1152 return false; 1153 } 1154 else if (currentStep == 1) 1155 { 1156 IReportConnection irc = (IReportConnection)jComboBoxConnection.getSelectedItem(); 1157 if (irc instanceof it.businesslogic.ireport.connection.NullConnection) return true; 1158 return jList2.getModel().getSize() > 0; 1159 } 1160 else if (currentStep == 2) 1161 { 1162 return jList3.getSelectedIndex() >= 0; 1163 } 1164 return false; 1165 } 1166 1167 public boolean canPrevious(int currentStep) { 1168 return (currentStep > 0); 1169 } 1170 1171 public JPanel getStepPanel(int step) { 1172 1173 if (step == 0) return jPanel0; 1174 if (step == 1) return jPanel1; 1175 if (step == 2) return jPanel2; 1176 if (step == 3) return jPanel3; 1177 return null; 1179 } 1180 1181 public String getReportFileName() { 1182 return reportFileName; 1183 } 1184 1185 public void setReportFileName(String reportFileName) { 1186 this.reportFileName = reportFileName; 1187 } 1188 1189 public SubReportElement getSubReportElement() { 1190 return subReportElement; 1191 } 1192 1193 public void setSubReportElement(SubReportElement subReportElement) { 1194 this.subReportElement = subReportElement; 1195 } 1196 1197 public BaseWizardPanel getWizardPanel() { 1198 return wizardPanel; 1199 } 1200 1201 public void setWizardPanel(BaseWizardPanel wizardPanel) { 1202 this.wizardPanel = wizardPanel; 1203 } 1204 1205 public javax.swing.JDialog getWizardDialog() { 1206 return wizardDialog; 1207 } 1208 1209 public void setWizardDialog(javax.swing.JDialog wizardDialog) { 1210 this.wizardDialog = wizardDialog; 1211 } 1212 1213 1214 1225 public void run() { 1226 1227 Thread.currentThread().setContextClassLoader( MainFrame.getMainInstance().getReportClassLoader() ); 1228 try { 1230 IReportConnection irc = (IReportConnection)jComboBoxConnection.getSelectedItem(); 1231 1232 DefaultListModel dlm1 = (DefaultListModel )jList1.getModel(); 1233 dlm1.removeAllElements(); 1234 1235 DefaultListModel dlm2 = (DefaultListModel )jList2.getModel(); 1236 dlm2.removeAllElements(); 1237 java.util.List fields = WizardDialog.readFields(irc,jRSQLExpressionArea1.getText(), jTextFieldBean.getText()); 1239 1240 if (fields == null) 1241 { 1242 cancelElaborationStep1(); 1243 return; 1244 } 1245 1246 for (int i=0; i <fields.size(); ++i) { 1247 it.businesslogic.ireport.JRField field = (JRField)fields.get(i); 1248 boolean found = false; 1250 for (int k=0; i< dlm1.size(); ++k) { 1251 it.businesslogic.ireport.JRField f = (it.businesslogic.ireport.JRField)dlm1.getElementAt(k); 1252 if (f.getName().equalsIgnoreCase(field.getName())) { 1253 found = true; 1254 break; 1255 } 1256 } 1257 if (!found) { 1258 dlm1.addElement(field); 1260 } 1261 if (jList1.getModel().getSize()>0) jList1.setSelectedIndex(0); 1262 } 1263 1264 wizardPanel.goStep(1); 1265 1266 } catch (Exception ex) { 1267 java.io.StringWriter sw = new java.io.StringWriter (); 1268 ex.printStackTrace(new java.io.PrintWriter ( sw )); 1269 javax.swing.JOptionPane.showMessageDialog(getParent(),sw.getBuffer()+"", 1270 I18n.getString("message.title.error","Error"), javax.swing.JOptionPane.ERROR_MESSAGE); 1271 cancelElaborationStep1(); 1272 return; 1273 } 1274 1275 } 1276 1277 public void cancelElaborationStep1() { 1278 wizardPanel.updateButtons(); 1279 } 1280 1281 1282 public void updateTemplatesList() { 1283 if (templates == null) 1284 { 1285 loadTemplateFiles(); 1286 if (templates == null) return; 1287 } 1288 1289 ((javax.swing.DefaultListModel )jList3.getModel()).removeAllElements(); 1290 1291 for (int i=0; i< templates.size(); ++i) { 1292 IReportTemplate itemplate = (IReportTemplate)templates.elementAt(i); 1293 1294 if (jRadioButtonTabularLayout.isSelected() && itemplate.getType() != IReportTemplate.TABULAR) continue; 1295 if (jRadioButtonColumnarLayout.isSelected() && itemplate.getType() != IReportTemplate.COLUMNAR) continue; 1296 1304 ((javax.swing.DefaultListModel )jList3.getModel()).addElement(itemplate); 1305 } 1306 if ( ((javax.swing.DefaultListModel )jList3.getModel()).getSize()>0) 1307 jList3.setSelectedIndex(0); 1308 jList3.updateUI(); 1309 } 1310 1311 1312 public void loadTemplateFiles() 1313 { 1314 templates = new Vector (); 1315 String templates_dir = MainFrame.IREPORT_HOME_DIR; templates_dir += File.separator + "templates"; 1317 try { 1320 File f = new File (templates_dir); 1321 File [] templates_files = null; 1322 if (f.exists() && f.isDirectory()) { 1323 templates_files = f.listFiles(new FilenameFilter () { 1324 public boolean accept(File dir, String name) { 1325 if (name.endsWith("T.xml") || name.endsWith("C.xml")) { 1326 return true; 1327 } 1328 return false; 1329 } 1330 }); 1331 } else { 1332 templates_dir = MainFrame.IREPORT_HOME_DIR; templates_dir += File.separator + "etc" + File.separator + "templates"; 1334 f = new File (templates_dir); 1335 if (f.exists() && f.isDirectory()) { 1336 templates_files = f.listFiles(new FilenameFilter () { 1337 public boolean accept(File dir, String name) { 1338 if (name.endsWith("T.xml") || name.endsWith("C.xml")) { 1339 return true; 1340 } 1341 return false; 1342 } 1343 }); 1344 } 1345 } 1346 1347 for (int i=0;templates_files != null && i<templates_files.length; ++i) { 1348 IReportTemplate itemplate = new IReportTemplate(); 1349 itemplate.setXmlFile(templates_files[i] +""); 1350 itemplate.setName(templates_files[i].getName()); 1351 itemplate.setType( templates_files[i].getName().toLowerCase().endsWith("c.xml") ? 0 : 1); 1352 try { 1353 String iconname = templates_files[i]+""; 1354 iconname = Misc.changeFileExtension(iconname,".gif"); 1355 itemplate.setIcon( new javax.swing.ImageIcon ( iconname) ); 1356 } catch (Exception ex){} 1357 1358 templates.add( itemplate ); 1359 } 1360 1361 } catch (Exception ex) { 1362 } 1363 1364 1365 try { 1367 Vector xml_template_files = new Vector (); 1368 Enumeration enum_pl = this.getClass().getClassLoader().getResources("ireport/template.xml"); 1369 while (enum_pl.hasMoreElements()) { 1370 Object oobj = enum_pl.nextElement(); 1371 xml_template_files.add(oobj); 1372 } 1373 1374 for (int i=0; i<xml_template_files.size(); ++i) { 1375 1376 Object source = xml_template_files.elementAt(i); 1377 DOMParser parser = new DOMParser(); 1379 try { 1382 1383 parser.setEntityResolver( new org.xml.sax.EntityResolver () { 1384 1385 public org.xml.sax.InputSource resolveEntity( 1386 String publicId, 1387 String systemId 1388 ) throws SAXException { 1390 org.xml.sax.InputSource inputSource = null; 1391 1392 if (systemId != null) { 1393 String dtd = null; 1394 1395 if ( systemId.equals("http://ireport.sourceforge.net/dtds/iReportTemplate.dtd") ) { 1396 dtd = "it/businesslogic/ireport/dtds/iReportTemplate.dtd"; 1397 } else { 1398 return new org.xml.sax.InputSource (systemId); 1399 } 1400 1401 1402 ClassLoader classLoader = this.getClass().getClassLoader(); 1403 1404 java.io.InputStream is = classLoader.getResourceAsStream(dtd); 1405 if (is != null) { 1406 inputSource = new org.xml.sax.InputSource (is); 1407 } 1408 1409 } 1410 1411 return inputSource; 1412 } 1413 }); 1414 1415 InputStream input_source = null; 1416 if ( source instanceof java.io.File ) { 1417 input_source = new FileInputStream ((java.io.File )source); 1418 1419 } else if ( source instanceof java.net.URL ){ 1420 1421 input_source = ((java.net.URL )source).openStream(); 1422 1423 } 1424 1425 parser.parse(new org.xml.sax.InputSource ( input_source )); 1426 Document document = parser.getDocument(); 1427 1428 Node node = document.getDocumentElement(); 1430 1431 NodeList list = XPathAPI.selectNodeList(node, "/iReportTemplateSet/iReportTemplate"); 1432 Node childnode = null; 1433 1434 for (int n=0; n < list.getLength(); n++) { 1435 IReportTemplate ireportTemplate = new IReportTemplate(); 1436 childnode = XPathAPI.selectSingleNode(list.item(n), "@name"); 1437 if (childnode != null) ireportTemplate.setName(childnode.getNodeValue()); 1438 if (XPathAPI.eval(list.item(n), "@type = 'Tabular'").equals(XBoolean.S_TRUE)) { 1439 ireportTemplate.setType(IReportTemplate.TABULAR); 1440 } else { 1441 ireportTemplate.setType(IReportTemplate.COLUMNAR); 1442 } 1443 childnode = XPathAPI.selectSingleNode(list.item(n), "XmlFile/text()"); 1444 if (childnode != null) ireportTemplate.setXmlFile(childnode.getNodeValue()); 1445 childnode = XPathAPI.selectSingleNode(list.item(n), "IconFile/text()"); 1446 if (childnode != null) { 1447 try { 1448 ireportTemplate.setIcon( 1449 new ImageIcon (getClass().getClassLoader().getResource(childnode.getNodeValue()))); 1450 } catch (DOMException e) { 1451 e.printStackTrace(); 1453 } 1454 } 1455 1456 templates.add(ireportTemplate); 1457 } 1458 } catch (SAXException e) { 1459 System.err.println(e); 1460 } catch (java.io.IOException e) { 1461 System.err.println(e); 1462 } 1463 } 1465 } catch (Exception ex) { 1466 MainFrame.getMainInstance().logOnConsole("Error searching ireport/template.xml resources\n"); 1467 } 1468 1469 1470 } 1471 1472 public void updateExpressionLabels() 1473 { 1474 String fileName = jTextFieldReportFileName.getText().trim(); 1475 1476 if (fileName.length() == 0) 1477 { 1478 jLabel1.setText(""); 1479 jLabel2e.setText(""); 1480 } 1481 else 1482 { 1483 File f = new File (fileName); 1484 1485 String s = f.getName(); 1486 if (!s.toLowerCase().endsWith(".jasper")) 1487 { 1488 if (s.lastIndexOf(".") > 0) 1489 { 1490 s = s.substring(0,s.lastIndexOf(".")); 1491 } 1492 s += ".jasper"; 1493 } 1494 1495 jLabel1.setText("$P{SUBREPORT_DIR} + \"" + s + "\""); 1496 1497 String s2 = MainFrame.getMainInstance().getTranslatedCompileDirectory(); 1498 f = new File ( fileName ); 1499 1500 f = new File (s2, Misc.string_replace(".jasper",".jrxml",f.getName())); 1501 s2 = Misc.string_replace("\\\\","\\","" + f); 1502 jLabel2e.setText("\"" + s2 + "\""); 1503 } 1504 1505 1506 } 1507 1508 1513 public Report createReport(String templateFileName, int reportType) 1514 throws Exception { 1515 1516 Report template = new Report(templateFileName); 1517 1518 template.incrementReportChanges(); 1519 1520 String s = jTextFieldReportFileName.getText().trim(); 1521 String s2 = MainFrame.getMainInstance().getActiveReportFrame().getReport().getFilename(); 1522 if (s.indexOf(File.separator) >=0) 1523 { 1524 template.setFilename(s); 1525 } 1526 else 1527 { 1528 File f = new File (s2); 1529 s2= f.getParent(); 1530 if (s2.length() >0 && !s2.endsWith(File.separator)) s2 = s2+File.separator; 1531 s2 += s; 1532 template.setFilename(s2); 1533 } 1534 1535 1537 Band detail=null; 1539 Band columns=null; 1540 1541 Enumeration e = template.getBands().elements(); 1542 while (e.hasMoreElements()) { 1543 Band band = (Band)e.nextElement(); 1544 if (band.getName().equals("detail")) { 1545 detail = band; 1546 } else if (band.getName().equals("columnHeader")) { 1547 columns = band; 1548 } 1549 } 1550 1551 e = template.getElements().elements(); 1553 while (e.hasMoreElements()) { 1554 ReportElement rElement = (ReportElement)e.nextElement(); 1555 rElement.trasform(new java.awt.Point (0,- template.getBandYLocation( rElement.getBand() )),TransformationType.TRANSFORMATION_MOVE ); 1556 } 1557 1558 if (reportType == 0) { 1560 int currentx = template.getLeftMargin()+10; 1562 int currenty = 10; 1563 e = template.getElements().elements(); 1564 StaticTextReportElement detailLabel = null; 1565 TextFieldReportElement detailField = null; 1566 while (e.hasMoreElements() && (detailLabel==null || detailField == null) ) { 1567 ReportElement rElement = (ReportElement)e.nextElement(); 1568 if (rElement instanceof StaticTextReportElement) { 1569 StaticTextReportElement stre = (StaticTextReportElement)rElement; 1570 if (stre.getText().equalsIgnoreCase("DetailLabel")) 1571 detailLabel =stre; 1572 } else if (rElement instanceof TextFieldReportElement) { 1573 TextFieldReportElement tfre = (TextFieldReportElement)rElement; 1574 if (tfre.getText().equalsIgnoreCase("DetailField")) 1575 detailField = tfre; 1576 } 1577 } 1578 1579 if (detailField != null) 1580 template.getElements().removeElement(detailField); 1581 if (detailLabel != null) 1582 template.getElements().removeElement(detailLabel); 1583 1584 if (detailField == null) 1585 detailField = new TextFieldReportElement(0,0,100,20); 1586 if (detailLabel == null) 1587 detailLabel = new StaticTextReportElement(0,0,100,18); 1588 1589 int nfields = jList2.getModel().getSize(); 1590 int fwidth = template.getColumnWidth()/ ( (nfields <= 0) ? 1 : nfields); 1591 1592 for (int i=0; i<jList2.getModel().getSize(); ++i) { 1593 it.businesslogic.ireport.JRField f = (it.businesslogic.ireport.JRField)jList2.getModel().getElementAt(i); 1595 template.addField(f); 1596 1597 TextFieldReportElement re = (TextFieldReportElement)detailField.cloneMe(); 1598 re.setPosition(new java.awt.Point (currentx,detailField.getPosition().y)); 1599 re.setWidth( fwidth); 1600 re.updateBounds(); 1601 re.setText("$F{"+ f.getName() +"}"); 1602 1603 re.setBand(detail); 1604 re.setMatchingClassExpression( f.getClassType(), true ); 1605 template.getElements().addElement(re); 1606 1607 StaticTextReportElement sre = (StaticTextReportElement)detailLabel.cloneMe(); 1609 sre.setPosition(new java.awt.Point (currentx,detailLabel.getPosition().y)); 1610 sre.setWidth(fwidth); 1611 sre.updateBounds(); 1612 sre.setText(""+ f.getName() +""); 1613 sre.setBand(columns); 1614 template.getElements().addElement(sre); 1615 1616 currentx += fwidth; 1617 currentx = Math.min(template.getWidth() - template.getRightMargin()+10-30, currentx); 1618 } 1619 } 1620 else 1621 { 1622 int currentx = template.getLeftMargin()+10; 1624 int currenty = 10; 1625 e = template.getElements().elements(); 1626 StaticTextReportElement detailLabel = null; 1627 TextFieldReportElement detailField = null; 1628 while (e.hasMoreElements() && (detailLabel==null || detailField == null) ) { 1629 ReportElement rElement = (ReportElement)e.nextElement(); 1630 if (rElement instanceof StaticTextReportElement) { 1631 StaticTextReportElement stre = (StaticTextReportElement)rElement; 1632 if (stre.getText().equalsIgnoreCase("DetailLabel")) 1633 detailLabel =stre; 1634 } else if (rElement instanceof TextFieldReportElement) { 1635 TextFieldReportElement tfre = (TextFieldReportElement)rElement; 1636 if (tfre.getText().equalsIgnoreCase("DetailField")) 1637 detailField = tfre; 1638 } 1639 } 1640 1641 if (detailField != null) 1642 template.getElements().removeElement(detailField); 1643 if (detailLabel != null) 1644 template.getElements().removeElement(detailLabel); 1645 1646 if (detailField == null) 1647 detailField = new TextFieldReportElement(0,0,100,20); 1648 if (detailLabel == null) 1649 detailLabel = new StaticTextReportElement(0,0,100,18); 1650 1651 int nfields = jList2.getModel().getSize(); 1652 1653 int fwidth = template.getColumnWidth()/ ( (nfields <= 0) ? 1 : nfields); 1654 int ffheight = detailField.getPosition().y; 1655 1656 for (int i=0; i<jList2.getModel().getSize(); ++i) { 1657 it.businesslogic.ireport.JRField f = (it.businesslogic.ireport.JRField)jList2.getModel().getElementAt(i); 1659 template.addField(f); 1660 1661 TextFieldReportElement re = (TextFieldReportElement)detailField.cloneMe(); 1662 re.setPosition(new java.awt.Point (detailField.getPosition().x, ffheight)); 1663 re.updateBounds(); 1664 re.setText("$F{"+ f.getName() +"}"); 1665 1666 re.setBand(detail); 1667 re.setMatchingClassExpression( f.getClassType(), true ); 1668 1669 template.getElements().addElement(re); 1670 1671 StaticTextReportElement sre = (StaticTextReportElement)detailLabel.cloneMe(); 1673 sre.setPosition(new java.awt.Point (detailLabel.getPosition().x,ffheight)); 1674 sre.setWidth(fwidth); 1675 sre.updateBounds(); 1676 sre.setText(""+ f.getName() +""); 1677 sre.setBand(detail); 1678 template.getElements().addElement(sre); 1679 1680 ffheight += detailField.position.y+detailField.height-10; 1681 } 1682 if (nfields != 0) detail.setHeight(ffheight); 1683 1684 } 1685 1686 1687 e = template.getElements().elements(); 1689 Vector elements_to_delete = new Vector (); 1690 while (e.hasMoreElements()) { 1691 ReportElement rElement = (ReportElement)e.nextElement(); 1692 if (rElement.getBand() != detail && rElement.getBand() != columns) 1693 { 1694 elements_to_delete.addElement(rElement); 1695 } 1696 } 1697 1698 1699 1700 e =elements_to_delete.elements(); 1701 while (e.hasMoreElements()) { 1702 template.getElements().removeElement(e.nextElement()); 1703 } 1704 1705 Group g; 1706 if ((g=template.getGroupByName("Group1"))!=null) { 1707 template.getBands().removeElement(g.getGroupFooter()); 1708 template.getBands().removeElement(g.getGroupHeader()); 1709 template.getGroups().removeElement(g); 1710 } 1711 if ((g=template.getGroupByName("Group2"))!=null) { 1712 template.getBands().removeElement(g.getGroupFooter()); 1713 template.getBands().removeElement(g.getGroupHeader()); 1714 template.getGroups().removeElement(g); 1715 } 1716 if ((g=template.getGroupByName("Group3"))!=null) { 1717 template.getBands().removeElement(g.getGroupFooter()); 1718 template.getBands().removeElement(g.getGroupHeader()); 1719 template.getGroups().removeElement(g); 1720 } 1721 1722 if ((g=template.getGroupByName("Group4"))!=null) { 1723 template.getBands().removeElement(g.getGroupFooter()); 1724 template.getBands().removeElement(g.getGroupHeader()); 1725 template.getGroups().removeElement(g); 1726 } 1727 1728 e = template.getBands().elements(); 1729 while (e.hasMoreElements()) { 1730 Band band = (Band)e.nextElement(); 1731 if (band != detail && band != columns) 1732 { 1733 band.setHeight(0); 1734 } 1735 } 1736 1737 1738 1740 int leftMargin = template.getLeftMargin(); 1741 template.setWidth( template.getWidth() - template.getLeftMargin() - template.getRightMargin() ); 1742 template.setLeftMargin(0); 1743 template.setRightMargin(0); 1744 template.setHeight( template.getHeight() - template.getTopMargin() - template.getBottomMargin() ); 1745 template.setTopMargin(0); 1746 template.setBottomMargin(0); 1747 1748 1749 e = template.getElements().elements(); 1750 while (e.hasMoreElements()) { 1751 ReportElement rElement = (ReportElement)e.nextElement(); 1752 rElement.trasform(new java.awt.Point (- leftMargin, template.getBandYLocation( rElement.getBand() )),TransformationType.TRANSFORMATION_MOVE ); 1753 } 1754 1755 1756 1757 1758 if (jComboBoxConnection.getSelectedItem() instanceof JDBCConnection) 1759 { 1760 getSubReportElement().setConnectionExpression("$P{REPORT_CONNECTION}"); 1761 getSubReportElement().setUseConnection(true); 1762 template.setQuery( jRSQLExpressionArea1.getText() ); 1763 1764 } 1765 else if (jComboBoxConnection.getSelectedItem() instanceof JRHibernateConnection) 1766 { 1767 template.setQuery( jRSQLExpressionArea1.getText() ); 1768 template.setQueryLanguage("hql"); 1769 } 1770 else if (jComboBoxConnection.getSelectedItem() instanceof NullConnection) 1771 { 1772 template.setWhenNoDataType("AllSectionsNoDetail"); 1773 } 1774 1775 template.saveXMLFile(); 1777 return template; 1778 } 1779 1780 1781 public void applyI18n(){ 1782 jRadioButton4.setText(I18n.getString("subreportWizardNewReport.radioButton4","Store the directory name in a parameter")); 1784 jRadioButton5.setText(I18n.getString("subreportWizardNewReport.radioButton5","Use a static absolute path reference")); 1785 jRadioButtonColumnarLayout.setText(I18n.getString("subreportWizardNewReport.radioButtonColumnarLayout","Columnar layout")); 1786 jRadioButtonTabularLayout.setText(I18n.getString("subreportWizardNewReport.radioButtonTabularLayout","Tabular layout")); 1787 jButton1.setText(I18n.getString("subreportWizardNewReport.button1",">")); 1790 jButton2.setText(I18n.getString("subreportWizardNewReport.button2",">>")); 1791 jButton3.setText(I18n.getString("subreportWizardNewReport.button3","<<")); 1792 jButton4.setText(I18n.getString("subreportWizardNewReport.button4","<")); 1793 jButton5.setText(I18n.getString("subreportWizardNewReport.button5","Browse...")); 1794 jButtonLoadQuery.setText(I18n.getString("subreportWizardNewReport.buttonLoadQuery","Load query")); 1795 jButtonNewConnection.setText(I18n.getString("subreportWizardNewReport.buttonNewConnection","New")); 1796 jButtonSaveQuery.setText(I18n.getString("subreportWizardNewReport.buttonSaveQuery","Save query")); 1797 jLabel1.setText(I18n.getString("subreportWizardNewReport.label1","$P{SUBREPORT_DIR} + /name.jasper")); 1798 jLabel12.setText(I18n.getString("subreportWizardNewReport.label12","Connection / Datasource")); 1799 jLabel2.setText(I18n.getString("subreportWizardNewReport.label2","Query")); 1800 jLabel2e.setText(I18n.getString("subreportWizardNewReport.label2e","path reference")); 1801 jLabel3.setText(I18n.getString("subreportWizardNewReport.label3","Save the subreport as...")); 1802 jLabelImage.setText(I18n.getString("subreportWizardNewReport.labelImage"," ")); 1803 } 1805} 1806 1807 1808class TemplateFile { 1809 1810 public File file = null; 1811 public String name = ""; 1812 public String toString() { return name; } 1813} 1814 | Popular Tags |