/** * Create a new MetaBeanManager instance. */ public MetaBeanManager() { builder = new MetaBeanBuilder(); }
/** * Create a new MetaBeanBuilder instance. * * @param factories */ public MetaBeanBuilder(MetaBeanFactory[] factories) { setFactories(factories); }
@Override public Map<String, MetaBean> buildAll() throws Exception { final Map<String, MetaBean> all = super.buildAll(); if (xmlFactory != null) { xmlFactory.visitXMLBeanMeta(null, new XMLMetaBeanFactory.Visitor() { @Override public void visit(XMLMetaBean empty, XMLMetaBeanInfos xmlInfos) throws Exception { if (xmlInfos.getBeans() == null) return; // empty file, ignore XMLMetaBeanFactory.XMLResult carrier = new XMLMetaBeanFactory.XMLResult(null, xmlInfos); for (XMLMetaBean xmlMeta : xmlInfos.getBeans()) { MetaBean meta = all.get(xmlMeta.getId()); if (meta == null) { meta = createMetaBean(xmlMeta); all.put(xmlMeta.getId(), meta); } carrier.xmlMeta = xmlMeta; xmlFactory.enrichMetaBean(meta, carrier); } } @Override public MetaBean getMetaBean() { return null; // do nothing } }); } return all; }
/** * {@inheritDoc} */ @Override public MetaBean findForClass(final Class<?> clazz) { if (clazz == null) { return null; } MetaBean beanInfo = cache.findForClass(clazz); if (beanInfo != null) { return beanInfo; } try { beanInfo = builder.buildForClass(clazz); cache.cache(beanInfo); computeRelationships(beanInfo); return beanInfo; } catch (final RuntimeException e) { throw e; // do not wrap runtime exceptions } catch (final Exception e) { throw new IllegalArgumentException("error creating beanInfo for " + clazz, e); } }
/** * {@inheritDoc} */ @Override public MetaBean findForId(final String beanInfoId) { MetaBean beanInfo = cache.findForId(beanInfoId); if (beanInfo != null) { return beanInfo; } try { beanInfo = builder.buildForId(beanInfoId); cache.cache(beanInfo); computeRelationships(beanInfo); return beanInfo; } catch (final RuntimeException e) { throw e; // do not wrap runtime exceptions } catch (final Exception e) { throw new IllegalArgumentException("error creating beanInfo with id: " + beanInfoId, e); } }
if (!complete) { try { Map<String, MetaBean> allBuilt = builder.buildAll(); for (MetaBean meta : allBuilt.values()) { MetaBean cached = cache.findForId(meta.getId());
/** * Create a {@link MetaBeanManager} using the specified builders. * * @param builders * {@link MetaBeanFactory} {@link List} * @return {@link MetaBeanManager} */ @SuppressWarnings("deprecation") protected MetaBeanFinder createMetaBeanManager(List<MetaBeanFactory> builders) { // as long as we support both: jsr303 (in the builders list) and xstream-xml metabeans: if (Boolean.parseBoolean(factory.getProperties().get( ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) { return XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders); } return new MetaBeanManager(new MetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()]))); }
@Override public void setFactories(MetaBeanFactory[] factories) { super.setFactories(factories); updateXmlFactory(); }