[jboss-cvs] jboss-seam/examples/seampay/src/org/jboss/seam/example/seampay ...
Norman Richards
norman.richards at jboss.com
Sun Dec 17 00:10:40 EST 2006
User: nrichards
Date: 06/12/17 00:10:40
Modified: examples/seampay/src/org/jboss/seam/example/seampay
Account.java Payment.java PaymentProcessor.java
Added: examples/seampay/src/org/jboss/seam/example/seampay
Digits.java DigitsValidator.java
Log:
use BigDecimal, with validation, for dollar values
Revision Changes Path
1.2 +10 -5 jboss-seam/examples/seampay/src/org/jboss/seam/example/seampay/Account.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Account.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/seampay/src/org/jboss/seam/example/seampay/Account.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- Account.java 20 Oct 2006 16:51:26 -0000 1.1
+++ Account.java 17 Dec 2006 05:10:40 -0000 1.2
@@ -4,8 +4,10 @@
import java.util.List;
import java.io.Serializable;
+import java.math.BigDecimal;
+
import javax.persistence.*;
-import org.hibernate.validator.Length;
+import org.hibernate.validator.*;
@Entity
public class Account
@@ -14,7 +16,10 @@
@Id @GeneratedValue
private Long id;
- float balance;
+ @NotNull
+ BigDecimal balance;
+
+ @NotNull
String accountNumber;
//String login;
//String password;
@@ -42,13 +47,13 @@
}
- public float getBalance()
+ public BigDecimal getBalance()
{
return balance;
}
- public float adjustBalance(float amount) {
- balance += amount;
+ public BigDecimal adjustBalance(BigDecimal amount) {
+ balance = balance.add(amount);
return balance;
}
1.5 +14 -4 jboss-seam/examples/seampay/src/org/jboss/seam/example/seampay/Payment.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Payment.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/seampay/src/org/jboss/seam/example/seampay/Payment.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- Payment.java 12 Dec 2006 23:25:08 -0000 1.4
+++ Payment.java 17 Dec 2006 05:10:40 -0000 1.5
@@ -5,6 +5,7 @@
import java.io.Serializable;
import java.util.*;
+import java.math.*;
import org.hibernate.validator.*;
@@ -15,8 +16,10 @@
@Id @GeneratedValue
private Long id;
- // neither @Min or @Pattern work here
- private float amount;
+ @NotNull
+ @Digits(integerDigits=8,fractionalDigits=2)
+ private BigDecimal amount;
+
@NotNull @Length(min=1)
private String payee;
@@ -40,13 +43,20 @@
return id;
}
- public float getAmount() {
+ public BigDecimal getAmount() {
return amount;
}
- public void setAmount(float amount) {
+ public void setAmount(BigDecimal amount) {
this.amount = amount;
}
+ public BigInteger getTesting() {
+ return testing;
+ }
+ public void setTesting(BigInteger testing) {
+ this.testing = testing;
+ }
+
public String getPayee()
{
return payee;
1.4 +3 -1 jboss-seam/examples/seampay/src/org/jboss/seam/example/seampay/PaymentProcessor.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: PaymentProcessor.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/seampay/src/org/jboss/seam/example/seampay/PaymentProcessor.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- PaymentProcessor.java 22 Oct 2006 19:40:02 -0000 1.3
+++ PaymentProcessor.java 17 Dec 2006 05:10:40 -0000 1.4
@@ -8,6 +8,8 @@
import javax.persistence.*;
import javax.ejb.Timer;
+import java.math.BigDecimal;
+
@Name("processor")
public class PaymentProcessor {
@@ -27,7 +29,7 @@
log.info("Timer handle is #0", payment.getTimerHandle());
if (payment.getActive()) {
- float balance = payment.getAccount().adjustBalance(-payment.getAmount());
+ BigDecimal balance = payment.getAccount().adjustBalance(payment.getAmount().negate());
log.info(":: balance is now #0", balance);
payment.setLastPaid(new Date());
1.1 date: 2006/12/17 05:10:40; author: nrichards; state: Exp;jboss-seam/examples/seampay/src/org/jboss/seam/example/seampay/Digits.java
Index: Digits.java
===================================================================
package org.jboss.seam.example.seampay;
import org.hibernate.validator.*;
import java.lang.annotation.*;
@ValidatorClass(DigitsValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Digits {
int integerDigits();
int fractionalDigits() default 0;
String message() default "invalid numeric value";
}
1.1 date: 2006/12/17 05:10:40; author: nrichards; state: Exp;jboss-seam/examples/seampay/src/org/jboss/seam/example/seampay/DigitsValidator.java
Index: DigitsValidator.java
===================================================================
package org.jboss.seam.example.seampay;
import java.math.*;
import org.hibernate.validator.*;
import org.hibernate.mapping.*;
public class DigitsValidator
implements Validator<Digits>
{
int integerDigits;
int fractionalDigits;
public void initialize(Digits configuration) {
integerDigits = configuration.integerDigits();
fractionalDigits = configuration.fractionalDigits();
}
public boolean isValid(Object value) {
if (value==null) {
return true;
}
String stringValue = null;
if (value instanceof String) {
try {
stringValue = stringValue(new BigDecimal((String) value));
} catch (NumberFormatException nfe) {
return false;
}
} else if (value instanceof BigDecimal) {
stringValue = stringValue((BigDecimal) value);
} else if (value instanceof BigInteger) {
stringValue = stringValue((BigInteger) value);
} else {
return false;
}
int pos = stringValue.indexOf(".");
int left = (pos == -1) ? stringValue.length() : pos;
int right = (pos==-1) ? 0 : stringValue.length() - pos -1;
if (left==1 && stringValue.charAt(0) == '0') {
left--;
}
if (left > integerDigits || right > fractionalDigits) {
return false;
}
return true;
}
private String stringValue(BigDecimal number) {
return number.abs().stripTrailingZeros().toPlainString();
}
private String stringValue(BigInteger number) {
return number.abs().toString();
}
}
More information about the jboss-cvs-commits
mailing list