1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.sf.ezmorph.object;
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 CharacterObjectMorpher extends AbstractObjectMorpher
30 {
31 private Character defaultValue;
32
33 public CharacterObjectMorpher()
34 {
35 super();
36 }
37
38
39
40
41 public CharacterObjectMorpher( Character 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 CharacterObjectMorpher) ){
57 return false;
58 }
59
60 CharacterObjectMorpher other = (CharacterObjectMorpher) 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 Character 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 public Object morph( Object value )
90 {
91 if( value == null ){
92 if( isUseDefault() ){
93 return defaultValue;
94 }else{
95 throw new MorphException( "value is null" );
96 }
97 }
98
99 if( value instanceof Character ){
100 return (Character) value;
101 }else{
102 String s = String.valueOf( value );
103 if( s.length() > 0 ){
104 return new Character( s.charAt( 0 ) );
105 }else{
106 if( isUseDefault() ){
107 return defaultValue;
108 }else{
109 throw new MorphException( "Can't morph value: " + value );
110 }
111 }
112 }
113 }
114
115 public Class morphsTo()
116 {
117 return Character.class;
118 }
119 }