예제 #1
0
 @Override
 public boolean innerSupports(ParamMetaData metaData) {
   return List.class == metaData.getParamType()
       || Collection.class == metaData.getParamType()
       || (!Modifier.isAbstract(metaData.getParamType().getModifiers())
           && List.class.isAssignableFrom(metaData.getParamType()));
 }
예제 #2
0
 public boolean supports(ParamMetaData metaData) {
   if (ClassUtils.isPrimitiveOrWrapper(metaData.getParamType())) {
     return true;
   }
   SimpleTypeConverter simpleTypeConverter = SafedTypeConverterFactory.getCurrentConverter();
   return simpleTypeConverter.findCustomEditor(metaData.getParamType(), null) != null
       || simpleTypeConverter.getDefaultEditor(metaData.getParamType()) != null;
 }
예제 #3
0
 @SuppressWarnings("unchecked")
 private static Object resolveArray(
     Invocation inv, ParamMetaData metaData, Class<?> compnentType) {
   if (compnentType == MultipartFile.class) {
     String filterName = metaData.getParamName();
     if (filterName == null) {
       filterName = "";
     }
     if (inv.getRequest() instanceof MultipartRequest) {
       List<MultipartFile> files = new LinkedList<MultipartFile>();
       MultipartRequest multipartRequest = (MultipartRequest) inv.getRequest();
       Iterator<String> names = multipartRequest.getFileNames();
       while (names.hasNext()) {
         String name = names.next();
         if (name.startsWith(filterName)) {
           files.add(multipartRequest.getFile(name));
         }
       }
       return files.toArray(new MultipartFile[0]);
     } else {
       if (logger.isDebugEnabled()) {
         logger.debug(
             "cann't "
                 + "set MultipartFile param to method "
                 + ", the request is not a MultipartRequest");
       }
     }
   } else {
     Object toConvert = null;
     for (String paramName : metaData.getParamNames()) {
       if (paramName != null) {
         toConvert = inv.getRequest().getParameterValues(paramName);
         if (toConvert != null) {
           break;
         }
       }
     }
     if (toConvert != null) {
       if (((String[]) toConvert).length == 1) {
         toConvert = ((String[]) toConvert)[0].split(",");
       }
       Class<?> arrayType;
       if (metaData.getParamType().isArray()) {
         arrayType = metaData.getParamType();
       } else {
         arrayType = arrayTypeMap.get(compnentType);
         if (arrayType == null) {
           arrayType = Array.newInstance((Class<?>) compnentType, 0).getClass();
         }
       }
       TypeConverter typeConverter = SafedTypeConverterFactory.getCurrentConverter();
       Object array = typeConverter.convertIfNecessary(toConvert, arrayType);
       return array;
     }
   }
   return Array.newInstance((Class<?>) compnentType, 0);
 }
예제 #4
0
 @Override
 @SuppressWarnings("unchecked")
 protected Collection create(ParamMetaData metaData, int len) throws Exception {
   if (metaData.getParamType().isInterface()) {
     return new HashSet<Object>(len);
   } else {
     return (Collection<?>) metaData.getParamType().getConstructor().newInstance();
   }
 }
예제 #5
0
 public boolean supports(ParamMetaData metaData) {
   boolean result = metaData.getParamType() == Mvc.class;
   if (result) {
     if (!metaData.getControllerClass().getName().startsWith("com.sinosoft.one.mvc")) {
       throw new IllegalStateException("Mvc is not allowed as a method parameter:" + metaData);
     }
   }
   return result;
 }
예제 #6
0
 public boolean supports(ParamMetaData metaData) {
   boolean supports =
       Map.class == metaData.getParamType() || HashMap.class == metaData.getParamType();
   if (supports) {
     Class<?>[] generics =
         compileGenericParameterTypesDetail(metaData.getMethod(), metaData.getIndex());
     if (generics == null || generics.length == 0) {
       throw new IllegalArgumentException(
           "please use generic for "
               + metaData.getParamType().getName()
               + " ["
               + metaData.getControllerClass().getName()
               + "."
               + metaData.getMethod().getName()
               + "]");
     }
     metaData.setUserObject(this, generics);
   }
   return supports;
 }
