1 package org.objectweb.celtix.bus.configuration.spring; 2 3 import java.beans.PropertyEditor ; 4 import java.math.BigInteger ; 5 import java.util.logging.Level ; 6 import java.util.logging.Logger ; 7 8 import javax.xml.namespace.QName ; 9 10 import org.objectweb.celtix.common.i18n.Message; 11 import org.objectweb.celtix.common.logging.LogUtils; 12 import org.objectweb.celtix.configuration.Configuration; 13 import org.objectweb.celtix.configuration.ConfigurationException; 14 import org.objectweb.celtix.configuration.ConfigurationItemMetadata; 15 import org.objectweb.celtix.jaxb.JAXBUtils; 16 import org.objectweb.celtix.tools.generators.spring.BeanGenerator; 17 import org.springframework.beans.factory.support.DefaultListableBeanFactory; 18 import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; 19 import org.springframework.core.io.Resource; 20 21 @SuppressWarnings ("deprecation") 22 public class CeltixXmlBeanFactory extends DefaultListableBeanFactory { 23 24 private static final Logger LOG = LogUtils.getL7dLogger(CeltixXmlBeanFactory.class); 25 private static final Class DEFAULT_PARSER_CLASS = CeltixXmlBeanDefinitionParser.class; 26 27 private final PropertyEditor editor; 28 29 CeltixXmlBeanFactory(Resource res) { 30 XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this); 31 reader.setParserClass(DEFAULT_PARSER_CLASS); 32 reader.setEntityResolver(new CeltixBeansDtdResolver()); 33 reader.setValidating(false); 34 reader.setNamespaceAware(true); 35 reader.loadBeanDefinitions(res); 36 37 editor = new JaxbPropertyEditor(); 38 registerCustomEditor(String .class, editor); 39 40 PropertyEditor pe = null; 41 42 pe = new JaxbBigIntegerEditor(); 43 registerCustomEditor(BigInteger .class, pe); 44 45 pe = new JaxbBooleanEditor(); 46 registerCustomEditor(boolean.class, pe); 47 registerCustomEditor(Boolean .class, pe); 48 49 pe = new JaxbNumberEditor(Byte .class); 50 registerCustomEditor(byte.class, pe); 51 registerCustomEditor(Byte .class, pe); 52 53 pe = new JaxbNumberEditor(Short .class); 54 registerCustomEditor(short.class, pe); 55 registerCustomEditor(Short .class, pe); 56 57 pe = new JaxbNumberEditor(Integer .class); 58 registerCustomEditor(int.class, pe); 59 registerCustomEditor(Integer .class, pe); 60 61 pe = new JaxbNumberEditor(Long .class); 62 registerCustomEditor(long.class, pe); 63 registerCustomEditor(Long .class, pe); 64 65 pe = new JaxbNumberEditor(Float .class); 66 registerCustomEditor(float.class, pe); 67 registerCustomEditor(Float .class, pe); 68 69 pe = new JaxbNumberEditor(Double .class); 70 registerCustomEditor(double.class, pe); 71 registerCustomEditor(Double .class, pe); 72 73 } 74 75 void registerCustomEditors(Configuration c) { 76 77 for (ConfigurationItemMetadata definition : c.getModel().getDefinitions()) { 78 QName qn = definition.getType(); 79 String className = BeanGenerator.getClassName(qn, true); 80 81 Class cl = JAXBUtils.holderClass(className); 82 if (null != cl) { 83 continue; 84 } 85 86 try { 87 cl = Class.forName(className); 88 } catch (ClassCastException ex) { 89 throw new ConfigurationException(new Message("COULD_NOT_REGISTER_PROPERTY_EDITOR_EXC", LOG, 90 className), ex); 91 } catch (ClassNotFoundException ex) { 92 throw new ConfigurationException(new Message("COULD_NOT_REGISTER_PROPERTY_EDITOR_EXC", LOG, 93 className), ex); 94 } 95 96 if (cl == String .class) { 97 continue; 98 } 99 100 if (null == getCustomEditors().get(cl)) { 101 registerCustomEditor(cl, editor); 102 if (LOG.isLoggable(Level.FINE)) { 103 LOG.fine("Registered JaxbPropertyEditor for class: " + className); 104 } 105 } 106 } 107 } 108 109 } 110 | Popular Tags |