1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.sf.ezmorph.array;
18
19 import java.lang.reflect.Array;
20
21 import net.sf.ezmorph.MorphException;
22 import net.sf.ezmorph.primitive.FloatMorpher;
23
24 import org.apache.commons.lang.builder.EqualsBuilder;
25 import org.apache.commons.lang.builder.HashCodeBuilder;
26
27
28
29
30
31
32 public final class FloatArrayMorpher extends AbstractArrayMorpher
33 {
34 private static final Class FLOAT_ARRAY_CLASS = float[].class;
35 private float defaultValue;
36
37 public FloatArrayMorpher()
38 {
39 super( false );
40 }
41
42
43
44
45 public FloatArrayMorpher( float defaultValue )
46 {
47 super( true );
48 this.defaultValue = defaultValue;
49 }
50
51 public boolean equals( Object obj )
52 {
53 if( this == obj ){
54 return true;
55 }
56 if( obj == null ){
57 return false;
58 }
59
60 if( !(obj instanceof FloatArrayMorpher) ){
61 return false;
62 }
63
64 FloatArrayMorpher other = (FloatArrayMorpher) obj;
65 EqualsBuilder builder = new EqualsBuilder();
66 if( isUseDefault() && other.isUseDefault() ){
67 builder.append( getDefaultValue(), other.getDefaultValue() );
68 return builder.isEquals();
69 }else if( !isUseDefault() && !other.isUseDefault() ){
70 return builder.isEquals();
71 }else{
72 return false;
73 }
74 }
75
76
77
78
79 public float getDefaultValue()
80 {
81 return defaultValue;
82 }
83
84 public int hashCode()
85 {
86 HashCodeBuilder builder = new HashCodeBuilder();
87 if( isUseDefault() ){
88 builder.append( getDefaultValue() );
89 }
90 return builder.toHashCode();
91 }
92
93 public Object morph( Object array )
94 {
95 if( array == null ){
96 return null;
97 }
98
99 if( FLOAT_ARRAY_CLASS.isAssignableFrom( array.getClass() ) ){
100
101 return (float[]) array;
102 }
103
104 if( array.getClass()
105 .isArray() ){
106 int length = Array.getLength( array );
107 int dims = getDimensions( array.getClass() );
108 int[] dimensions = createDimensions( dims, length );
109 Object result = Array.newInstance( float.class, dimensions );
110 FloatMorpher morpher = isUseDefault() ? new FloatMorpher( defaultValue )
111 : new FloatMorpher();
112 if( dims == 1 ){
113 for( int index = 0; index < length; index++ ){
114 Array.set( result, index, new Float( morpher.morph( Array.get( array, index ) ) ) );
115 }
116 }else{
117 for( int index = 0; index < length; index++ ){
118 Array.set( result, index, morph( Array.get( array, index ) ) );
119 }
120 }
121 return result;
122 }else{
123 throw new MorphException( "argument is not an array: " + array.getClass() );
124 }
125 }
126
127 public Class morphsTo()
128 {
129 return FLOAT_ARRAY_CLASS;
130 }
131 }