33
33
34
34
import java .lang .reflect .Type ;
35
35
36
+ import org .scijava .util .GenericUtils ;
37
+
36
38
/**
37
39
* Currency for use in {@link Converter} and {@link ConvertService}
38
40
* methods.
57
59
* </p>
58
60
*
59
61
* @author Mark Hiner
62
+ * @author Curtis Rueden
60
63
*/
61
64
public class ConversionRequest {
62
65
63
66
// -- Fields --
64
67
65
- private final Class <?> srcClass ;
66
- private Object srcObject ;
67
- private Class <?> destClass ;
68
- private Type destType ;
68
+ private final Type srcType ;
69
+ private final Type destType ;
69
70
70
- // -- Constructors --
71
+ private Object src ;
71
72
72
- public ConversionRequest (final Object s , final Class <?> d ) {
73
- this (s == null ? null : s .getClass (), d );
74
- srcObject = s ;
75
- }
73
+ // -- Constructors --
76
74
77
- public ConversionRequest (final Class <?> s , final Class <?> d ) {
78
- srcClass = s ;
79
- destClass = d ;
75
+ public ConversionRequest (final Object src , final Type destType ) {
76
+ this (src , src == null ? null : src .getClass (), destType );
80
77
}
81
78
82
- public ConversionRequest (final Object s , final Type d ) {
83
- this (s == null ? null : s .getClass (), d );
84
- srcObject = s ;
79
+ public ConversionRequest (final Type srcType , final Type destType ) {
80
+ this (null , srcType , destType );
85
81
}
86
82
87
- public ConversionRequest (final Class <?> s , final Type d ) {
88
- srcClass = s ;
89
- destType = d ;
83
+ public ConversionRequest (final Object src , final Type srcType ,
84
+ final Type destType )
85
+ {
86
+ this .src = src ;
87
+ this .srcType = srcType ;
88
+ this .destType = destType ;
90
89
}
91
90
92
91
// -- Accessors --
93
92
93
+ /**
94
+ * @return Source type for conversion or lookup.
95
+ */
96
+ public Type sourceType () {
97
+ return srcType ;
98
+ }
99
+
94
100
/**
95
101
* @return Source class for conversion or lookup.
96
102
*/
97
103
public Class <?> sourceClass () {
98
- return srcClass ;
104
+ return GenericUtils . getClass ( srcType ) ;
99
105
}
100
106
101
107
/**
102
108
* @return Source object for conversion.
103
109
*/
104
110
public Object sourceObject () {
105
- return srcObject ;
111
+ return src ;
106
112
}
107
113
108
114
/**
@@ -116,10 +122,10 @@ public Type destType() {
116
122
* @return Destination class for conversion.
117
123
*/
118
124
public Class <?> destClass () {
119
- return destClass ;
125
+ return GenericUtils . getClass ( destType ) ;
120
126
}
121
127
122
- // -- Setters --
128
+ // -- Setters --
123
129
124
130
/**
125
131
* Sets the source object for this {@link ConversionRequest}.
@@ -128,11 +134,13 @@ public Class<?> destClass() {
128
134
* not match {@link #sourceClass()}.
129
135
*/
130
136
public void setSourceObject (final Object o ) {
131
- if (!srcClass .isAssignableFrom (o .getClass ())) {
137
+ // TODO: More careful check against srcType itself.
138
+ if (!sourceClass ().isInstance (o )) {
132
139
throw new IllegalArgumentException ("Object of type: " + o .getClass () +
133
- " provided. Expected: " + srcClass );
140
+ " provided. Expected: " + srcType );
134
141
}
135
142
136
- srcObject = o ;
143
+ src = o ;
137
144
}
145
+
138
146
}
0 commit comments