public static <T> T create( Class<T> clazz, DDMFormValues ddmFormValues, Locale locale) { Object proxy = ProxyUtil.newProxyInstance( clazz.getClassLoader(), new Class<?>[] {clazz}, new DDMFormInstanceInvocationHandler<>( clazz, ddmFormValues, locale)); return clazz.cast(proxy); }
protected String toString(String ddmFormFieldType, String valueString) { if (Objects.equals(ddmFormFieldType, DDMFormFieldType.SELECT)) { return joinJSONArrayString(valueString); } return valueString; }
protected Object convert( Class<?> returnType, String ddmFormFieldType, List<DDMFormFieldValue> ddmFormFieldValues) { if (returnType.isArray()) { return toArray( returnType.getComponentType(), ddmFormFieldType, ddmFormFieldValues); } return toPrimitive( returnType, ddmFormFieldType, ddmFormFieldValues.get(0)); }
protected Object toPrimitive( Class<?> returnType, String ddmFormFieldType, DDMFormFieldValue ddmFormFieldValue) { Value value = ddmFormFieldValue.getValue(); if ((returnType == boolean.class) || (returnType == Boolean.class)) { return toBoolean(value); } if ((returnType == double.class) || (returnType == Double.class)) { return toDouble(value); } if ((returnType == float.class) || (returnType == Float.class)) { return toFloat(value); } if ((returnType == int.class) || (returnType == Integer.class)) { return toInteger(value); } if ((returnType == long.class) || (returnType == Long.class)) { return toLong(value); } if ((returnType == short.class) || (returnType == Short.class)) { return toShort(value); } if (returnType == String.class) { return toString(ddmFormFieldType, value.getString(_locale)); } return toDynamicForm(returnType, ddmFormFieldValue); }
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (!method.isAnnotationPresent(DDMFormField.class)) { return null; } DDMFormFieldFactoryHelper ddmFormFieldFactoryHelper = new DDMFormFieldFactoryHelper(_ddmFormFactoryHelper, method); List<DDMFormFieldValue> ddmFormFieldValues = _ddmFormFieldValuesMap.get( ddmFormFieldFactoryHelper.getDDMFormFieldName()); if (ListUtil.isEmpty(ddmFormFieldValues)) { LocalizedValue predefinedValue = ddmFormFieldFactoryHelper.getDDMFormFieldPredefinedValue(); return convert( method.getReturnType(), ddmFormFieldFactoryHelper.getDDMFormFieldType(), predefinedValue.getString(_locale)); } return convert( method.getReturnType(), ddmFormFieldFactoryHelper.getDDMFormFieldType(), ddmFormFieldValues); }
protected Object toDynamicForm( Class<?> clazz, DDMFormFieldValue ddmFormFieldValue) { DDMFormValues ddmFormValues = new DDMFormValues( DDMFormFactory.create(clazz)); ddmFormValues.setAvailableLocales( _ddmFormValues.getAvailableLocales()); ddmFormValues.setDefaultLocale(_ddmFormValues.getDefaultLocale()); ddmFormValues.setDDMFormFieldValues( ddmFormFieldValue.getNestedDDMFormFieldValues()); Object proxy = ProxyUtil.newProxyInstance( clazz.getClassLoader(), new Class<?>[] {clazz}, new DDMFormInstanceInvocationHandler<>( clazz, ddmFormValues, _locale)); return clazz.cast(proxy); }