[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