1 32 33 package com.nqadmin.swingSet; 34 35 import java.sql.*; 36 import java.io.*; 37 import java.text.*; 38 import javax.sql.*; 39 import javax.swing.text.*; 40 import javax.swing.event.*; 41 import java.util.GregorianCalendar ; 42 import java.util.Calendar ; 43 import java.util.StringTokenizer ; 44 import com.nqadmin.swingSet.datasources.SSRowSet; 45 46 67 public class SSTextDocument extends javax.swing.text.PlainDocument { 68 69 72 protected SSRowSet sSRowSet; 73 74 77 protected String columnName; 78 79 82 protected int columnType = -1; 83 84 87 protected int columnIndex = -1; 88 89 93 protected SimpleAttributeSet attribute = new SimpleAttributeSet(); 94 95 98 private final MyRowSetListener rowSetListener = new MyRowSetListener(); 99 100 103 private final MyDocumentListener documentListener = new MyDocumentListener(); 104 105 106 113 public SSTextDocument(SSRowSet _sSRowSet, String _columnName) { 114 sSRowSet = _sSRowSet; 115 columnName = _columnName; 116 bind(); 117 } 119 126 public SSTextDocument(SSRowSet _sSRowSet, int _columnIndex) { 127 sSRowSet = _sSRowSet; 128 columnIndex = _columnIndex; 129 bind(); 130 } 132 137 public void setColumnName(String _columnName) { 138 columnName = _columnName; 139 columnIndex = -1; 140 } 141 142 147 public String getColumnName() { 148 return columnName; 149 } 150 151 156 public void setColumnIndex(int _columnIndex) { 157 columnIndex = _columnIndex; 158 columnName = null; 159 } 160 161 166 public int getColumnIndex() { 167 return columnIndex; 168 } 169 170 171 176 public void setSSRowSet(SSRowSet _sSRowSet) { 178 sSRowSet = _sSRowSet; 179 bind(); 180 } 182 187 public SSRowSet getSSRowSet() { 188 return sSRowSet; 189 } 190 191 194 protected void bind() { 195 196 if ((columnName==null && columnIndex==-1) || sSRowSet==null) { 198 return; 199 } 200 201 removeListeners(); 203 204 try { 206 if (columnName != null) { 209 columnIndex = sSRowSet.getColumnIndex(columnName); 210 } else { 211 columnName = sSRowSet.getColumnName(columnIndex); 212 } 213 214 columnType = sSRowSet.getColumnType(columnIndex); 216 217 if (sSRowSet.getRow() != 0) { 220 String value = getText(); 221 insertString(0,value, attribute); 222 insertUpdate( new AbstractDocument.DefaultDocumentEvent(0,getLength() , DocumentEvent.EventType.INSERT), attribute ); 223 } 224 225 } catch(SQLException se) { 226 se.printStackTrace(); 227 } catch(BadLocationException ble) { 228 ble.printStackTrace(); 229 } 230 231 addListeners(); 233 234 } 236 239 protected void updateDocument() { 240 try { 241 if ( sSRowSet.getRow() != 0 ) { 242 String value = getText(); 243 if (value == null) { 244 value = ""; 245 } 246 replace(0, getLength(), value, null); 247 } else { 248 if ( getLength() > 0 ) { 249 remove(0,getLength() ); 250 } 252 } 253 } catch(SQLException se) { 254 se.printStackTrace(); 255 } catch(BadLocationException ble) { 256 ble.printStackTrace(); 257 } 258 259 } 261 264 protected void updateText(String strValue) { 265 try { 273 strValue.trim(); 274 276 switch(columnType) { 277 281 case Types.INTEGER: 282 case Types.SMALLINT: 283 case Types.TINYINT: 284 if ( strValue.equals("") ) { 286 sSRowSet.updateNull(columnName); 287 } else { 288 int intValue = Integer.parseInt(strValue); 289 sSRowSet.updateInt(columnName, intValue); 290 } 291 break; 292 293 case Types.BIGINT: 294 if ( strValue.equals("") ) { 296 sSRowSet.updateNull(columnName); 297 } else { 298 long longValue = Long.parseLong(strValue); 299 sSRowSet.updateLong(columnName, longValue); 300 } 301 break; 302 303 case Types.FLOAT: 304 if ( strValue.equals("") ) { 306 sSRowSet.updateNull(columnName); 307 } else { 308 float floatValue = Float.parseFloat(strValue); 309 sSRowSet.updateFloat(columnName, floatValue); 310 } 311 break; 312 313 case Types.DOUBLE: 314 case Types.NUMERIC: 315 if ( strValue.equals("") ) { 318 sSRowSet.updateNull(columnName); 319 } else { 320 double doubleValue = Double.parseDouble(strValue); 321 sSRowSet.updateDouble(columnName, doubleValue); 322 } 323 break; 324 325 case Types.BOOLEAN: 326 case Types.BIT: 327 if (strValue.equals("")) { 328 sSRowSet.updateNull(columnName); 329 } else { 330 boolean boolValue = Boolean.valueOf(strValue).booleanValue(); 332 sSRowSet.updateBoolean(columnName, boolValue); 333 } 334 break; 335 336 case Types.DATE: 337 case Types.TIMESTAMP: 338 if ( strValue.equals("") ) { 340 sSRowSet.updateNull(columnName); 341 } else if (strValue.length() == 10) { 342 sSRowSet.updateDate(columnName, getSQLDate(strValue)); 345 } else { 346 } 348 break; 349 350 case Types.CHAR: 351 case Types.VARCHAR: 352 case Types.LONGVARCHAR: 353 sSRowSet.updateString(columnName, strValue); 356 break; 357 358 default: 359 System.out.println("Unknown data type"); 360 } 362 } catch(SQLException se) { 363 se.printStackTrace(); 364 } catch(NumberFormatException nfe) { 366 } 368 369 } 371 375 protected String getText() { 376 String value = null; 377 try { 378 switch(columnType) { 381 case Types.INTEGER: 382 case Types.SMALLINT: 383 case Types.TINYINT: 384 value = String.valueOf(sSRowSet.getInt(columnName)); 385 break; 386 387 case Types.BIGINT: 388 value = String.valueOf(sSRowSet.getLong(columnName)); 389 break; 390 391 case Types.FLOAT: 392 value = String.valueOf(sSRowSet.getFloat(columnName)); 393 break; 394 395 case Types.DOUBLE: 396 case Types.NUMERIC: 397 value = String.valueOf(sSRowSet.getDouble(columnName)); 398 break; 399 400 case Types.BOOLEAN: 401 case Types.BIT: 402 value = String.valueOf(sSRowSet.getBoolean(columnName)); 403 break; 404 405 case Types.DATE: 406 case Types.TIMESTAMP: 407 Date date = sSRowSet.getDate(columnName); 408 if (date == null) { 409 value = ""; 410 } else { 411 GregorianCalendar calendar = new GregorianCalendar (); 412 calendar.setTime(date); 413 value = ""; 414 if (calendar.get(Calendar.MONTH) + 1 < 10 ) { 415 value = "0"; 416 } 417 value = value + (calendar.get(Calendar.MONTH) + 1) + "/"; 418 419 if (calendar.get(Calendar.DAY_OF_MONTH) < 10) { 420 value = value + "0"; 421 } 422 value = value + calendar.get(Calendar.DAY_OF_MONTH) + "/"; 423 value = value + calendar.get(Calendar.YEAR); 424 } 426 break; 427 428 case Types.CHAR: 429 case Types.VARCHAR: 430 case Types.LONGVARCHAR: 431 String str = sSRowSet.getString(columnName); 432 if (str == null) { 433 value = ""; 434 } else { 435 value = String.valueOf(str); 436 } 437 break; 438 439 default: 440 System.out.println(columnName + " : UNKNOWN DATA TYPE "); 441 } 443 } catch(SQLException se) { 444 se.printStackTrace(); 445 } 446 447 return value; 448 449 } 451 458 protected Date getSQLDate(String _strDate) { 459 StringTokenizer strtok = new StringTokenizer (_strDate,"/",false); 460 String month = strtok.nextToken(); 461 String day = strtok.nextToken(); 462 String newStrDate = strtok.nextToken() + "-" + month + "-" + day; 463 return Date.valueOf(newStrDate); 464 } 465 466 469 private void addListeners() { 470 sSRowSet.addRowSetListener(rowSetListener); 471 addDocumentListener(documentListener); 472 } 473 474 477 private void removeListeners() { 478 sSRowSet.removeRowSetListener(rowSetListener); 479 removeDocumentListener(documentListener); 480 } 481 482 485 private class MyDocumentListener implements DocumentListener, Serializable { 486 public void removeUpdate(DocumentEvent de) { 493 sSRowSet.removeRowSetListener(rowSetListener); 494 495 try { 496 updateText(getText(0,getLength())); 498 } catch(BadLocationException ble) { 499 ble.printStackTrace(); 500 } 501 sSRowSet.addRowSetListener(rowSetListener); 502 } 503 504 public void changedUpdate(DocumentEvent de) { 505 } 507 508 public void insertUpdate(DocumentEvent de) { 512 513 sSRowSet.removeRowSetListener(rowSetListener); 514 try { 515 updateText(getText( 0,getLength() ) ); 517 } catch(BadLocationException ble) { 518 ble.printStackTrace(); 519 } 520 sSRowSet.addRowSetListener(rowSetListener); 521 } 522 523 } 525 526 529 private class MyRowSetListener implements RowSetListener, Serializable { 530 public void cursorMoved(RowSetEvent event) { 535 removeDocumentListener(documentListener); 536 updateDocument(); 538 539 addDocumentListener(documentListener); 540 } 541 542 public void rowChanged(RowSetEvent event) { 547 removeDocumentListener(documentListener); 548 updateDocument(); 550 551 addDocumentListener(documentListener); 552 } 553 554 public void rowSetChanged(RowSetEvent event) { 559 removeDocumentListener(documentListener); 560 updateDocument(); 562 563 addDocumentListener(documentListener); 564 } 565 566 } 568 } 570 571 572 | Popular Tags |