01: /**
02: * Objective Database Abstraction Layer (ODAL)
03: * Copyright (c) 2004, The ODAL Development Group
04: * All rights reserved.
05: * For definition of the ODAL Development Group please refer to LICENCE.txt file
06: *
07: * Distributable under LGPL license.
08: * See terms of license at gnu.org.
09: */package com.completex.objective.components.persistency.rule.impl;
10:
11: import com.completex.objective.components.persistency.PersistentEntry;
12: import com.completex.objective.components.persistency.rule.RuleException;
13:
14: import java.math.BigDecimal;
15:
16: /**
17: * @author Gennady Krizhevsky
18: */
19: public class NumberSizeFieldValidator extends AbstractFieldValidator {
20:
21: public static final BigDecimal MIN = new BigDecimal(0);
22: private BigDecimal minSize = MIN;
23: private BigDecimal maxSize;
24:
25: public NumberSizeFieldValidator(BigDecimal minSize,
26: BigDecimal maxSize) {
27:
28: if (minSize != null) {
29: this .minSize = minSize;
30: }
31:
32: // assert maxSize != null : "maxSize == null";
33: // assert maxSize.compareTo(this.minSize) >= 0 : "minSize > maxSize";
34:
35: this .maxSize = maxSize;
36: }
37:
38: protected void performValidation(PersistentEntry entry,
39: boolean verbose) throws RuleException {
40: // RuleHelper.assertRecordAndIndex(entry, fieldIndex);
41:
42: if (!entry.isDirty() || entry.getValue() == null) {
43: return;
44: }
45:
46: int decimalDigits = entry.getColumn().getDecimalDigits();
47: if (decimalDigits == 0) {
48: long value = entry.getNumber().longValue();
49: assertValue(value, entry.getColumn().getColumnName());
50: } else {
51: double value = entry.getNumber().doubleValue();
52: assertValue(value, entry.getColumn().getColumnName());
53: }
54: }
55:
56: private void assertValue(long value, String fieldName)
57: throws RuleException {
58: if (value < minSize.longValue()) {
59: throwMin(fieldName, new Long(value));
60: }
61: if (value > maxSize.longValue()) {
62: throwMax(fieldName, new Long(value));
63: }
64: }
65:
66: private void assertValue(double value, String fieldName)
67: throws RuleException {
68: if (value < minSize.longValue()) {
69: throwMin(fieldName, new Double(value));
70: }
71: if (value > maxSize.longValue()) {
72: throwMax(fieldName, new Double(value));
73: }
74: }
75:
76: private void throwMax(String fieldName, Number value)
77: throws RuleException {
78: String message = "Field [" + fieldName
79: + "] size exceeds allowed maximum - [" + maxSize + "]";
80: String detailedMessage = "Field [" + fieldName + "] value ["
81: + value + "] exceeds allowed maximum - [" + maxSize
82: + "]";
83: throw new RuleException(message, detailedMessage)
84: .setFieldName(fieldName);
85: }
86:
87: private void throwMin(String fieldName, Number value)
88: throws RuleException {
89: String message = "Field [" + fieldName
90: + "] size is less than allowed minimum - [" + minSize
91: + "]";
92: String detailedMessage = "Field [" + fieldName + "] value ["
93: + value + "] is less than allowed minimum - ["
94: + minSize + "]";
95: throw new RuleException(message, detailedMessage)
96: .setFieldName(fieldName);
97: }
98:
99: }
|