1 package org.codehaus.xfire.type; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 import javax.xml.namespace.QName; 7 8 9 10 /*** 11 * Contains type mappings for java/qname pairs and 12 * Serializer/Deserializer factories. 13 * 14 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a> 15 * @since Feb 21, 2004 16 */ 17 public class CustomTypeMapping 18 implements TypeMapping 19 { 20 private Map types; 21 22 private Map class2Type; 23 24 private Map xml2Type; 25 26 private Map class2xml; 27 28 private TypeMapping defaultTM; 29 30 private String encodingStyleURI; 31 32 public CustomTypeMapping( TypeMapping defaultTM ) 33 { 34 this(); 35 36 this.defaultTM = defaultTM; 37 } 38 39 public CustomTypeMapping() 40 { 41 types = new HashMap(); 42 class2Type = new HashMap(); 43 class2xml = new HashMap(); 44 xml2Type = new HashMap(); 45 } 46 47 /*** 48 * @see org.codehaus.xfire.type.TypeMapping#isRegistered(java.lang.Class, javax.xml.namespace.QName) 49 */ 50 public boolean isRegistered( Class javaType, QName xmlType ) 51 { 52 ClassQNamePair pair = new ClassQNamePair(javaType, xmlType); 53 54 boolean registered = types.containsKey( pair ); 55 56 if ( !registered && defaultTM != null ) 57 registered = defaultTM.isRegistered( javaType, xmlType ); 58 59 return registered; 60 } 61 62 /*** 63 * @see org.codehaus.xfire.type.TypeMapping#register(java.lang.Class, javax.xml.namespace.QName, org.codehaus.xfire.java.encoding.SerializerFactory, org.codehaus.xfire.java.encoding.DeserializerFactory) 64 */ 65 public void register( Class javaType, QName xmlType, Type type ) 66 { 67 type.setTypeClass( javaType ); 68 type.setSchemaType( xmlType ); 69 type.setTypeMapping( this ); 70 71 ClassQNamePair pair = new ClassQNamePair(javaType, xmlType); 72 73 types.put( pair, type ); 74 75 class2Type.put( javaType, type ); 76 xml2Type.put( xmlType, type ); 77 class2xml.put( javaType, xmlType ); 78 } 79 80 /*** 81 * @see org.codehaus.xfire.type.TypeMapping#getSerializer(java.lang.Class, javax.xml.namespace.QName) 82 */ 83 public Type getType( Class javaType, QName xmlType ) 84 { 85 ClassQNamePair pair = new ClassQNamePair(javaType, xmlType); 86 87 Type type = (Type) types.get( pair ); 88 89 if ( type == null && defaultTM != null ) 90 type = defaultTM.getType( javaType, xmlType ); 91 92 return type; 93 } 94 95 /*** 96 * @see org.codehaus.xfire.type.TypeMapping#removeSerializer(java.lang.Class, javax.xml.namespace.QName) 97 */ 98 public void removeType( Class javaType, QName xmlType ) 99 { 100 ClassQNamePair pair = new ClassQNamePair(javaType, xmlType); 101 102 Type type = (Type) types.get(pair); 103 104 if ( type == null && defaultTM != null ) 105 defaultTM.removeType( javaType, xmlType ); 106 else 107 { 108 types.remove( pair ); 109 xml2Type.remove(type); 110 class2Type.remove(type); 111 class2xml.remove(xmlType); 112 } 113 } 114 115 /*** 116 * @see org.codehaus.xfire.type.TypeMapping#getType(java.lang.Class) 117 */ 118 public Type getType(Class javaType) 119 { 120 Type type = (Type) class2Type.get( javaType ); 121 122 if ( type == null && defaultTM != null ) 123 type = defaultTM.getType( javaType ); 124 125 return type; 126 } 127 128 /*** 129 * @see org.codehaus.xfire.type.TypeMapping#getType(javax.xml.namespace.QName) 130 */ 131 public Type getType(QName xmlType) 132 { 133 Type type = (Type) xml2Type.get( xmlType ); 134 135 if ( type == null && defaultTM != null ) 136 type = defaultTM.getType( xmlType ); 137 138 return type; 139 } 140 141 /*** 142 * @see org.codehaus.xfire.type.TypeMapping#getTypeQName(java.lang.Class) 143 */ 144 public QName getTypeQName(Class clazz) 145 { 146 QName qname = (QName) class2xml.get( clazz ); 147 148 if ( qname == null && defaultTM != null ) 149 qname = defaultTM.getTypeQName( clazz ); 150 151 return qname; 152 } 153 154 155 public String getEncodingStyleURI() 156 { 157 return encodingStyleURI; 158 } 159 160 public void setEncodingStyleURI( String encodingStyleURI ) 161 { 162 this.encodingStyleURI = encodingStyleURI; 163 } 164 }