private void buildMetaValues( AnyKeyCollection any, MetaBeanBuilder metaBeanBuilder, ControllerBuilder controllerBuilder, ComponentRegistry componentRegistry) throws InstantiationException, IllegalAccessException { if (any.metaValuesDefinition() == MetaValuesDefinition.class) { if (any.metaValues().length == 0) throw new MappingException("meta values is required"); for (MetaValue value : any.metaValues()) { super.applyInternalConfiguration( new ImportBeanEntry(value.target()), controllerBuilder, componentRegistry); metaBeanBuilder.addMetaValue(value.name(), AnnotationUtil.getBeanName(value.target())); } } else { Class<? extends MetaValuesDefinition> metaClassDefinition = any.metaValuesDefinition(); MetaValuesDefinition metaValuesDefinition = (MetaValuesDefinition) ClassUtil.getInstance(metaClassDefinition); List<MetaValueDefinition> list = metaValuesDefinition.getMetaValues(); if (list == null || list.isEmpty()) throw new MappingException("meta values cannot be empty"); for (MetaValueDefinition value : list) { super.applyInternalConfiguration( new ImportBeanEntry(value.getTarget()), controllerBuilder, componentRegistry); metaBeanBuilder.addMetaValue( value.getName(), AnnotationUtil.getBeanName(value.getTarget())); } } }
public Object applyConfiguration0( Object source, Object builder, ComponentRegistry componentRegistry) throws InstantiationException, IllegalAccessException { KeyEntry keyEntry = (KeyEntry) source; KeyBuilder keyBuilder = (KeyBuilder) builder; AnyKeyCollection anyKeyCollection = keyEntry.getAnnotation(AnyKeyCollection.class); Basic basic = anyKeyCollection.metaBean(); Class<?> metaType = anyKeyCollection.metaType(); String key = StringUtil.isEmpty(basic.bean()) ? keyEntry.getName() : basic.bean(); EnumerationType enumType = keyEntry.getEnumerated(); String tempType = keyEntry.getTemporal(); ScopeType scope = AnnotationUtil.getScope(basic); org.brandao.brutos.type.Type type = keyEntry.getType() == null ? null : AnnotationUtil.getTypeInstance(keyEntry.getType()); MetaBeanBuilder metaBeanBuilder = keyBuilder.buildMetaBean(key, scope, enumType, tempType, metaType, type); this.buildMetaValues( anyKeyCollection, metaBeanBuilder, keyBuilder.getBeanBuilder().getControllerBuilder(), componentRegistry); super.applyInternalConfiguration(key, keyBuilder, componentRegistry); return builder; }