1 14 package org.compiere.model; 15 16 import java.awt.*; 17 import java.sql.*; 18 import java.util.*; 19 import java.math.*; 20 import java.beans.*; 21 import java.io.*; 22 23 import org.compiere.util.*; 24 import org.compiere.plaf.CompierePLAF; 25 26 41 public final class MField implements Serializable 42 { 43 48 public MField (MFieldVO vo) 49 { 50 m_vo = vo; 51 loadLookup(); 53 setError(false); 54 } 56 57 private MFieldVO m_vo; 58 59 62 protected void dispose() 63 { 64 m_propertyChangeListeners = null; 66 if (m_lookup != null) 67 m_lookup.dispose(); 68 m_lookup = null; 69 m_vo.lookupInfo = null; 70 m_vo = null; 71 } 73 74 75 private Lookup m_lookup = null; 76 77 private boolean m_inserting = false; 78 79 80 81 public static final int MAXDISPLAY_LENGTH = 60; 82 83 84 private Object m_value = null; 85 86 private static Object s_oldValue = new Object (); 87 88 private Object m_oldValue = s_oldValue; 89 90 private boolean m_setOldValue = true; 91 92 private boolean m_error = false; 93 94 private boolean m_parentChecked = false; 95 96 97 private PropertyChangeSupport m_propertyChangeListeners = new PropertyChangeSupport(this); 98 99 public static final String PROPERTY = "FieldValue"; 100 101 public static final String INSERTING = "FieldValueInserting"; 102 103 104 private String m_errorValue = null; 105 106 private boolean m_errorValueFlag = false; 107 108 109 110 113 public void loadLookup() 114 { 115 if (!isLookup()) 116 return; 117 Log.trace(Log.l5_DData, "MField.loadLookup (" + m_vo.ColumnName + ")"); 118 119 if (DisplayType.isLookup(m_vo.displayType)) 120 { 121 if (m_vo.lookupInfo == null) 122 { 123 Log.error("MField.loadLookup (" + m_vo.ColumnName + ") - No LookupInfo"); 124 return; 125 } 126 MLookup ml = new MLookup (m_vo.lookupInfo, m_vo.TabNo); 127 m_lookup = ml; 128 } 129 else if (m_vo.displayType == DisplayType.Location) { 131 MLocation ml = new MLocation (m_vo.ctx, m_vo.WindowNo); 132 m_lookup = ml; 133 } 134 else if (m_vo.displayType == DisplayType.Locator) 135 { 136 MLocatorLookup ml = new MLocatorLookup (m_vo.ctx, m_vo.WindowNo); 137 m_lookup = ml; 138 } 139 else if (m_vo.displayType == DisplayType.Account) { 141 MAccount ma = new MAccount (m_vo.ctx, m_vo.WindowNo); 142 m_lookup = ma; 143 } 144 else if (m_vo.displayType == DisplayType.PAttribute) { 146 MPAttribute pa = new MPAttribute (m_vo.ctx, m_vo.WindowNo); 147 m_lookup = pa; 148 } 149 } 151 154 public void lookupLoadComplete() 155 { 156 if (m_lookup == null) 157 return; 158 m_lookup.loadComplete(); 159 } 161 165 public Lookup getLookup() 166 { 167 return m_lookup; 168 } 170 174 public boolean isLookup() 175 { 176 boolean retValue = false; 177 if (m_vo.IsKey) 178 retValue = false; 179 else if (DisplayType.isLookup(m_vo.displayType)) 182 retValue = true; 183 else if (m_vo.displayType == DisplayType.Location 184 || m_vo.displayType == DisplayType.Locator 185 || m_vo.displayType == DisplayType.Account 186 || m_vo.displayType == DisplayType.PAttribute) 187 retValue = true; 188 189 return retValue; 190 } 192 196 public boolean refreshLookup() 197 { 198 if (m_lookup == null || m_lookup.getValidation().length() == 0) 200 return true; 201 Log.trace(Log.l5_DData, "MField.refreshLookup (" + m_vo.ColumnName + ")"); 203 m_lookup.refresh(); 204 return m_lookup.isValidated(); 205 } 207 213 public ArrayList getDependentOn() 214 { 215 ArrayList list = new ArrayList(); 216 parseDepends(list, m_vo.DisplayLogic); 218 if (m_lookup != null) 220 parseDepends(list, m_lookup.getValidation()); 221 if (list.size() > 0 && Log.getTraceLevel() > Log.l5_DData) 223 { 224 StringBuffer sb = new StringBuffer (); 225 for (int i = 0; i < list.size(); i++) 226 sb.append(list.get(i)).append(" "); 227 Log.trace(Log.l6_Database, "MField.getDependentOn (" + m_vo.ColumnName + ")", 228 sb.toString()); 229 } 230 return list; 231 } 233 238 private void parseDepends (ArrayList list, String parseString) 239 { 240 if (parseString == null || parseString.length() == 0) 241 return; 242 String s = parseString; 244 while (s.indexOf("@") != -1) 246 { 247 int pos = s.indexOf("@"); 248 s = s.substring(pos+1); 249 pos = s.indexOf("@"); 250 if (pos == -1) 251 continue; String variable = s.substring(0, pos); 253 s = s.substring(pos+1); 254 list.add(variable); 256 } 257 } 259 260 261 266 public void setError (boolean error) 267 { 268 m_error = error; 269 } 271 275 public boolean isError() 276 { 277 return m_error; 278 } 280 281 287 public boolean isMandatory (boolean checkContext) 288 { 289 if (!m_vo.IsMandatory) 291 return false; 292 293 if ((m_vo.IsKey && m_vo.ColumnName.endsWith("_ID")) 295 || m_vo.ColumnName.startsWith("Created") || m_vo.ColumnName.startsWith("Updated") 296 || m_vo.ColumnName.equals("Value") || m_vo.ColumnName.equals("DocumentNo")) 297 return false; 298 299 return isDisplayed (checkContext); 301 } 303 308 public boolean isEditable (boolean checkContext) 309 { 310 if (m_vo.tabReadOnly || m_vo.IsReadOnly) 312 { 313 Log.trace (10, "MField.isEditable - " + m_vo.ColumnName + " NO - TabRO=" + m_vo.tabReadOnly + ", FieldRO=" + m_vo.IsReadOnly); 314 return false; 315 } 316 317 if (m_vo.ColumnName.equals("Record_ID") || m_vo.ColumnName.equals("Posted")) 320 return true; 321 322 if (!m_vo.IsUpdateable && !m_inserting) 324 { 325 Log.trace (10, "MField.isEditable - " + m_vo.ColumnName + " NO - FieldUpdateable=" + m_vo.IsUpdateable); 326 return false; 327 } 328 329 if (m_vo.ColumnName.equals(Env.getContext(m_vo.ctx, m_vo.WindowNo, m_vo.TabNo, "LinkColumnName"))) 331 { 332 Log.trace (10, "MField.isEditable - " + m_vo.ColumnName + " NO - LinkColumn"); 333 return false; 334 } 335 336 if (checkContext) 338 { 339 int AD_Client_ID = Env.getContextAsInt(m_vo.ctx, m_vo.WindowNo, m_vo.TabNo, "AD_Client_ID"); 340 int AD_Org_ID = Env.getContextAsInt(m_vo.ctx, m_vo.WindowNo, m_vo.TabNo, "AD_Org_ID"); 341 int AD_Table_ID = Env.getContextAsInt(m_vo.ctx, m_vo.WindowNo, m_vo.TabNo, "AD_Table_ID"); 342 if (!MRole.getDefault(m_vo.ctx, false).canUpdate(AD_Client_ID, AD_Org_ID, AD_Table_ID, false)) 343 return false; 344 if (!MRole.getDefault(m_vo.ctx, false).isColumnAccess(AD_Table_ID, m_vo.AD_Column_ID, false)) 345 return false; 346 } 347 348 if (checkContext && m_vo.ReadOnlyLogic.length() > 0) 350 { 351 boolean retValue = !evaluateLogic(m_vo.ReadOnlyLogic); 352 if (Log.isTraceLevel(7)) 353 Log.trace(8, "MField.isEditable - " + m_vo.ColumnName + " R/O(" + m_vo.ReadOnlyLogic + ") => R/W-" + retValue); 354 if (!retValue) 355 return false; 356 } 357 358 if (m_vo.ColumnName.equals("Processing") 360 || m_vo.ColumnName.equals("PaymentRule") 361 || m_vo.ColumnName.equals("DocAction") 362 || m_vo.ColumnName.equals("GenerateTo")) 363 return true; 364 365 if (m_vo.AD_Column_ID == 2174 || m_vo.AD_Column_ID == 3045 || m_vo.AD_Column_ID == 3782 || m_vo.AD_Column_ID == 3785) return true; 371 372 if (checkContext && Env.getContext(m_vo.ctx, m_vo.WindowNo, "Processed").equals("Y")) 374 return false; 375 376 if (m_vo.ColumnName.equals("IsActive")) 378 return true; 379 380 if (checkContext && !Env.getContext(m_vo.ctx, m_vo.WindowNo, "IsActive").equals("Y")) 382 return false; 383 384 return isDisplayed (checkContext); 386 } 388 393 public void setInserting (boolean inserting) 394 { 395 m_inserting = inserting; 396 } 398 399 400 415 public Object getDefault() 416 { 417 420 421 if (m_vo.IsKey || m_vo.displayType == DisplayType.RowID || m_vo.displayType == DisplayType.Binary) 423 return null; 424 if (isParent()) 426 { 427 String parent = Env.getContext(m_vo.ctx, m_vo.WindowNo, m_vo.ColumnName); 428 Log.trace(Log.l5_DData, "MField.getDefault [Parent] " + m_vo.ColumnName + "=" + parent); 429 return createDefault(parent); 430 } 431 if (m_vo.ColumnName.equals("IsActive")) 433 { 434 Log.trace(Log.l5_DData, "MField.getDefault [IsActive] " + m_vo.ColumnName + "=Y"); 435 return "Y"; 436 } 437 if (X_AD_Table.ACCESSLEVEL_SystemOnly.equals(Env.getContext(m_vo.ctx, m_vo.WindowNo, m_vo.TabNo, "AccessLevel")) 439 && (m_vo.ColumnName.equals("AD_Client_ID") || m_vo.ColumnName.equals("AD_Org_ID"))) 440 { 441 Log.trace(Log.l5_DData, "MField.getDefault [SystemAccess] " + m_vo.ColumnName + "=0"); 442 return new Integer (0); 443 } 444 else if (X_AD_Table.ACCESSLEVEL_SystemPlusClient.equals(Env.getContext(m_vo.ctx, m_vo.WindowNo, m_vo.TabNo, "AccessLevel")) 446 && m_vo.ColumnName.equals("AD_Org_ID")) 447 { 448 Log.trace(Log.l5_DData, "MField.getDefault [ClientAccess] " + m_vo.ColumnName + "=0"); 449 return new Integer (0); 450 } 451 452 455 String defStr = ""; 456 if (m_vo.DefaultValue.startsWith("@SQL=")) 457 { 458 String SQL = m_vo.DefaultValue.substring(5); SQL = Env.parseContext(m_vo.ctx, m_vo.WindowNo, SQL, false); if (SQL.equals("")) 461 { 462 Log.error("MField.getDefault (" + m_vo.ColumnName + ") - Default SQL variable parse failed: " 463 + m_vo.DefaultValue); 464 } 465 else 466 { 467 try 468 { 469 PreparedStatement stmt = DB.prepareStatement(SQL); 470 ResultSet rs = stmt.executeQuery(); 471 if (rs.next()) 472 defStr = rs.getString("DefaultValue"); 473 else 474 Log.error("MField.getDefault (" + m_vo.ColumnName + ") - no Result: " + SQL); 475 rs.close(); 476 stmt.close(); 477 } 478 catch (SQLException e) 479 { 480 Log.error("MField.getDefault (" + m_vo.ColumnName + ") " + SQL, e); 481 } 482 } 483 if (!defStr.equals("")) 484 { 485 Log.trace(Log.l5_DData, "MField.getDefault [SQL] " + m_vo.ColumnName + "=" + defStr); 486 return createDefault(defStr); 487 } 488 } 490 493 defStr = Env.getPreference (m_vo.ctx, m_vo.AD_Window_ID, m_vo.ColumnName, false); 494 if (!defStr.equals("")) 495 { 496 Log.trace(Log.l5_DData, "MField.getDefault [UserPreference] " + m_vo.ColumnName + "=" + defStr); 497 return createDefault(defStr); 498 } 499 500 503 if (!m_vo.DefaultValue.equals("") && !m_vo.DefaultValue.startsWith("@SQL=")) 504 { 505 defStr = ""; 506 StringTokenizer st = new StringTokenizer(m_vo.DefaultValue, ",;", false); 508 while (st.hasMoreTokens()) 509 { 510 defStr = st.nextToken().trim(); 511 if (defStr.equals("@SysDate@")) return new Timestamp (System.currentTimeMillis()); 513 else if (defStr.indexOf('@') != -1) defStr = Env.getContext(m_vo.ctx, m_vo.WindowNo, defStr.replace('@',' ').trim()); 515 else if (defStr.indexOf("'") != -1) defStr = defStr.replace('\'', ' ').trim(); 517 518 if (!defStr.equals("")) 519 { 520 Log.trace(Log.l5_DData, "MField.getDefault [DefaultValue] " + m_vo.ColumnName + "=" + defStr); 521 return createDefault(defStr); 522 } 523 } } 526 529 defStr = Env.getPreference (m_vo.ctx, m_vo.AD_Window_ID, m_vo.ColumnName, true); 530 if (!defStr.equals("")) 531 { 532 Log.trace(Log.l5_DData, "MField.getDefault [SystemPreference] " + m_vo.ColumnName + "=" + defStr); 533 return createDefault(defStr); 534 } 535 536 539 540 if (m_vo.displayType == DisplayType.Button && !m_vo.ColumnName.endsWith("_ID")) 542 { 543 Log.trace(Log.l5_DData, "MField.getDefault [Button=N] " + m_vo.ColumnName); 544 return "N"; 545 } 546 if (m_vo.displayType == DisplayType.YesNo) 548 { 549 Log.trace(Log.l5_DData, "MField.getDefault [YesNo=N] " + m_vo.ColumnName); 550 return "N"; 551 } 552 if (m_vo.ColumnName.endsWith("_ID")) 559 { 560 Log.trace(Log.l5_DData, "MField.getDefault [ID=null] " + m_vo.ColumnName); 561 return null; 562 } 563 if (DisplayType.isNumeric(m_vo.displayType)) 565 { 566 Log.trace(Log.l5_DData, "MField.getDefault [Number=0] " + m_vo.ColumnName); 567 return createDefault("0"); 568 } 569 570 573 Log.trace(Log.l5_DData, "MField.getDefault [NONE] " + m_vo.ColumnName); 574 return null; 575 } 577 588 private Object createDefault (String value) 589 { 590 if (value == null || value.toString().length() == 0) 592 return null; 593 594 try 595 { 596 if (m_vo.ColumnName.endsWith("_ID")) 598 return new Integer (value); 599 else if (DisplayType.isNumeric(m_vo.displayType)) 601 return new BigDecimal(value); 602 if (DisplayType.isDate(m_vo.displayType)) 604 { 605 java.util.Date date = DisplayType.getDateFormat_JDBC().parse (value); 606 return new Timestamp (date.getTime()); 607 } 608 else 609 return value; 610 } 611 catch (Exception e) 612 { 613 Log.error("MField.createDefault (" + m_vo.ColumnName + ") - " + e.getMessage()); 614 } 615 return null; 616 } 618 623 public boolean validateValue() 624 { 625 if (m_value == null || m_value.toString().length() == 0) 627 { 628 if (isMandatory(true)) 629 { 630 m_error = true; 631 return false; 632 } 633 else 634 return true; 635 } 636 637 if (getDisplayType() == DisplayType.Search && m_lookup != null) 639 { 640 if (m_lookup.getDirect(m_value, false, true) == null) 642 { 643 Log.trace(8, "MField.validateValue " + m_vo.ColumnName + " Serach not valid - set to null"); 644 setValue(null, m_inserting); 645 m_error = true; 646 return false; 647 } 648 return true; 649 } 650 651 if (!isLookup() 653 || m_lookup.containsKey(m_value)) 654 return true; 655 if (isKey() || isParent()) return true; 658 659 Log.trace(8, "MField.validateValue " + m_vo.ColumnName + " - set to null"); 660 setValue(null, m_inserting); 661 m_error = true; 662 return false; 663 } 665 666 667 668 673 public boolean isDisplayed (boolean checkContext) 674 { 675 if (!m_vo.IsDisplayed) 678 return false; 679 if (m_vo.DisplayLogic.equals("")) 681 return true; 682 683 if (checkContext) 685 { 686 boolean retValue = evaluateLogic(m_vo.DisplayLogic); 687 Log.trace(9, "MField.isDisplayed", m_vo.ColumnName 688 + " (" + m_vo.DisplayLogic + ") => " + retValue); 689 return retValue; 690 } 691 return true; 692 } 694 711 private boolean evaluateLogic (String logic) 712 { 713 StringTokenizer st = new StringTokenizer(logic.trim(), "&|", true); 715 int it = st.countTokens(); 716 if (((it/2) - ((it+1)/2)) == 0) { 718 Log.error ("MField.evatuateLogic (" + getColumnName() 719 + ") Logic does not comply with format " 720 + "'<expression> [<logic> <expression>]' => " + logic); 721 return false; 722 } 723 724 boolean retValue = evaluateLogicTuple(st.nextToken()); 725 while (st.hasMoreTokens()) 726 { 727 String logOp = st.nextToken().trim(); 728 boolean temp = evaluateLogicTuple(st.nextToken()); 729 if (logOp.equals("&")) 730 retValue = retValue & temp; 731 else if (logOp.equals("|")) 732 retValue = retValue | temp; 733 else 734 { 735 Log.error("MField.evaluateLogic (" + getColumnName() 736 + ") Logic operant '|' or '&' expected => " + logic); 737 return false; 738 } 739 } return retValue; 741 } 743 752 private boolean evaluateLogicTuple (String logic) 753 { 754 StringTokenizer st = new StringTokenizer(logic.trim(), "!=^", true); 755 if (st.countTokens() != 3) 756 { 757 Log.error("MField.evaluateLogicTuple (" + getColumnName() 758 + ") Logic touple does not comply with format " 759 + "'@context@=value' or '@context@!value' => " + logic); 760 return false; 761 } 762 String first = st.nextToken().trim(); String firstEval = first.trim(); 765 if (first.indexOf('@') != -1) { 767 first = first.replace ('@', ' ').trim (); firstEval = Env.getContext (m_vo.ctx, m_vo.WindowNo, first, true); } 770 else firstEval = firstEval.replace('\'', ' ').replace('"', ' ').trim(); String compare = st.nextToken(); 774 String second = st.nextToken(); String secondEval = second.trim(); 777 if (second.indexOf('@') != -1) { 779 second = second.replace('@', ' ').trim(); secondEval = Env.getContext(m_vo.ctx, m_vo.WindowNo, second, true); } 782 else secondEval = secondEval.replace('\'', ' ').replace('"', ' ').trim(); 785 if (first.indexOf("_ID") != -1 && firstEval.length() == 0) 787 firstEval = "0"; 788 if (second.indexOf("_ID") != -1 && secondEval.length() == 0) 789 secondEval = "0"; 790 791 boolean result = firstEval.equals(secondEval); 793 if (!compare.equals("=")) 794 result = !result; 795 if (Log.isTraceLevel(10)) 797 Log.trace(10, "MField.evaluateLogicTuple - " + logic + "=> \"" + firstEval + "\" " + compare + " \"" + secondEval + "\" => " + result); 798 return result; 800 } 802 807 public void addDependencies (ArrayList list) 808 { 809 if (!m_vo.IsDisplayed || m_vo.DisplayLogic.equals("")) 811 return; 812 813 StringTokenizer logic = new StringTokenizer(m_vo.DisplayLogic.trim(), "&|", false); 814 815 while (logic.hasMoreTokens()) 816 { 817 StringTokenizer st = new StringTokenizer(logic.nextToken().trim(), "!=^", false); 818 while (st.hasMoreTokens()) 819 { 820 String tag = st.nextToken().trim(); if (tag.indexOf('@') != -1) 823 { 824 tag = tag.replace('@', ' ').trim(); if (!list.contains(tag)) 827 list.add(tag); 828 } 829 } 830 } 831 } 833 834 835 839 public String getColumnName() 840 { 841 return m_vo.ColumnName; 842 } 843 public String getHeader() 844 { 845 return m_vo.Header; 846 } 847 public int getDisplayType() 848 { 849 return m_vo.displayType; 850 } 851 public int getAD_Window_ID() 852 { 853 return m_vo.AD_Window_ID; 854 } 855 public int getWindowNo() 856 { 857 return m_vo.WindowNo; 858 } 859 public int getAD_Column_ID() 860 { 861 return m_vo.AD_Column_ID; 862 } 863 public int getDisplayLength() 864 { 865 return m_vo.DisplayLength; 866 } 867 public boolean isSameLine() 868 { 869 return m_vo.IsSameLine; 870 } 871 public boolean isDisplayed() 872 { 873 return m_vo.IsDisplayed; 874 } 875 public String getDisplayLogic() 876 { 877 return m_vo.DisplayLogic; 878 } 879 public String getDefaultValue() 880 { 881 return m_vo.DefaultValue; 882 } 883 public boolean isReadOnly() 884 { 885 return m_vo.IsReadOnly; 886 } 887 public boolean isUpdateable() 888 { 889 return m_vo.IsUpdateable; 890 } 891 public boolean isHeading() 892 { 893 return m_vo.IsHeading; 894 } 895 public boolean isFieldOnly() 896 { 897 return m_vo.IsFieldOnly; 898 } 899 public boolean isEncryptedField() 900 { 901 return m_vo.IsEncryptedField; 902 } 903 public boolean isSelectionColumn() 904 { 905 return m_vo.IsSelectionColumn; 906 } 907 public int getSortNo() 908 { 909 return m_vo.SortNo; 910 } 911 public int getFieldLength() 912 { 913 return m_vo.FieldLength; 914 } 915 public String getVFormat() 916 { 917 return m_vo.VFormat; 918 } 919 public String getValueMin() 920 { 921 return m_vo.ValueMin; 922 } 923 public String getValueMax() 924 { 925 return m_vo.ValueMax; 926 } 927 public String getFieldGroup() 928 { 929 return m_vo.FieldGroup; 930 } 931 public boolean isKey() 932 { 933 return m_vo.IsKey; 934 } 935 public boolean isParent() 936 { 937 if (m_parentChecked || m_vo.IsParent) 938 return m_vo.IsParent; 939 if (!DisplayType.isID(m_vo.displayType)) 940 { 941 m_parentChecked = true; 942 return false; 943 } 944 String LinkColumnName = Env.getContext(m_vo.ctx, m_vo.WindowNo, m_vo.TabNo, "LinkColumnName"); 945 m_vo.IsParent = m_vo.ColumnName.equals(LinkColumnName); 946 if (m_vo.IsParent) 947 Log.trace(9, "MField.isParent - " + m_vo.IsParent 948 + " - Link(" + LinkColumnName + ", W=" + m_vo.WindowNo + ",T=" + m_vo.TabNo 949 + ") = " + m_vo.ColumnName); 950 return m_vo.IsParent; 951 } 952 public String getCallout() 953 { 954 return m_vo.Callout; 955 } 956 public int getAD_Process_ID() 957 { 958 return m_vo.AD_Process_ID; 959 } 960 public String getDescription() 961 { 962 return m_vo.Description; 963 } 964 public String getHelp() 965 { 966 return m_vo.Help; 967 } 968 public MFieldVO getVO() 969 { 970 return m_vo; 971 } 972 973 977 public boolean isLongField() 978 { 979 if (m_vo.displayType == DisplayType.String 980 || m_vo.displayType == DisplayType.Text 981 || m_vo.displayType == DisplayType.Memo 982 || m_vo.displayType == DisplayType.TextLong 983 || m_vo.displayType == DisplayType.Image) 984 return (m_vo.DisplayLength >= MAXDISPLAY_LENGTH/2); 985 return false; 986 } 988 994 public void setValue () 995 { 996 if (m_setOldValue) m_oldValue = m_value; 999 m_value = null; 1000 m_inserting = false; 1001 m_error = false; 1003 m_propertyChangeListeners.firePropertyChange(PROPERTY, m_oldValue, null); 1005 } 1008 1009 1017 public void setValue (Object newValue, boolean inserting) 1018 { 1019 if (m_setOldValue) m_oldValue = m_value; 1022 m_value = newValue; 1023 m_inserting = inserting; 1024 m_error = false; 1026 if (m_vo.displayType == DisplayType.Text || m_vo.displayType == DisplayType.RowID) 1028 ; 1029 else 1030 Env.setContext(m_vo.ctx, m_vo.WindowNo, m_vo.ColumnName, m_value==null ? null : m_value.toString()); 1031 m_propertyChangeListeners.firePropertyChange(PROPERTY, inserting ? INSERTING : m_oldValue, newValue); 1033 } 1035 1039 public Object getValue() 1040 { 1041 return m_value; 1042 } 1044 1049 public void setOldValue (boolean value) 1050 { 1051 m_setOldValue = value; 1052 } 1054 1058 public Object getOldValue() 1059 { 1060 return m_oldValue; 1061 } 1063 1067 public void setErrorValue (String errorValue) 1068 { 1069 m_errorValue = errorValue; 1070 m_errorValueFlag = true; 1071 } 1073 1077 public String getErrorValue () 1078 { 1079 String s = m_errorValue; 1080 m_errorValue = null; 1081 m_errorValueFlag = false; 1082 return s; 1083 } 1085 1089 public boolean isErrorValue() 1090 { 1091 boolean b = m_errorValueFlag; 1092 m_errorValueFlag = false; 1093 return b; 1094 } 1096 1100 public void setDisplayLength (int length) 1101 { 1102 m_vo.DisplayLength = length; 1103 } 1105 1109 public void setDisplayed (boolean displayed) 1110 { 1111 m_vo.IsDisplayed = displayed; 1112 } 1114 1118 public String toString() 1119 { 1120 StringBuffer sb = new StringBuffer ("MField["); 1121 sb.append(m_vo.ColumnName).append("=").append(m_value).append("]"); 1122 return sb.toString(); 1123 } 1125 1126 1127 1131 public synchronized void removePropertyChangeListener(PropertyChangeListener l) 1132 { 1133 m_propertyChangeListeners.removePropertyChangeListener(l); 1134 } 1135 1136 1140 public synchronized void addPropertyChangeListener(PropertyChangeListener l) 1141 { 1142 m_propertyChangeListeners.addPropertyChangeListener(l); 1143 } 1144} | Popular Tags |