1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.sf.ezmorph.primitive;
18
19 import net.sf.ezmorph.MorphException;
20
21 import org.apache.commons.lang.builder.EqualsBuilder;
22 import org.apache.commons.lang.builder.HashCodeBuilder;
23
24
25
26
27
28
29 public final class CharMorpher extends AbstractPrimitiveMorpher
30 {
31 private char defaultValue;
32
33 public CharMorpher()
34 {
35 super();
36 }
37
38
39
40
41 public CharMorpher( char defaultValue )
42 {
43 super( true );
44 this.defaultValue = defaultValue;
45 }
46
47 public boolean equals( Object obj )
48 {
49 if( this == obj ){
50 return true;
51 }
52 if( obj == null ){
53 return false;
54 }
55
56 if( !(obj instanceof CharMorpher) ){
57 return false;
58 }
59
60 CharMorpher other = (CharMorpher) obj;
61 EqualsBuilder builder = new EqualsBuilder();
62 if( isUseDefault() && other.isUseDefault() ){
63 builder.append( getDefaultValue(), other.getDefaultValue() );
64 return builder.isEquals();
65 }else if( !isUseDefault() && !other.isUseDefault() ){
66 return builder.isEquals();
67 }else{
68 return false;
69 }
70 }
71
72
73
74
75 public char getDefaultValue()
76 {
77 return defaultValue;
78 }
79
80 public int hashCode()
81 {
82 HashCodeBuilder builder = new HashCodeBuilder();
83 if( isUseDefault() ){
84 builder.append( getDefaultValue() );
85 }
86 return builder.toHashCode();
87 }
88
89
90
91
92
93
94
95 public char morph( Object value )
96 {
97 if( value == null ){
98 if( isUseDefault() ){
99 return defaultValue;
100 }else{
101 throw new MorphException( "value is null" );
102 }
103 }
104
105 if( value instanceof Character ){
106 return ((Character) value).charValue();
107 }else{
108 String s = String.valueOf( value );
109 if( s.length() > 0 ){
110 return s.charAt( 0 );
111 }else{
112 if( isUseDefault() ){
113 return defaultValue;
114 }else{
115 throw new MorphException( "Can't morph value: " + value );
116 }
117 }
118 }
119 }
120
121 public Class morphsTo()
122 {
123 return Character.TYPE;
124 }
125 }