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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
using System;
using System.Reflection;

/// <header>
/// <wox>
///     <version>1.0</version>
///     <author>Carlos R. Jaimez Gonzalez</author>
///     <author>Simon M. Lucas</author>
///     <site>http://woxserializer.sourceforge.net/</site>
/// </wox>
/// <wox>
///     <version>1.5</version>
///     <author>Steven M Lewis</author>
/// </wox>
/// <wox>
///     <version>2.0</version>
///     <author>George A Smith</author>
///     <svn>http://woxserializer.sourceforge.net/</svn>
///     <note>XML form for vs 2 is more compact and therefor incompatible with vs 1</note>
/// </wox>
/// </header>

namespace wox.serial
{
    public abstract class AbstractWrappableStringableHandler : AbstractStringableHandler
    {
        protected readonly Type mBaseNativeType;
        protected readonly string mBaseWoxType;
        protected readonly Type mWrappedNativeType;
        protected readonly string mWrappedWoxType;

        protected AbstractWrappableStringableHandler( Type pBaseNativeType, string pBaseWoxType, Type pWrappedNativeType )
        {
            mBaseNativeType = pBaseNativeType;
            mBaseWoxType = pBaseWoxType;
            mWrappedNativeType = pWrappedNativeType;
            mWrappedWoxType = pBaseWoxType + "Wrapper";
        }

        public override string[] GetForReadObjectWoxTypeNames()
        {
            return GetForParseFieldValueWoxTypeNames();
        }

        public override Type GetNativeTypeFor( WoxHandlers pWoxHandlers, string pWoxType )
        {
            if ( mWrappedWoxType.Equals( pWoxType ) || mBaseWoxType.Equals( pWoxType ) )
            {
                return mBaseNativeType;
            }
            throw new ApplicationException( "No Native Type for Wox Type: " + pWoxType );
        }

        public override string GetWoxTypeFor( WoxHandlers pWoxHandlers, Type pType, FieldInfo pField, bool pJustType )
        {
            if ( mWrappedNativeType.Equals( pType ) )
            {
                return pJustType ? mWrappedWoxType : mBaseWoxType;
            }
            if ( mBaseNativeType.Equals( pType ) )
            {
                return mBaseWoxType;
            }
            throw new ApplicationException( "No Wox Type for Native Type: " + pType );
        }

        public override bool WillReadObjectForWoxType( string pWoxType )
        {
            return WillParseFieldValueForWoxType( pWoxType );
        }

        public override bool IsFor( Type pType )
        {
            return mWrappedNativeType.IsAssignableFrom( pType );
        }

        public override string[] GetForParseFieldValueWoxTypeNames()
        {
            return new[] {mBaseWoxType, mWrappedWoxType};
        }

        public override bool WillParseFieldValueForWoxType( string pWoxType )
        {
            return mBaseWoxType.Equals( pWoxType ) || mWrappedWoxType.Equals( pWoxType );
        }

        public override bool WillFieldValueNeverHaveAnySpaces()
        {
            return true;
        }

        public override object CreateArrayFor( Type pFieldElementType, string[] pValues )
        {
            Type zComponentType;
            if ( pFieldElementType == null )
            {
                zComponentType = AnyNullIndicators( pValues ) ? mWrappedNativeType : mBaseNativeType;
            }
            else if ( mBaseNativeType.Equals( pFieldElementType ) )
            {
                zComponentType = mBaseNativeType;
            }
            else if ( mWrappedNativeType.Equals( pFieldElementType ) )
            {
                zComponentType = mWrappedNativeType;
            }
            else
            {
                throw new ApplicationException( "Not Supported Field Native Type: " + pFieldElementType );
            }
            Array zArray = Array.CreateInstance( zComponentType, pValues.Length );
            for ( int i = 0; i < pValues.Length; i++ )
            {
                zArray.SetValue( CreateInstance( pValues[i] ), i );
            }
            return zArray;
        }

        private static bool AnyNullIndicators( string[] pValues )
        {
            foreach ( var zValue in pValues )
            {
                if ( Serial.NULL.Equals( zValue ) )
                {
                    return true;
                }
            }
            return false;
        }

        protected override object CreateInstance( string pValue )
        {
            if ( string.IsNullOrEmpty( pValue ) || Serial.NULL.Equals( pValue ) )
            {
                return null;
            }
            return NonNullValueParse( pValue );
        }

        protected override string Stringify( object pObject )
        {
            return (pObject == null) ? Serial.NULL : NonNullValueToString( pObject );
        }

        abstract protected object NonNullValueParse( string pValue );

        protected virtual string NonNullValueToString( object pObject )
        {
            return pObject.ToString();
        }
    }
}

Commits for WOX2/trunk/CSharp/src/wox/serial/AbstractWrappableStringableHandler.cs

Diff revisions: vs.
Revision Author Commited Message
14 Diff Diff GeorgeS picture GeorgeS Fri 19 Feb, 2010 19:15:03 +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