1 32 33 package it.businesslogic.ireport.plugin.textwizard; 34 import it.businesslogic.ireport.connection.*; 35 import it.businesslogic.ireport.*; 36 import it.businesslogic.ireport.undo.*; 37 import it.businesslogic.ireport.gui.event.*; 38 import java.util.*; 39 import javax.swing.*; 40 import javax.swing.table.*; 41 import java.sql.*; 42 import it.businesslogic.ireport.util.I18n; 43 44 48 public class TextWizardForm extends javax.swing.JDialog { 49 50 51 public TextWizardForm(java.awt.Frame parent, boolean modal) { 52 super(parent, modal); 53 initComponents(); 54 applyI18n(); 55 56 javax.swing.SpinnerNumberModel smodel = new javax.swing.SpinnerNumberModel (); 57 smodel.setMinimum(new Integer (0)); 58 smodel.setMaximum(new Integer (1000000)); 59 jSpinner1.setModel( smodel ); 60 } 61 62 67 private void initComponents() { 69 java.awt.GridBagConstraints gridBagConstraints; 70 71 jPanel4 = new javax.swing.JPanel (); 72 jPanel1 = new javax.swing.JPanel (); 73 jLabel1 = new javax.swing.JLabel (); 74 jSpinner1 = new javax.swing.JSpinner (); 75 jPanel2 = new javax.swing.JPanel (); 76 jSeparator1 = new javax.swing.JSeparator (); 77 jPanel3 = new javax.swing.JPanel (); 78 jButton1 = new javax.swing.JButton (); 79 jButton2 = new javax.swing.JButton (); 80 jPanel5 = new javax.swing.JPanel (); 81 jScrollPane1 = new javax.swing.JScrollPane (); 82 jTable1 = new javax.swing.JTable (); 83 84 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 85 jPanel4.setLayout(new java.awt.BorderLayout ()); 86 87 jPanel1.setLayout(new java.awt.GridBagLayout ()); 88 89 jPanel1.setPreferredSize(new java.awt.Dimension (10, 70)); 90 jLabel1.setText("Max report width (chars): "); 91 gridBagConstraints = new java.awt.GridBagConstraints (); 92 gridBagConstraints.insets = new java.awt.Insets (4, 4, 0, 0); 93 jPanel1.add(jLabel1, gridBagConstraints); 94 95 jSpinner1.setPreferredSize(new java.awt.Dimension (100, 20)); 96 gridBagConstraints = new java.awt.GridBagConstraints (); 97 gridBagConstraints.insets = new java.awt.Insets (4, 4, 0, 0); 98 jPanel1.add(jSpinner1, gridBagConstraints); 99 100 gridBagConstraints = new java.awt.GridBagConstraints (); 101 gridBagConstraints.weightx = 1.0; 102 jPanel1.add(jPanel2, gridBagConstraints); 103 104 gridBagConstraints = new java.awt.GridBagConstraints (); 105 gridBagConstraints.gridx = 0; 106 gridBagConstraints.gridy = 1; 107 gridBagConstraints.gridwidth = 3; 108 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 109 gridBagConstraints.insets = new java.awt.Insets (4, 0, 4, 0); 110 jPanel1.add(jSeparator1, gridBagConstraints); 111 112 jPanel3.setLayout(new java.awt.GridBagLayout ()); 113 114 jButton1.setText("Check for fields widths"); 115 jButton1.addActionListener(new java.awt.event.ActionListener () { 116 public void actionPerformed(java.awt.event.ActionEvent evt) { 117 jButton1ActionPerformed(evt); 118 } 119 }); 120 121 gridBagConstraints = new java.awt.GridBagConstraints (); 122 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 0); 123 jPanel3.add(jButton1, gridBagConstraints); 124 125 jButton2.setText("Add elements"); 126 jButton2.addActionListener(new java.awt.event.ActionListener () { 127 public void actionPerformed(java.awt.event.ActionEvent evt) { 128 jButton2ActionPerformed(evt); 129 } 130 }); 131 132 gridBagConstraints = new java.awt.GridBagConstraints (); 133 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 0); 134 jPanel3.add(jButton2, gridBagConstraints); 135 136 gridBagConstraints = new java.awt.GridBagConstraints (); 137 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 138 gridBagConstraints.weightx = 1.0; 139 jPanel3.add(jPanel5, gridBagConstraints); 140 141 gridBagConstraints = new java.awt.GridBagConstraints (); 142 gridBagConstraints.gridx = 0; 143 gridBagConstraints.gridy = 2; 144 gridBagConstraints.gridwidth = 3; 145 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 146 gridBagConstraints.weightx = 1.0; 147 gridBagConstraints.weighty = 1.0; 148 jPanel1.add(jPanel3, gridBagConstraints); 149 150 jPanel4.add(jPanel1, java.awt.BorderLayout.NORTH); 151 152 jTable1.setModel(new javax.swing.table.DefaultTableModel ( 153 new Object [][] { 154 155 }, 156 new String [] { 157 "Column", "Display size", "Cut to..." 158 } 159 ) { 160 Class [] types = new Class [] { 161 java.lang.Object .class, java.lang.Integer .class, java.lang.Integer .class 162 }; 163 boolean[] canEdit = new boolean [] { 164 false, false, true 165 }; 166 167 public Class getColumnClass(int columnIndex) { 168 return types [columnIndex]; 169 } 170 171 public boolean isCellEditable(int rowIndex, int columnIndex) { 172 return canEdit [columnIndex]; 173 } 174 }); 175 jScrollPane1.setViewportView(jTable1); 176 177 jPanel4.add(jScrollPane1, java.awt.BorderLayout.CENTER); 178 179 getContentPane().add(jPanel4, java.awt.BorderLayout.CENTER); 180 181 pack(); 182 } 183 185 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 187 190 if (it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame() == null) 192 { 193 javax.swing.JOptionPane.showMessageDialog(this, 194 I18n.getString("messages.textWizardForm.noReportFrame", 195 "No report frame selected!") ); 196 return; 197 } 198 199 200 int count_chars = 0; 201 202 int[] selectedRows = jTable1.getSelectedRows(); 203 for (int i=0; i<jTable1.getSelectedRowCount(); ++i) 204 { 205 count_chars += ((Integer )jTable1.getValueAt(selectedRows[i],2)).intValue(); 206 } 207 208 if (count_chars > ((Integer )jSpinner1.getValue()).intValue() ) 209 { 210 if (javax.swing.JOptionPane.OK_OPTION != javax.swing.JOptionPane.showConfirmDialog(this, 211 I18n.getString("messages.textWizardForm.outOfMargin","Fields will go out of margins. Continue anyway?") ) ) 212 { 213 return; 214 } 215 } 216 217 218 Vector elements = it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().getReport().getElements(); 219 Enumeration enum_elements = elements.elements(); 220 Vector elements_to_remove = new Vector(); 221 while (enum_elements.hasMoreElements()) 222 { 223 ReportElement element = (ReportElement)enum_elements.nextElement(); 224 if (element.getBand().getName().equalsIgnoreCase("columnHeader") || 225 element.getBand().getName().equalsIgnoreCase("detail")) 226 { 227 elements_to_remove.add(element); 228 } 229 } 230 231 it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().setSelectedElements( elements_to_remove ); 232 it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().deleteSelectedElements(); 233 234 int left_char = 0; 235 Band columnHeader = it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().getReport().getBandByName("columnHeader"); 236 Band detail = it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().getReport().getBandByName("detail"); 237 for (int i=0; i<jTable1.getSelectedRowCount(); ++i) 238 { 239 int cut_to = ((Integer )jTable1.getValueAt(selectedRows[i],2)).intValue(); 241 StaticTextReportElement stre = new StaticTextReportElement(left_char*10 + 10, columnHeader.getBandYLocation()+10, 10*cut_to, 20); 242 stre.setBand( columnHeader); 243 stre.setText( jTable1.getValueAt(selectedRows[i],0) + ""); 244 stre.setFontName("Monospaced"); 245 stre.setFontSize(14); 246 247 it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame(), stre , ReportElementChangedEvent.ADDED)); 248 it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().addUndoOperation( new InsertElementOperation( it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame(), stre ) ); 249 it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().getReport().getElements().add(stre); 250 251 TextFieldReportElement tfre = new TextFieldReportElement(left_char*10 + 10, detail.getBandYLocation() + 10, 10*cut_to , 20); 252 tfre.setBand( detail); 253 tfre.setFontName("Monospaced"); 254 tfre.setFontSize(14); 255 String name = "$F{" + jTable1.getValueAt(selectedRows[i],0) + "}"; 256 257 Enumeration fields = it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().getReport().getFields().elements(); 259 260 boolean is_string = false; 261 String type = ""; 262 263 while (fields.hasMoreElements()) 264 { 265 JRField field = (JRField)fields.nextElement(); 266 if (field.getName().equalsIgnoreCase( jTable1.getValueAt(selectedRows[i],0)+"" )) 267 { 268 if (field.getClassType().equalsIgnoreCase("java.lang.String")) 269 is_string = true; 270 type = field.getClassType(); 271 break; 272 } 273 } 274 275 if (is_string) 276 { 277 tfre.setText( "( ((" + name + "!=null) && (" +name+".length() > " + cut_to + ")) ? " + name + ".substring(0,"+ cut_to +") : " + name + ")"); 278 } 279 else 280 { 281 tfre.setText( name ); 282 283 } 284 tfre.setClassExpression( type ); 285 286 it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().fireReportListenerReportElementsChanged(new ReportElementChangedEvent(it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame(), tfre , ReportElementChangedEvent.ADDED)); 287 it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().addUndoOperation( new InsertElementOperation( it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame(), tfre ) ); 288 it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().getReport().getElements().add(tfre); 289 290 left_char += cut_to+1; 291 } 292 } 294 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 297 DefaultTableModel dtm = (DefaultTableModel)jTable1.getModel(); 298 dtm.setRowCount(0); 299 300 301 302 if (it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame() == null) 303 { 304 javax.swing.JOptionPane.showMessageDialog(this,I18n.getString("messages.textWizardForm.noReportFrame", 305 "No report frame selected!")); 306 return; 307 } 308 309 int chars = it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().getReport().getWidth() / 10; 310 ((javax.swing.SpinnerNumberModel )jSpinner1.getModel()).setValue( new Integer (chars) ); 311 312 IReportConnection conn = (IReportConnection)it.businesslogic.ireport.gui.MainFrame.getMainInstance().getProperties().get("DefaultConnection"); 313 if (!conn.isJDBCConnection()) { 314 javax.swing.JOptionPane.showMessageDialog(this, 315 I18n.getString("messages.textWizardForm.noActiveJDBC", 316 "The active connection is not of type JDBC. Activate a JDBC connection first.") 317 ); 318 return; 319 } 320 321 String query = it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().getReport().getQuery(); 322 323 324 if (query.toLowerCase().indexOf("where") >= 0) 325 { 326 query = query.substring(0, query.toLowerCase().lastIndexOf("where")); 327 } 328 329 331 Connection con = null; 332 Statement stmt = null; 333 ResultSet rs = null; 334 ResultSetMetaData rsmd = null; 335 try { 336 con = conn.getConnection(); 337 stmt = con.createStatement(); 338 try { 339 stmt.setMaxRows(1); 340 } catch (Exception ex) { } 341 rs = stmt.executeQuery(query); 342 rsmd = rs.getMetaData(); 343 344 for (int i=1; i<=rsmd.getColumnCount(); ++i) 345 { 346 String name = rsmd.getColumnName( i ); 347 TextColumn ct = new TextColumn(name, rsmd.getColumnDisplaySize( i )); 348 349 Enumeration fields = it.businesslogic.ireport.gui.MainFrame.getMainInstance().getActiveReportFrame().getReport().getFields().elements(); 350 boolean found = false; 351 while (fields.hasMoreElements()) 352 { 353 JRField field = (JRField)fields.nextElement(); 354 if (field.getName().equalsIgnoreCase( name )) 355 { 356 found = true; 357 } 358 } 359 if (found) 360 dtm.addRow(new Object []{ct, new Integer (ct.getSize()), new Integer (ct.getSize())}); 361 } 362 } catch (Exception ex) 363 { 364 javax.swing.JOptionPane.showMessageDialog(this, 365 I18n.getFormattedString( "messages.textWizardForm.queryError", 366 "error during query execution: {0}", 367 new Object []{ ex.getMessage() }) ); 368 ex.printStackTrace(); 369 } finally 370 { 371 372 try { if (stmt != null) stmt.close(); } catch (Exception ex){} 373 try { if (con != null) con.close(); } catch (Exception ex){} 374 } 375 376 } 378 379 382 public static void main(String args[]) { 383 new TextWizardForm(new javax.swing.JFrame (), true).setVisible(true); 384 } 385 386 private javax.swing.JButton jButton1; 388 private javax.swing.JButton jButton2; 389 private javax.swing.JLabel jLabel1; 390 private javax.swing.JPanel jPanel1; 391 private javax.swing.JPanel jPanel2; 392 private javax.swing.JPanel jPanel3; 393 private javax.swing.JPanel jPanel4; 394 private javax.swing.JPanel jPanel5; 395 private javax.swing.JScrollPane jScrollPane1; 396 private javax.swing.JSeparator jSeparator1; 397 private javax.swing.JSpinner jSpinner1; 398 private javax.swing.JTable jTable1; 399 401 public void applyI18n(){ 402 jButton1.setText(I18n.getString("textWizardForm.button1","Check for fields widths")); 404 jButton2.setText(I18n.getString("textWizardForm.button2","Add elements")); 405 jLabel1.setText(I18n.getString("textWizardForm.label1","Max report width (chars): ")); 406 408 jTable1.getColumnModel().getColumn(0).setHeaderValue(I18n.getString("textWizardForm.tablecolumn.column","Column") ); 409 jTable1.getColumnModel().getColumn(1).setHeaderValue(I18n.getString("textWizardForm.tablecolumn.displaySize","Display size") ); 410 jTable1.getColumnModel().getColumn(2).setHeaderValue(I18n.getString("textWizardForm.tablecolumn.cutTo","Cut to...") ); 411 } 412 } 413 414 | Popular Tags |