HibernateStatementCompareField.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package com.primeton.dgs.kernel.core.dao.hibernate;
  2. import java.math.BigDecimal;
  3. import java.math.BigInteger;
  4. import java.util.concurrent.atomic.AtomicInteger;
  5. public class HibernateStatementCompareField extends HibernateStatementField
  6. {
  7. private static final long serialVersionUID = 1L;
  8. private String compare;
  9. private String compareProperty;
  10. private String compareValue;
  11. public static final String AVAILABLE_COMPARE = "eq,ne,gt,ge,lt,le";
  12. public String getCompare()
  13. {
  14. return this.compare;
  15. }
  16. public void setCompare(String compare) {
  17. this.compare = compare;
  18. }
  19. public String getCompareProperty() {
  20. return this.compareProperty;
  21. }
  22. public void setCompareProperty(String compareProperty) {
  23. this.compareProperty = compareProperty;
  24. }
  25. public String getCompareValue() {
  26. return this.compareValue;
  27. }
  28. public void setCompareValue(String compareValue) {
  29. this.compareValue = compareValue;
  30. }
  31. public HibernateStatementCompareField()
  32. {
  33. }
  34. public HibernateStatementCompareField(String compare, String compareProperty, String compareValue) {
  35. this.compare = compare;
  36. this.compareProperty = compareProperty;
  37. this.compareValue = compareValue;
  38. }
  39. private static int getCompareOperateCode(String compare)
  40. {
  41. String[] ac = "eq,ne,gt,ge,lt,le".split(",");
  42. for (int i = 0; i < ac.length; i++) {
  43. if (ac[i].equalsIgnoreCase(compare)) {
  44. return i;
  45. }
  46. }
  47. return -1;
  48. }
  49. public static boolean isAvailableCompare(String compare)
  50. {
  51. return getCompareOperateCode(compare) >= 0;
  52. }
  53. private static boolean match(String compare, Object value, String compareValue)
  54. throws NumberFormatException
  55. {
  56. if (value == null) {
  57. return false;
  58. }
  59. int reslt = -1;
  60. if ((value instanceof String)) {
  61. reslt = ((String)value).compareTo(compareValue);
  62. } else if ((value instanceof Integer)) {
  63. reslt = ((Integer)value).compareTo(new Integer(compareValue));
  64. } else if ((value instanceof Long)) {
  65. reslt = ((Long)value).compareTo(new Long(compareValue));
  66. } else if ((value instanceof Float)) {
  67. reslt = ((Float)value).compareTo(new Float(compareValue));
  68. } else if ((value instanceof Double)) {
  69. reslt = ((Double)value).compareTo(new Double(compareValue));
  70. } else if ((value instanceof Short)) {
  71. reslt = ((Short)value).compareTo(new Short(compareValue));
  72. } else if ((value instanceof BigInteger)) {
  73. reslt = ((BigInteger)value).compareTo(new BigInteger(compareValue));
  74. } else if ((value instanceof BigDecimal)) {
  75. reslt = ((BigDecimal)value).compareTo(new BigDecimal(compareValue));
  76. } else if ((value instanceof Boolean)) {
  77. int intBool = ((Boolean)value).booleanValue() ? 1 : 0;
  78. int intCompareBool = Boolean.valueOf(compareValue).booleanValue() ? 1 : 0;
  79. reslt = intBool - intCompareBool;
  80. }
  81. int code = getCompareOperateCode(compare);
  82. if (reslt == 0) {
  83. if ((code == 0) || (code == 3) || (code == 5))
  84. return true;
  85. }
  86. else if (reslt > 0) {
  87. if ((code == 1) || (code == 2) || (code == 3))
  88. return true;
  89. }
  90. else if ((reslt < 0) && (
  91. (code == 1) || (code == 4) || (code == 5))) {
  92. return true;
  93. }
  94. return false;
  95. }
  96. @Override
  97. public StringBuffer getRawText(Object vo)
  98. {
  99. return getText(vo, true, new AtomicInteger(-1));
  100. }
  101. @Override
  102. public StringBuffer getText(Object vo, AtomicInteger index)
  103. {
  104. return getText(vo, false, index);
  105. }
  106. private StringBuffer getText(Object vo, boolean isRaw, AtomicInteger index)
  107. {
  108. StringBuffer sb = null;
  109. Object actualValue = getBeanProperty(vo, this.compareProperty);
  110. if (match(this.compare, actualValue, this.compareValue)) {
  111. sb = isRaw ? getChildrenRawText(vo) : getChildrenText(vo, index);
  112. }
  113. return sb;
  114. }
  115. }