예제 #7
0
 @SuppressWarnings("unchecked")
 public Object resolve(Invocation inv, ParamMetaData metaData) {
   for (String paramName : metaData.getParamNames()) {
     if (paramName != null) {
       String value = inv.getParameter(paramName);
       if (value != null) {
         return Enum.valueOf((Class<? extends Enum>) metaData.getParamType(), value);
       }
     }
   }
   return null;
 }
예제 #8
0
 public Date resolve(Invocation inv, ParamMetaData metaData) throws Exception {
   String text = null;
   for (String paramName : metaData.getParamNames()) {
     if (paramName != null) {
       text = inv.getParameter(paramName);
       if (text != null && (text = text.trim()).length() > 0) {
         break;
       }
     }
   }
   Date date = resolveUtilDate(text, metaData);
   return DatePatterns.changeType(date, metaData.getParamType());
 }
예제 #9
0
 public Object resolve(Invocation inv, ParamMetaData metaData) {
   Object bean = MvcBeanUtils.instantiateClass(metaData.getParamType());
   ServletRequestDataBinder binder;
   if (!metaData.isAnnotationPresent(Param.class)) {
     binder = new ServletRequestDataBinder(bean);
   } else {
     binder = new ServletRequestDataBinder(bean, metaData.getParamName());
   }
   binder.bind(inv.getRequest());
   String bindingResultName =
       BindingResult.MODEL_KEY_PREFIX + metaData.getParamName() + "BindingResult";
   inv.addModel(bindingResultName, binder.getBindingResult());
   return bean;
 }
예제 #10
0
    public Object resolve(Invocation inv, ParamMetaData metaData) {
      String toConvert = null;
      //
      FlashParam flashParam = metaData.getAnnotation(FlashParam.class);
      if (flashParam != null) {
        toConvert = inv.getFlash().get(flashParam.value());
      }

      for (String paramName : metaData.getParamNames()) {
        if (paramName != null) {
          toConvert = inv.getRequest().getParameter(paramName);
          if (toConvert != null) {
            break;
          }
        }
      }
      if (toConvert == null) {
        DefValue defValudeAnnotation = metaData.getAnnotation(DefValue.class);
        if (defValudeAnnotation != null
            && !DefValue.NATIVE_DEFAULT.equals(defValudeAnnotation.value())) {
          toConvert = defValudeAnnotation.value();
        }
      }
      if (toConvert != null) {
        SimpleTypeConverter typeConverter = SafedTypeConverterFactory.getCurrentConverter();
        return typeConverter.convertIfNecessary(toConvert, metaData.getParamType());
      }
      if (metaData.getParamType().isPrimitive()) {
        // 对这最常用的类型做一下if-else判断,其他类型就简单使用converter来做吧
        if (metaData.getParamType() == int.class) {
          return Integer.valueOf(0);
        } else if (metaData.getParamType() == long.class) {
          return Long.valueOf(0);
        } else if (metaData.getParamType() == boolean.class) {
          return Boolean.FALSE;
        } else if (metaData.getParamType() == double.class) {
          return Double.valueOf(0);
        } else if (metaData.getParamType() == float.class) {
          return Float.valueOf(0);
        } else {
          SimpleTypeConverter typeConverter = SafedTypeConverterFactory.getCurrentConverter();
          return typeConverter.convertIfNecessary("0", metaData.getParamType());
        }
      }
      return null;
    }
