View Javadoc

1   package org.codehaus.xfire.aegis.type.java5;
2   
3   import org.codehaus.xfire.MessageContext;
4   import org.codehaus.xfire.XFireRuntimeException;
5   import org.codehaus.xfire.aegis.MessageReader;
6   import org.codehaus.xfire.aegis.MessageWriter;
7   import org.codehaus.xfire.aegis.type.Type;
8   import org.codehaus.xfire.fault.XFireFault;
9   import org.codehaus.xfire.soap.SoapConstants;
10  import org.codehaus.yom.Attribute;
11  import org.codehaus.yom.Element;
12  
13  public class EnumType
14      extends Type
15  {
16      @Override
17      public Object readObject(MessageReader reader, MessageContext context)
18          throws XFireFault
19      {
20          String value = reader.getValue();
21  
22          return Enum.valueOf(getTypeClass(), value);
23      }
24  
25      @Override
26      public void writeObject(Object object, MessageWriter writer, MessageContext context)
27          throws XFireFault
28      {
29          writer.writeValue(((Enum) object).toString());
30      }
31  
32      @Override
33      public void setTypeClass(Class typeClass)
34      {
35          if (!typeClass.isEnum())
36          {
37              throw new XFireRuntimeException("Type class must be an enum.");
38          }
39          
40          super.setTypeClass(typeClass);
41      }
42  
43      @Override
44      public void writeSchema(Element root)
45      {
46          Element simple = new Element(SoapConstants.XSD_PREFIX + ":simpleType",
47                                        SoapConstants.XSD);
48          simple.addAttribute(new Attribute("name", getSchemaType().getLocalPart()));
49          root.appendChild(simple);
50          
51          Element restriction = new Element(SoapConstants.XSD_PREFIX + ":restriction",
52                                       SoapConstants.XSD);
53          restriction.addAttribute(new Attribute("base", SoapConstants.XSD_PREFIX + ":string"));
54          simple.appendChild(restriction);
55          
56          Object[] constants = getTypeClass().getEnumConstants();
57  
58          for (Object constant : constants)
59          {
60              Element enumeration = new Element(SoapConstants.XSD_PREFIX + ":enumeration",
61                                            SoapConstants.XSD);
62              enumeration.addAttribute(new Attribute("value", ((Enum) constant).toString()));
63              restriction.appendChild(enumeration);
64          }
65      }
66  
67      @Override
68      public boolean isComplex()
69      {
70          return true;
71      }
72  }