protected void addNotRepeatAdditionalTypeDef(BeanDefinitionBase bd, Class<?> cls){ for(TypeDefinition def : bd.getAdditionalTypeDefs()){ if(def.getType() == cls){ return; } } TypeDefinitionBase def = new TypeDefinitionBase(); def.setType(cls); bd.addAdditionalTypeDef(def); } }
protected void parseAdditionalTypeDef(BeanDefinitionBase bd,Class<?> cls,Bean a){ if(a.additionalTypeDef() != null && a.additionalTypeDef().length > 0){ typeEach: for(Class<?> additional : a.additionalTypeDef()){ for(TypeDefinition def : bd.getAdditionalTypeDefs()){ if(def.getType() == additional){ continue typeEach; } } if(!additional.isAssignableFrom(cls)){ throw new BeanDefinitionException(additional.getName() + " is not assignable from " + cls.getName()); } TypeDefinitionBase def = new TypeDefinitionBase(); def.setType(additional); bd.addAdditionalTypeDef(def); } } }
protected void readBeanTypeDef(BeanContainer container, XmlReader reader, LoaderContext context, BeanDefinitionBase bean) { TypeDefinitionBase def = new TypeDefinitionBase(); String typeClassName = reader.getRequiredAttribute(TYPE_ATTRIBUTE); Class<?> typeClass = tryForName(typeClassName); if (null == typeClass) { throw new BeanDefinitionException("Class '" + typeClassName + "' not found, check source : " + bean.getSource()); } if (!typeClass.isAssignableFrom(bean.getBeanClass())) { throw new BeanDefinitionException("bean's type '" + typeClassName + "' must be assignable from bean's class '" + bean.getBeanClass().getName() + "', source : " + reader.getSource()); } def.setType(typeClass); def.setName(reader.getAttribute(NAME_ATTRIBUTE)); def.setPrimary(reader.getBooleanAttribute(PRIMARY_ATTRIBUTE, false)); def.setOverride(reader.getBooleanAttribute(OVERRIDE_ATTRIBUTE, context.defaultOverride)); bean.addAdditionalTypeDef(def); }