Author: kentam
Date: Wed Mar  2 13:37:27 2005
New Revision: 155961

URL: http://svn.apache.org/viewcvs?view=rev&rev=155961
Log:
Fixes for BEEHIVE-206 and BEEHIVE-207

The ControlMemberTypeAnnotationProcessor is created to validate declarations of 
control member type
annotations.

A date format member has been added to AnnotationMemberTypes.Date, so users can 
customize the date format used
for this annotation.


Contributor: Hoi Lam


Added:
    
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlMemberTypeAnnotationProcessor.java
    
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlMemberTypeAnnotationProcessorFactory.java
Modified:
    
incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/bean/AnnotationMemberTypes.java
    
incubator/beehive/trunk/controls/src/runtime/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
    
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/AnnotationConstraintValidator.java
    
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/strings.properties
    
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=155960&r2=155961
==============================================================================
--- 
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
 Wed Mar  2 13:37:27 2005
@@ -112,8 +112,9 @@
     }
 
     /**
-     * Member is a Date is the Form of:YYYY/MM/DD
+     * Member is a Date in the format specified (default is YYYY/MM/DD)
      * Only valid on a member that returns String
+     * @see java.text.SimpleDateFormat when selecting another date format.
      * Note: JSR175 does not allow java.util.Date as
      * a member type.
      */
@@ -121,6 +122,7 @@
     @Retention(RetentionPolicy.RUNTIME)
     public @interface Date
     {
+       String format() default "yyyy/MM/dd";
         String minValue() default "";
         String maxValue() default "";
     }

Modified: 
incubator/beehive/trunk/controls/src/runtime/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory?view=diff&r1=155960&r2=155961
==============================================================================
--- 
incubator/beehive/trunk/controls/src/runtime/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
 (original)
+++ 
incubator/beehive/trunk/controls/src/runtime/META-INF/services/com.sun.mirror.apt.AnnotationProcessorFactory
 Wed Mar  2 13:37:27 2005
@@ -3,3 +3,4 @@
 #
 
org.apache.beehive.controls.runtime.generator.apt.ControlAnnotationProcessorFactory
 
org.apache.beehive.controls.runtime.generator.apt.ControlClientAnnotationProcessorFactory
+org.apache.beehive.controls.runtime.generator.apt.ControlMemberTypeAnnotationProcessorFactory
\ No newline at end of file

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=155960&r2=155961
==============================================================================
--- 
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
 Wed Mar  2 13:37:27 2005
@@ -353,47 +353,47 @@
 
         try
         {
-            Date date = parseDate((String) value);
+               String format = a.format();
+               
+            Date date = parseDate(format , (String) value);
 
             String minValue = a.minValue();
             if (minValue != null && minValue.length() > 0)
             {
-                Date minDate = parseDate(a.minValue());
+                Date minDate = parseDate(format, a.minValue());
                 if (minDate.compareTo(date) > 0)
                 {
-                    SimpleDateFormat format = new 
SimpleDateFormat("yyyy/MM/dd");
                     error("The date, "
-                            + format.format(date)
+                            + value
                             + ", assigned to a date property is earlier than 
the earliest date allowed: "
-                            + format.format(minDate));
+                            + minValue);
                 }
             }
             String maxValue = a.maxValue();
             if (maxValue != null && maxValue.length() > 0)
             {
-                Date maxDate = parseDate(a.maxValue());
+                Date maxDate = parseDate(format, a.maxValue());
                 if (maxDate.compareTo(date) < 0)
                 {
-                    SimpleDateFormat format = new 
SimpleDateFormat("yyyy/MM/dd");
                     error("The date, "
-                            + format.format(date)
+                            + value
                             + ", assigned to a date property is later than the 
latest date allowed: "
-                            + format.format(maxDate));
+                            + maxValue);
                 }
             }
         }
         catch (ParseException pe)
         {
-            error("Value assigned to a date property must be in the form 
'YYYY/MM/DD'");
+            error("Value assigned to a date property is not in the specified 
format.");
         }
 
     }
 
-    private static Date parseDate(String s) throws ParseException
+    public static Date parseDate(String format, String value) throws 
ParseException
     {
-        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
-        format.setLenient(false);
-        return format.parse(s);
+        SimpleDateFormat sdFormat = new SimpleDateFormat(format);
+        sdFormat.setLenient(false);
+        return sdFormat.parse(value);
     }
 
     /**

Added: 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlMemberTypeAnnotationProcessor.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlMemberTypeAnnotationProcessor.java?view=auto&rev=155961
==============================================================================
--- 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlMemberTypeAnnotationProcessor.java
 (added)
+++ 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlMemberTypeAnnotationProcessor.java
 Wed Mar  2 13:37:27 2005
@@ -0,0 +1,95 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import org.apache.beehive.controls.api.bean.AnnotationMemberTypes;
+import org.apache.beehive.controls.runtime.generator.AptControlInterface;
+import 
org.apache.beehive.controls.runtime.generator.apt.TwoPhaseAnnotationProcessor;
+import org.apache.beehive.controls.runtime.bean.AnnotationConstraintValidator;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+import com.sun.mirror.declaration.Declaration;
+import com.sun.mirror.declaration.MethodDeclaration;
+import com.sun.mirror.type.VoidType;
+
+public class ControlMemberTypeAnnotationProcessor extends 
TwoPhaseAnnotationProcessor
+{
+    /**
+     * @param atds
+     * @param env
+     */
+    public ControlMemberTypeAnnotationProcessor(
+            Set<AnnotationTypeDeclaration> atds,
+            AnnotationProcessorEnvironment env)
+    {
+        super(atds, env);
+    }
+
+    public void check()
+    {
+        super.check();
+        
+    }
+    public void check(Declaration decl)
+    {
+        if (decl.getAnnotation(AnnotationMemberTypes.Date.class) != null)
+        {
+               checkDate(decl);
+        }
+    }
+
+    public void generate(Declaration decl)
+    {
+    }
+
+    public void checkDate(Declaration decl)
+    {
+       AnnotationMemberTypes.Date date = 
decl.getAnnotation(AnnotationMemberTypes.Date.class);
+       
+       try
+       {
+               String dateValue = date.minValue();
+               String format = date.format();
+               
+               //Validate the date format specified
+               SimpleDateFormat sdFormat = new SimpleDateFormat(date.format());
+
+               //Validate that the date specified is in the specified format.
+               if (dateValue != null && dateValue.length() > 0)
+                       AnnotationConstraintValidator.parseDate(format, 
dateValue);
+               dateValue = date.maxValue();
+               if (dateValue != null && dateValue.length() > 0)
+                       AnnotationConstraintValidator.parseDate(format, 
dateValue);
+       } 
+       catch (ParseException pe)
+       {
+               printError( decl, 
"control.member.type.invalid.date.value.error");
+       }
+       catch (Exception e)
+       {
+               printError( decl, 
"control.member.type.invalid.date.format.error");             
+       }
+
+    }
+}