예제 #11
0
 private static boolean addIndexAliasParamNameIfNeccessary(ParamMetaData metaData) {
   Class<?>[] paramTypes = metaData.getMethod().getParameterTypes();
   int index = metaData.getIndex(); // index是从0开始的
   int uriParamIndex = 0; // uriParamIndex,有效的值是从**1**开始的
   int breakIndex = 0; // breakIndex从0开始的
   for (; breakIndex < paramTypes.length && breakIndex <= index; breakIndex++) {
     Class<?> type = paramTypes[breakIndex];
     if (type.isArray()) {
       type = type.getComponentType();
     } else if (Collection.class.isAssignableFrom(type)) {
       Class<?>[] generics = compileGenericParameterTypesDetail(metaData.getMethod(), breakIndex);
       if (generics == null) {
         return false;
       }
       Assert.isTrue(generics.length > 0);
       type = generics[0];
     }
     if (ClassUtils.isPrimitiveOrWrapper(type)
         || type == String.class
         || Date.class.isAssignableFrom(type)) {
       uriParamIndex++;
     }
   }
   if ((breakIndex - 1) == index && uriParamIndex > 0) {
     String alias = "$" + uriParamIndex;
     metaData.addAliasParamName(alias);
     if (logger.isDebugEnabled()) {
       logger.debug(
           "add index alias paramName: '"
               + alias
               + "' for "
               + metaData.getControllerClass().getName()
               + "."
               + metaData.getMethod().getName()
               + "(..."
               + metaData.getParamType()
               + "[index="
               + breakIndex
               + "] ...)");
     }
     return true;
   }
   return false;
 }
예제 #12
0
 public final boolean supports(ParamMetaData metaData) {
   if (innerSupports(metaData)) {
     Class<?>[] generics =
         compileGenericParameterTypesDetail(metaData.getMethod(), metaData.getIndex());
     if (generics == null || generics.length == 0) {
       throw new IllegalArgumentException(
           "please use generic for "
               + metaData.getParamType().getName()
               + " ["
               + metaData.getControllerClass().getName()
               + "."
               + metaData.getMethod().getName()
               + "]");
     }
     metaData.setUserObject(this, generics[0]);
     return true;
   }
   return false;
 }
예제 #13
0
 public boolean supports(ParamMetaData metaData) {
   return MessageSource.class == metaData.getParamType();
 }
예제 #14
0
 public boolean supports(ParamMetaData metaData) {
   return Date.class == metaData.getParamType()
       || java.sql.Date.class == metaData.getParamType()
       || java.sql.Time.class == metaData.getParamType()
       || java.sql.Timestamp.class == metaData.getParamType();
 }
예제 #15
0
 public boolean supports(ParamMetaData metaData) {
   return HttpServletResponse.class == metaData.getParamType()
       || ServletResponse.class == metaData.getParamType();
 }
예제 #16
0
 public boolean supports(ParamMetaData metaData) {
   return ServletContext.class == metaData.getParamType();
 }
예제 #17
0
 public boolean supports(ParamMetaData metaData) {
   return HttpSession.class == metaData.getParamType();
 }
예제 #18
0
 public Object resolve(Invocation inv, ParamMetaData metaData) {
   return resolveArray(inv, metaData, metaData.getParamType().getComponentType());
 }
예제 #19
0
 public boolean supports(ParamMetaData metaData) {
   return metaData.getParamType().isArray();
 }
예제 #20
0
 public boolean supports(ParamMetaData metaData) {
   return String.class == metaData.getParamType();
 }
예제 #21
0
 public boolean supports(ParamMetaData metaData) {
   return ApplicationContext.class == metaData.getParamType()
       || WebApplicationContext.class == metaData.getParamType();
 }
예제 #22
0
 public boolean supports(ParamMetaData metaData) {
   return !Modifier.isAbstract(metaData.getParamType().getModifiers());
 }
예제 #23
0
 public boolean supports(ParamMetaData metaData) {
   return MultipartHttpServletRequest.class == metaData.getParamType();
 }
예제 #24
0
 public boolean supports(ParamMetaData metaData) {
   return MultipartFile.class == metaData.getParamType();
 }
예제 #25
0
 public boolean supports(ParamMetaData metaData) {
   return BindingResult.class == metaData.getParamType()
       || Errors.class == metaData.getParamType();
 }
예제 #26
0
 public boolean supports(ParamMetaData metaData) {
   return Invocation.class == metaData.getParamType();
 }