View Javadoc

    1   package org.codehaus.xfire.aegis.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 class2Type;
    21
    22      private Map xml2Type;
    23
    24      private Map class2xml;
    25
    26      private TypeMapping defaultTM;
    27
    28      private String encodingStyleURI;
    29
    30      private TypeCreator typeCreator;
    31
    32      public CustomTypeMapping( TypeMapping defaultTM )
    33      {
    34          this();
    35
    36          this.defaultTM = defaultTM;
    37      }
    38
    39      public CustomTypeMapping()
    40      {
    41          class2Type = new HashMap();
    42          class2xml = new HashMap();
    43          xml2Type = new HashMap();
    44      }
    45
    46  	public boolean isRegistered(Class javaType)
    47  	{
    48          boolean registered = class2Type.containsKey(javaType);
    49
    50          if ( !registered && defaultTM != null )
    51              registered = defaultTM.isRegistered(javaType);
    52
    53          return registered;
    54  	}
    55
    56      public boolean isRegistered(QName xmlType)
    57      {
    58          boolean registered = xml2Type.containsKey(xmlType);
    59
    60          if ( !registered && defaultTM != null )
    61              registered = defaultTM.isRegistered(xmlType);
    62
    63          return registered;
    64      }
    65
    66  	public void register(Class javaType, QName xmlType, Type type)
    67      {
    68          type.setSchemaType(xmlType);
    69          type.setTypeClass(javaType);
    70
    71          register(type);
    72      }
    73
    74      public void register(Type type)
    75      {
    76          if (type.getTypeClass() == null)
    77              throw new NullPointerException("Type class cannot be null.");
    78
    79          if (type.getSchemaType() == null)
    80              throw new NullPointerException("Schema type cannot be null.");
    81
    82          type.setTypeMapping(this);
    83
    84          class2Type.put( type.getTypeClass(), type );
    85          xml2Type.put( type.getSchemaType(), type );
    86          class2xml.put( type.getTypeClass(), type.getSchemaType() );
    87      }
    88
    89  	public void removeType(Type type)
    90  	{
    91          if (!xml2Type.containsKey(type.getSchemaType()))
    92          {
    93             defaultTM.removeType(type);
    94          }
    95          else
    96          {
    97              xml2Type.remove(type.getSchemaType());
    98              class2Type.remove(type.getTypeClass());
    99              class2xml.remove(type.getTypeClass());
    100         }
    101 	}
    102
    103     /***
    104      * @see org.codehaus.xfire.aegis.type.TypeMapping#getType(java.lang.Class)
    105      */
    106     public Type getType(Class javaType)
    107     {
    108         Type type = (Type) class2Type.get( javaType );
    109
    110         if ( type == null && defaultTM != null )
    111         {
    112             type = defaultTM.getType( javaType );
    113         }
    114
    115         return type;
    116     }
    117
    118     /***
    119      * @see org.codehaus.xfire.aegis.type.TypeMapping#getType(javax.xml.namespace.QName)
    120      */
    121     public Type getType(QName xmlType)
    122     {
    123         Type type = (Type) xml2Type.get( xmlType );
    124
    125         if ( type == null && defaultTM != null )
    126             type = defaultTM.getType( xmlType );
    127
    128         return type;
    129     }
    130
    131     /***
    132      * @see org.codehaus.xfire.aegis.type.TypeMapping#getTypeQName(java.lang.Class)
    133      */
    134     public QName getTypeQName(Class clazz)
    135     {
    136         QName qname = (QName) class2xml.get( clazz );
    137
    138         if ( qname == null && defaultTM != null )
    139             qname = defaultTM.getTypeQName( clazz );
    140
    141         return qname;
    142     }
    143
    144     public String getEncodingStyleURI()
    145     {
    146         return encodingStyleURI;
    147     }
    148
    149     public void setEncodingStyleURI( String encodingStyleURI )
    150     {
    151         this.encodingStyleURI = encodingStyleURI;
    152     }
    153
    154     public TypeCreator getTypeCreator()
    155     {
    156         return typeCreator;
    157     }
    158
    159     public void setTypeCreator(TypeCreator typeCreator)
    160     {
    161         this.typeCreator = typeCreator;
    162
    163         typeCreator.setTypeMapping(this);
    164     }
    165 }