Added: 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlMemberTypeAnnotationProcessorFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlMemberTypeAnnotationProcessorFactory.java?view=auto&rev=155961
==============================================================================
--- 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlMemberTypeAnnotationProcessorFactory.java
 (added)
+++ 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/ControlMemberTypeAnnotationProcessorFactory.java
 Wed Mar  2 13:37:27 2005
@@ -0,0 +1,61 @@
+package org.apache.beehive.controls.runtime.generator.apt;
+
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Set;
+
+import org.apache.beehive.controls.api.bean.AnnotationMemberTypes.Date;
+
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorFactory;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+
+public class ControlMemberTypeAnnotationProcessorFactory implements 
AnnotationProcessorFactory
+{
+    private static final Collection<String> _supportedAnnotations =
+            Collections.unmodifiableCollection(
+                Arrays.asList(new String[] {
+                               
"org.apache.beehive.controls.api.bean.AnnotationMemberTypes.Date"
+                }));
+
+    private static final Collection<String> _supportedOptions =
+            Collections.unmodifiableCollection(
+                Arrays.asList( new String[0] ) );
+
+    public Collection<String> supportedOptions()
+    {
+        return _supportedOptions;
+    }
+
+    public Collection<String> supportedAnnotationTypes()
+    {
+        return _supportedAnnotations;
+    }
+
+    public AnnotationProcessor getProcessorFor(Set<AnnotationTypeDeclaration> 
atds,
+                                               AnnotationProcessorEnvironment 
env)
+    {
+        return new ControlMemberTypeAnnotationProcessor(atds, env);   
+    }
+}

Modified: 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/strings.properties
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/strings.properties?view=diff&r1=155960&r2=155961
==============================================================================
--- 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/strings.properties
 (original)
+++ 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/apt/strings.properties
 Wed Mar  2 13:37:27 2005
@@ -42,3 +42,9 @@
 propertyset.illegal.argument.error=\
 A value assigned to a control property does not satisfy \
 its constraints. Cause: {0} 
+
+control.member.type.invalid.date.value.error=\
+The value assigned to a date property must be in the format specified.
+
+control.member.type.invalid.date.format.error=\
+The date format specified is not valid, please see java.text.SimpleDateFormat 
for valid formats.
\ No newline at end of file

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=155960&r2=155961
==============================================================================
--- 
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
 Wed Mar  2 13:37:27 2005
@@ -20,7 +20,7 @@
 
        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 EXPIRYDATE_MINVALUE="2007/02/28";
        //public final static String ISSUEDATE_MAXVALUE=null;
 
     @PropertySet


Reply via email to