Author: kentam
Date: Thu Feb 10 16:41:53 2005
New Revision: 153307

URL: http://svn.apache.org/viewcvs?view=rev&rev=153307
Log:
Allow the AnnotationMemberTypes.Decimal to be applied to members that return 
float, double or String. Resolves BEEHIVE-203.


Contributor: Hoi Lam


Modified:
    
incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/bean/AnnotationMemberTypes.java
    
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/AnnotationConstraintValidator.java
    
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/constraint/BookControl.java
    
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/constraint/PersonControl.java

Modified: 
incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/bean/AnnotationMemberTypes.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/bean/AnnotationMemberTypes.java?view=diff&r1=153306&r2=153307
==============================================================================
--- 
incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/bean/AnnotationMemberTypes.java
 (original)
+++ 
incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/bean/AnnotationMemberTypes.java
 Thu Feb 10 16:41:53 2005
@@ -88,16 +88,15 @@
 
     /**
      * Member is a Decimal Value.
-     * Member must be a String
-     * REVIEW: should allow floats
+     * Can be applied to a member that returns float, double or String.
      */
     @Target({ElementType.METHOD})
     @Retention(RetentionPolicy.RUNTIME)
     public @interface Decimal
     {
         int places()      default 0;
-        String minValue() default "";
-        String maxValue() default "";
+        double minValue() default OPTIONAL_DOUBLE;
+        double maxValue() default OPTIONAL_DOUBLE;
     }
 
     /**

Modified: 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/AnnotationConstraintValidator.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/AnnotationConstraintValidator.java?view=diff&r1=153306&r2=153307
==============================================================================
--- 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/AnnotationConstraintValidator.java
 (original)
+++ 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/AnnotationConstraintValidator.java
 Thu Feb 10 16:41:53 2005
@@ -404,8 +404,9 @@
             boolean optional)
     {
         if (optional
-                && (value == null || value
-                        .equals(AnnotationMemberTypes.OPTIONAL_INT)))
+                && (value == null ||
+                        value.equals(AnnotationMemberTypes.OPTIONAL_STRING) ||
+                        value.equals(AnnotationMemberTypes.OPTIONAL_INT)))
             return;
 
         int intValue = 0;
@@ -450,47 +451,56 @@
             Object value, boolean optional)
     {
         if (optional
-                && (value == null || value
-                        .equals(AnnotationMemberTypes.OPTIONAL_STRING)))
+                && (value == null ||
+                    value.equals(AnnotationMemberTypes.OPTIONAL_STRING) ||
+                    value.equals(AnnotationMemberTypes.OPTIONAL_FLOAT) ||
+                    value.equals(AnnotationMemberTypes.OPTIONAL_DOUBLE)))
             return;
 
-        if (!(value instanceof String))
+        double doubleValue = 0;
+        String doubleString = null;
+        
+        if (value instanceof String)
         {
-            error("Value assigned to a decimal property must be of type 
java.lang.String.");
+            doubleValue = Double.parseDouble((String)value);
+            doubleString = (String)value;
         }
-
-        String str = (String) value;
-
-        try
+        else if (value instanceof Float)
         {
-            long num = Long.parseLong(str);
-
-            if (num < Long.parseLong(a.minValue()))
-                error("The value, "
-                        + num
-                        + ", assigned to a decimal property is less than the 
the minimum value allowed: "
-                        + a.minValue() + ".");
-
-            if (num > Long.parseLong(a.maxValue()))
-                error("The value, "
-                        + num
-                        + ", assigned to a decimal property exceeds the 
maximum value allowed: "
-                        + a.maxValue() + ".");
+            doubleValue = ((Float)value).doubleValue();
+            doubleString = ((Float)value).toString();
+        }
+        else if (value instanceof Double)
+        {
+            doubleValue = ((Double)value).doubleValue();
+            doubleString = ((Double)value).toString();
         }
-        catch (NumberFormatException nfe)
+        else
         {
             error("The value, "
-                    + str
-                    + ", assigned to a decimal property does not represent a 
number.");
+                    + value
+                    + ", assigned to a decimal property must be of type float, 
double, or java.lang.String.");
         }
 
-        int decimalPos = str.indexOf('.');
+        if (doubleValue < a.minValue())
+            error("The value, "
+                    + doubleValue
+                    + ", assigned to a decimal property is less than the the 
minimum value allowed: "
+                    + a.minValue() + ".");
+
+        if (doubleValue > a.maxValue())
+            error("The value, "
+                    + doubleValue
+                    + ", assigned to a decimal property exceeds the maximum 
value allowed: "
+                    + a.maxValue() + ".");
+
+        int decimalPos = doubleString.indexOf('.');
 
         if (decimalPos == -1)
             return;
 
-        if (str.length() - decimalPos - 1 > a.places())
-            error("The decimal places in the value, " + str
+        if (doubleString.length() - decimalPos - 1 > a.places())
+            error("The decimal places in the value, " + doubleString
                     + ", assigned to a decimal property exceeds " + a.places()
                     + ", the number of decimal places allowed.");
 

Modified: 
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/constraint/BookControl.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/constraint/BookControl.java?view=diff&r1=153306&r2=153307
==============================================================================
--- 
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/constraint/BookControl.java
 (original)
+++ 
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/constraint/BookControl.java
 Thu Feb 10 16:41:53 2005
@@ -24,11 +24,11 @@
     
@AnnotationConstraints.MembershipRule(AnnotationConstraints.MembershipRuleValues.AT_LEAST_ONE)
     public @interface Price
     {
-        @AnnotationMemberTypes.Decimal(minValue="10")
+        @AnnotationMemberTypes.Decimal(minValue=10)
         public String us_price();
-        @AnnotationMemberTypes.Decimal(minValue="10")
+        @AnnotationMemberTypes.Decimal(minValue=10)
         public String ca_price();
-        @AnnotationMemberTypes.Decimal(minValue="10")
+        @AnnotationMemberTypes.Decimal(minValue=10)
         public String eu_price();
        }
 

Modified: 
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/constraint/PersonControl.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/constraint/PersonControl.java?view=diff&r1=153306&r2=153307
==============================================================================
--- 
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/constraint/PersonControl.java
 (original)
+++ 
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/property/constraint/PersonControl.java
 Thu Feb 10 16:41:53 2005
@@ -18,7 +18,7 @@
 public interface PersonControl
 {
 
-       public final static String SAVINGS_MIN_VALUE="100";
+       public final static double SAVINGS_MIN_VALUE=100;
        public final static String ISSUEDATE_MAXVALUE="2007/01/31";
        public final static String EXPIRYDATE_MINVALUE="2007/01/32";
        //public final static String ISSUEDATE_MAXVALUE=null;
@@ -50,7 +50,7 @@
     public @interface Assets
     {
                //JIRA-203 AnnotationMemberTypes.Decimal should support float
-        @AnnotationMemberTypes.Decimal(places=2, minValue=SAVINGS_MIN_VALUE, 
maxValue="10000")
+        @AnnotationMemberTypes.Decimal(places=2, minValue=SAVINGS_MIN_VALUE, 
maxValue=10000)
         public String savings() default "0";
     }
 


Reply via email to