summaryrefslogtreecommitdiff
path: root/Sait/Cmpp299/Assignment1/trunk/src/app/Marina/Presentation/PayloadKey.cs
blob: d4b31fb84ca9c530a7273b682ebc171cd067e070 (plain)
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
using System;
using System.Collections.Specialized;

namespace Marina.Presentation
{
    public class PayloadKey< T > : IEquatable< PayloadKey< T > >
    {
        private readonly string _key;

        public PayloadKey( string key )
        {
            _key = key;
        }

        public T ParseFrom( NameValueCollection payload )
        {
            EnsureKeyIsInPayload( payload );
            return ( T )Convert.ChangeType( payload[ _key ], typeof( T ) );
        }

        private void EnsureKeyIsInPayload( NameValueCollection payload )
        {
            if( null == payload[ _key ] ) {
                throw new PayloadKeyNotFoundException( _key );
            }
        }

        public static implicit operator string( PayloadKey< T > item )
        {
            return item._key;
        }

        public bool Equals( PayloadKey< T > payloadKey )
        {
            return payloadKey != null && Equals( _key, payloadKey._key );
        }

        public override bool Equals( object obj )
        {
            return ReferenceEquals( this, obj ) || Equals( obj as PayloadKey< T > );
        }

        public override int GetHashCode( )
        {
            return _key.GetHashCode( );
        }
    }
}