Subversion Repository Public Repository

WOX2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package wox.serial;

import java.lang.reflect.*;

/**
 * Version: 1.0
 * Author: Carlos R. Jaimez Gonzalez
 * Author: Simon M. Lucas
 * Site: http://woxserializer.sourceforge.net/
 *
 * Version: 1.5
 * Author: Steven M Lewis
 *
 * Version: 2.0
 * Author: George Smith
 * SVN: http://svn.xp-dev.com/svn/WOX2/
 * Note: XML form for vs 2 is more compact and therefor incompatible with vs 1
 */

public class DefaultObjectHandler extends AbstractHandler implements WoxDefaultHandler
{
    public static final DefaultObjectHandler INSTANCE = new DefaultObjectHandler();

    protected DefaultObjectHandler()
    {
    }

    public boolean isFor( Class pType )
    {
        return true;
    }

    @Override
    public String[] getForReadObjectWoxTypeNames()
    {
        return null; // Ask Us
    }

    @Override
    public Class getNativeTypeFor( WoxHandlers pWoxHandlers, String pWoxType )
    {
        Class zType = commonNativeType( pWoxHandlers, pWoxType );
        if ( zType == null )
        {
            throw new NullPointerException( "No Native Type for Wox Type: " + pWoxType );
        }
        return zType;
    }

    @Override
    public String getWoxTypeFor( WoxHandlers pWoxHandlers, Class pType, Field pField, boolean pJustType )
    {
        return commonWoxType( pWoxHandlers, pType, null, pJustType );
    }

    @Override
    public boolean willReadObjectForWoxType( String pWoxType )
    {
        return true;
    }

    @Override
    public Object readObject( WoxHandlers pWoxHandlers, WoxReader pWoxReader, XMLreader pReader )
    {
        XMLreader zSubtree = pReader.createSubtreeReader();
        zSubtree.readStartElement(); //position the cursor to our element

        try
        {
            String zWoxTypeName = pReader.getAttribute( Serial.TYPE );

            Class zType = getNativeTypeFor( pWoxHandlers, zWoxTypeName );

            if ( zType == null )
            {
                throw new ApplicationException( "Unable to determine Native Type for Wox Type: " + zWoxTypeName );
            }

            if ( zType.isEnum() )
            {
                String value = pReader.getAttribute( Serial.VALUE );
                //noinspection unchecked
                return Enum.valueOf( zType, value );
            }
            Object zInstance = Util.createInstance( zType, zWoxTypeName );

            processFields( pWoxHandlers, pWoxReader, zSubtree, zType, zInstance );

            return zInstance;
        }
        catch ( Exception e )
        {
            throw new ApplicationException( "Default Object Handler ReadStartElement Exception is: " + e.getMessage(), e );
        }
        finally
        {
            consume( zSubtree );
        }
    }

    @Override
    public void writeObject( WoxHandlers pWoxHandlers, WoxWriter pWoxWriter, Object pObject, Field pField, XMLwriter pWriter, boolean pJustType )
    {
        Class zType = pObject.getClass();
        pWriter.writeStartElement( Serial.OBJECT );
        pWriter.writeAttributeString( Serial.TYPE, commonWoxType( pWoxHandlers, zType, pField, pJustType ) );

        if ( pJustType )
        {
            processFields( pWoxHandlers, pWoxWriter, pWriter, pJustType, zType, pObject );
        }
        else if ( zType.isEnum() )
        {
            pWriter.writeAttributeString( Serial.VALUE, pObject.toString() );
        }
        else
        {
            pWriter.writeAttributeString( Serial.ID, pWoxWriter.createIDfor( pObject ) );

            processFields( pWoxHandlers, pWoxWriter, pWriter, pJustType, zType, pObject );
        }

        pWriter.writeEndElement();
    }

    @Override
    public boolean supportsJustTypeWriting()
    {
        return true;
    }
}

Commits for WOX2/trunk/Java/src/wox/serial/DefaultObjectHandler.java

Diff revisions: vs.
Revision Author Commited Message
15 Diff Diff GeorgeS picture GeorgeS Fri 19 Feb, 2010 22:29:49 +0000
5 Diff Diff GeorgeS picture GeorgeS Fri 05 Feb, 2010 18:59:04 +0000
4 Diff Diff GeorgeS picture GeorgeS Fri 05 Feb, 2010 18:15:55 +0000
3 GeorgeS picture GeorgeS Thu 04 Feb, 2010 23:53:47 +0000