for(Annotation a : v.getAnnotations()) { if(a.annotationType().isAnnotationPresent(AInject.class)){ found = a; Inject inject = v.getAnnotation(Inject.class); if(!force && null == inject) { return null; if (!v.getType().isPrimitive()) { Object rawValue = v.getRawValue(bean); if (null != rawValue && !(rawValue instanceof DummyBean)) { return null; return resolveInjectValue(beanFactory, bd, v.getName(), v.getType(), v.getGenericType(), v.getAnnotations(), beanName);
default Object getRawValue(Object bean) { return getValue(bean); }
@Override public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException { String name = attribute.getName(); MAttribute a = this.attributes.get(name); if(null == a) { throw new AttributeNotFoundException("Attribute '" + name + "' not found in '" + bean.getClass() + "'"); } //todo : convert the value. try{ a.valued().setValue(bean, attribute.getValue()); }catch(ReflectException e) { throw new ReflectionException(e); }catch(Exception e) { throw new MBeanException(e); } }
@Override public boolean resolveInjectValue(BeanDefinition bd, Object bean, ReflectValued v, Annotation a, Out<Object> value) { if(!(v.getType().equals(Dyna.class) || v.getType().equals(Dao.class))) { return false; } if(!bd.isPrimary()) { return false; } if (v.getType().equals(Dao.class)) { value.set(dao); return true; } Class<?>[] types = Types.getActualTypeArguments(v.getGenericType()); if (types.length != 1) { return false; } Class<?> type = types[0]; if (type.equals(Dao.class)) { value.set(dao); return true; } return false; }
protected void doBeanConfigureDynaProperty(Object bean, ReflectValued v, String key, String defaultValue) { Class<?> type = v.getType(); Property value = (Property)v.getValue(bean); Class<?> valueType = Types.getActualTypeArgument(v.getGenericType()); v.setValue(bean, value); }else if(!Strings.isEmpty(defaultValue)) { v.setValue(bean, Converts.convert(defaultValue, v.getType(), v.getGenericType()));
private void configureNested(Object bean, String keyPrefix, ReflectValued member, Configurable.Nested nested) { String nestedPrefix = nested.prefix(); if(Strings.isEmpty(nestedPrefix)) { nestedPrefix = Strings.lowerUnderscore(member.getName()); if(nestedPrefix.endsWith("_config")) { nestedPrefix = Strings.removeEnd(nestedPrefix, "_config"); } } String fullKeyPrefix = keyPrefix(keyPrefix + nestedPrefix); Object nestedBean = member.getValue(bean); BeanType nestedType; if(null == nestedBean) { nestedType = BeanType.of(member.getType()); nestedBean = nestedType.newInstance(); member.setValue(bean, nestedBean); }else{ nestedType = BeanType.of(nestedBean.getClass()); } configure(nestedBean, nestedType, fullKeyPrefix); }
protected boolean doBeanConfigureByKey(Object bean, ReflectValued v, String key, String defaultValue) { if(Property.class.isAssignableFrom(v.getType())) { doBeanConfigureDynaProperty(bean, v, key, defaultValue); return true; if(v.getType().isArray()) { String[] array = config.getArrayProperty(key); v.setValue(bean, array); return true; if(List.class.equals(v.getType())) { String[] array = config.getArrayProperty(key); List<String> list = new ArrayList<>(); Collections2.addAll(list, array); v.setValue(bean, list); return true; if(Set.class.equals(v.getType())) { String[] array = config.getArrayProperty(key); Set<String> set = new LinkedHashSet<>(); Collections2.addAll(set, array); v.setValue(bean, set); return true; try { Object value; if(Classes.isSimpleValueType(v.getType())) {
protected KeyAndDataSource resolveSqlIdentity(BeanDefinition bd, ReflectValued v, Inject inject) { String key = Strings.firstNotEmpty(inject.name(), inject.value()); SqlKey sk = v.getAnnotation(SqlKey.class); if (null != sk) { return resolveSqlIdentity(bd, v, sk); } if (Strings.isEmpty(key)) { key = v.getName(); } return new KeyAndDataSource(key, null); }
@Override public boolean resolveInjectValue(BeanDefinition bd, Object bean, ReflectValued v, Annotation a, Out<Object> value) { if (!leap.orm.dao.DaoCommand.class.equals(v.getType())) { return false; } KeyAndDataSource kds; if (a.annotationType().equals(Inject.class)) { kds = resolveSqlIdentity(bd, v, (Inject) a); } else if (a.annotationType().equals(SqlKey.class)) { kds = resolveSqlIdentity(bd, v, (SqlKey) a); } else { return false; } SqlCommand sql = sqls.tryGetSqlCommand(kds.key); if (null == sql) { throw new BeanCreationException("Sql key '" + kds.key + "' not found, check the bean : " + bd); } Dao dao; if (!Strings.isEmpty(sql.getDataSourceName())) { dao = Dao.get(sql.getDataSourceName()); } else if (!Strings.isEmpty(kds.dataSource)) { dao = Dao.get(kds.dataSource); } else { dao = Dao.get(); } value.set(new SimpleDaoCommand(dao, sql)); return true; }
protected void doBeanConfigure(Object bean, ReflectValued v, String keyPrefix, ConfigProperty a) { String defaultValue = null == a ? null : a.defaultValue(); if(null != a) { String[] keys = a.key(); if(keys.length == 0) { keys = a.value(); } if(keys.length > 0) { for(String key : keys) { if(doBeanConfigureByKey(bean, v, key(keyPrefix, key), defaultValue)) { break; } } return; } } if(doBeanConfigureByKey(bean, v, keyPrefix + v.getName(), defaultValue)) { return; } if(doBeanConfigureByKey(bean, v, keyPrefix + Strings.lowerHyphen(v.getName()), defaultValue)) { return; } if(doBeanConfigureByKey(bean, v, keyPrefix + Strings.lowerUnderscore(v.getName()), defaultValue)) { return; } }
return false; if(v.getType().isArray() && Class.class.isAssignableFrom(v.getType().getComponentType())){ java.lang.reflect.Type type = v.getGenericType(); if(type instanceof GenericArrayType){ java.lang.reflect.Type componentType = ((GenericArrayType) type).getGenericComponentType(); if(List.class.isAssignableFrom(v.getType()) && Class.class.isAssignableFrom(Types.getActualTypeArgument(v.getGenericType()))){ java.lang.reflect.Type elementType = v.getGenericType(); if(elementType instanceof ParameterizedType){ java.lang.reflect.Type actualClass = ((ParameterizedType) elementType).getActualTypeArguments()[0];
@Override public Object getAttribute(String name) throws AttributeNotFoundException, MBeanException, ReflectionException { MAttribute a = this.attributes.get(name); if(null == a) { throw new AttributeNotFoundException("Attribute '" + name + "' not found in '" + bean.getClass() + "'"); } try{ Object value = a.valued().getValue(bean); if(a.isOpen()) { value = MConverts.convert(value, a.getOpenType()); } return value; }catch(ReflectException e) { throw new ReflectionException(e); }catch(Exception e) { throw new MBeanException(e); } }