Author: cbegin
Date: Sat Mar 21 21:06:39 2009
New Revision: 757019

URL: http://svn.apache.org/viewvc?rev=757019&view=rev
Log:
Refactored SqlProvider into individual SelectProvider, InsertProvider... etc.

Modified:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/DynamicInlineSqlSource.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java?rev=757019&r1=757018&r2=757019&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
 Sat Mar 21 21:06:39 2009
@@ -81,34 +81,51 @@
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
   public @interface Insert {
-    String[] value() default {};
-    SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = 
"");
+    String[] value();
   }
 
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
   public @interface Update {
-    String[] value() default {};
-    SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = 
"");
+    String[] value();
   }
 
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
   public @interface Delete {
-    String[] value() default {};
-    SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = 
"");
+    String[] value();
   }
 
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
   public @interface Select {
-    String[] value() default {};
-    SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = 
"");
+    String[] value();
   }
 
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
-  public @interface SqlProvider {
+  public @interface InsertProvider {
+    Class type();
+    String method();
+  }
+
+  @Retention(RetentionPolicy.RUNTIME)
+  @Target(ElementType.METHOD)
+  public @interface UpdateProvider {
+    Class type();
+    String method();
+  }
+
+  @Retention(RetentionPolicy.RUNTIME)
+  @Target(ElementType.METHOD)
+  public @interface DeleteProvider {
+    Class type();
+    String method();
+  }
+
+  @Retention(RetentionPolicy.RUNTIME)
+  @Target(ElementType.METHOD)
+  public @interface SelectProvider {
     Class type();
     String method();
   }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/DynamicInlineSqlSource.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/DynamicInlineSqlSource.java?rev=757019&r1=757018&r2=757019&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/DynamicInlineSqlSource.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/DynamicInlineSqlSource.java
 Sat Mar 21 21:06:39 2009
@@ -1,6 +1,5 @@
 package org.apache.ibatis.binding;
 
-import static org.apache.ibatis.annotations.Annotations.SqlProvider;
 import org.apache.ibatis.mapping.Configuration;
 import org.apache.ibatis.mapping.ParameterMapping;
 import org.apache.ibatis.mapping.SqlSource;
@@ -16,12 +15,11 @@
   private Method providerMethod;
   private boolean providerTakesParameterObject;
 
-  public DynamicInlineSqlSource(Configuration config, SqlProvider provider) {
+  public DynamicInlineSqlSource(Configuration config, Object provider) {
     try {
       this.sqlSourceParser = new SqlSourceParser(config);
-      this.providerType = provider.type();
-      Class providerType = provider.type();
-      String providerMethod = provider.method();
+      this.providerType = 
(Class)provider.getClass().getMethod("type").invoke(provider);
+      String providerMethod = 
(String)provider.getClass().getMethod("method").invoke(provider);;
       for (Method m : providerType.getMethods()) {
         if (providerMethod.equals(m.getName())) {
           if (m.getParameterTypes().length < 2

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java?rev=757019&r1=757018&r2=757019&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java
 Sat Mar 21 21:06:39 2009
@@ -215,35 +215,43 @@
   }
 
   private SqlSource getSqlSourceFromAnnotations(Method method) {
-    Class annotationType = getSqlAnnotationType(method);
-    if (annotationType != null) {
-      try {
-        Annotation annotation = method.getAnnotation(annotationType);
-        final String[] strings = (String[]) 
annotation.getClass().getMethod("value").invoke(annotation);
-        final SqlProvider provider = (SqlProvider) 
annotation.getClass().getMethod("sqlProvider").invoke(annotation);
-        if (strings != null && strings.length > 0) {
-          if (provider.type() != void.class) {
-            throw new BindingException("You cannot supply both a static SQL 
and SqlProvider to method named " + method.getName());
-          }
-          StringBuilder sql = new StringBuilder();
-          for (String fragment : strings) {
-            sql.append(fragment);
-            sql.append(" ");
-          }
-          SqlSourceParser parser = new 
SqlSourceParser(configurator.getConfiguration());
-          return parser.parse(sql.toString());
-        } else if (provider.type() != void.class) {
-          return new DynamicInlineSqlSource(configurator.getConfiguration(), 
provider);
+    try {
+      Class sqlAnnotationType = getSqlAnnotationType(method);
+      Class sqlProviderAnnotationType = getSqlProviderAnnotationType(method);
+      if (sqlAnnotationType != null) {
+        if (sqlProviderAnnotationType != null) {
+          throw new BindingException("You cannot supply both a static SQL and 
SqlProvider to method named " + method.getName());
         }
-      } catch (Exception e) {
-        throw new RuntimeException("Could not find value method on SQL 
annotation.  Cause: " + e, e);
+        Annotation sqlAnnotation = method.getAnnotation(sqlAnnotationType);
+        final String[] strings = (String[]) 
sqlAnnotation.getClass().getMethod("value").invoke(sqlAnnotation);
+        StringBuilder sql = new StringBuilder();
+        for (String fragment : strings) {
+          sql.append(fragment);
+          sql.append(" ");
+        }
+        SqlSourceParser parser = new 
SqlSourceParser(configurator.getConfiguration());
+        return parser.parse(sql.toString());
+      } else if (sqlProviderAnnotationType != null) {
+        Annotation sqlProviderAnnotation = 
method.getAnnotation(sqlProviderAnnotationType);
+        return new DynamicInlineSqlSource(configurator.getConfiguration(), 
sqlProviderAnnotation);
       }
+      return null;
+    } catch (Exception e) {
+      throw new RuntimeException("Could not find value method on SQL 
annotation.  Cause: " + e, e);
     }
-    return null;
   }
 
   private Class getSqlAnnotationType(Method method) {
     Class[] types = {Select.class, Insert.class, Update.class, Delete.class};
+    return chooseAnnotationType(method, types);
+  }
+
+  private Class getSqlProviderAnnotationType(Method method) {
+    Class[] types = {SelectProvider.class, InsertProvider.class, 
UpdateProvider.class, DeleteProvider.class};
+    return chooseAnnotationType(method, types);
+  }
+
+  private Class chooseAnnotationType(Method method, Class[] types) {
     for (Class type : types) {
       Annotation annotation = method.getAnnotation(type);
       if (annotation != null) {

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java?rev=757019&r1=757018&r2=757019&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java
 Sat Mar 21 21:06:39 2009
@@ -26,8 +26,7 @@
 
   //======================================================
 
-  @Select(
-      sqlProvider = @SqlProvider(type = BoundBlogSql.class, method = 
"selectBlogsSql"))
+  @SelectProvider(type = BoundBlogSql.class, method = "selectBlogsSql")
   List<Blog> selectBlogsUsingProvider();
 
   //======================================================


Reply via email to