public XMLMetaBeanManager() { this(new XMLMetaBeanBuilder()); }
private MetaBean createMetaBean(XMLMetaBean xmlMeta) throws Exception { return buildForClass(findLocalClass(xmlMeta.getImpl())); }
private void updateXmlFactory() { for (MetaBeanFactory each : getFactories()) { if (each instanceof XMLMetaBeanFactory) { // use the first one! xmlFactory = (XMLMetaBeanFactory) each; return; } } xmlFactory = null; // none }
public Map<String, MetaBean> enrichCopies(Map<String, MetaBean> all, XMLMetaBeanInfos... infosArray) throws Exception { assertXmlFactory(); final Map<String, MetaBean> copies = new HashMap<String, MetaBean>(all.size()); boolean nothing = true; MetaBean meta = all.get(xmlMeta.getId()); if (meta == null) { // gibt es nicht copy = createMetaBean(xmlMeta); } else { // gibt es, jetzt kopieren copy = meta.copy();
public void addLoader(XMLMetaBeanLoader loader) { assertXmlFactory(); xmlFactory.addLoader(loader); }
public XMLMetaBeanBuilder(MetaBeanFactory[] factories) { setFactories(factories); }
@Override public void setFactories(MetaBeanFactory[] factories) { super.setFactories(factories); updateXmlFactory(); }
@Override public synchronized void addLoader(XMLMetaBeanLoader loader) { ((XMLMetaBeanBuilder) builder).addLoader(loader); cache.clear(); // clear because new loaders can affect ALL MetaBeans // already created! complete = false; }
/** * @param infos * - the patches to apply * @return all MetaBeans for classes that have a xml descriptor and * additional the MetaBeans loaded by the given loaders. The given * loaders may also return patches for MetaBeans that have also been * returned by other loaders. The beans with patches for references * to patched beans will be copied. */ @Override public Map<String, MetaBean> enrichCopies(XMLMetaBeanInfos... infos) { Map<String, MetaBean> cached = findAll(); try { Map<String, MetaBean> patched = ((XMLMetaBeanBuilder) builder).enrichCopies(cached, infos); for (Object entry : patched.values()) { MetaBean meta = (MetaBean) entry; computeRelationships(meta, patched); } return patched; } catch (RuntimeException e) { throw e; // do not wrap runtime exceptions } catch (Exception e) { throw new IllegalArgumentException("error enriching beanInfos", e); } }
@Override public MetaBean buildForId(String beanInfoId) throws Exception { final XMLMetaBeanFactory.Visitor v; assertXmlFactory(); xmlFactory.visitXMLBeanMeta(beanInfoId, v = new XMLMetaBeanFactory.Visitor() { private MetaBean meta; @Override public MetaBean getMetaBean() { return meta; } @Override public void visit(XMLMetaBean xmlMeta, XMLMetaBeanInfos xmlInfos) throws Exception { if (meta == null) { meta = createMetaBean(xmlMeta); } xmlFactory.enrichMetaBean(meta, new XMLMetaBeanFactory.XMLResult(xmlMeta, xmlInfos)); } }); if (v.getMetaBean() == null) { throw new IllegalArgumentException("MetaBean " + beanInfoId + " not found"); } return v.getMetaBean(); }
public XMLMetaBeanBuilder() { setFactories(new MetaBeanFactory[] { new IntrospectorMetaBeanFactory(), new XMLMetaBeanFactory() }); }
/** * Create the {@link MetaBeanManager} to process JSR303 XML. Requires * bval-xstream at RT. * * @param builders * @return {@link MetaBeanManager} */ // NOTE - We return MetaBeanManager instead of XMLMetaBeanManager to // keep // bval-xstream an optional module. protected static MetaBeanManager createXMLMetaBeanManager(List<MetaBeanFactory> builders) { return new XMLMetaBeanManager( new XMLMetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()]))); } }