1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package com.gridsystems.nextgrid.api.pom.ref;
19
20
21
22
23
24
25
26 public class ObjectReference<E> extends ReferenceSupport<E> {
27
28
29
30
31 private static final long serialVersionUID = -3017895741189696100L;
32
33
34
35
36 private final Class<E> type;
37
38
39
40
41 private E value;
42
43
44
45
46
47
48 public ObjectReference(Class<E> type) {
49 this.type = type;
50 }
51
52
53
54
55
56
57
58 public ObjectReference(Class<E> type, E value) {
59 this.type = type;
60 setValue(value);
61 }
62
63
64
65
66 public boolean canCastFrom(Class<?> type) {
67 return type != null && this.type.isAssignableFrom(type);
68 }
69
70
71
72
73 public boolean canCastTo(Class<?> type) {
74 return type != null && type.isAssignableFrom(this.type);
75 }
76
77
78
79
80 public Object castTo(Class<?> type) {
81 return castTo(type, value);
82 }
83
84
85
86
87 public E getValue() {
88 return this.value;
89 }
90
91
92
93
94 public Class<E> getValueType() {
95 return this.type;
96 }
97
98
99
100
101 @SuppressWarnings("unchecked")
102 public void setValue(Object value) {
103 this.value = (E)castTo(getValueType(), value);
104 setAvailable(value != null);
105 }
106
107
108
109
110
111
112
113
114 private Object castTo(Class<?> type, Object value) {
115 if (type.isAssignableFrom(String.class)) {
116 return (value == null) ? null : value.toString();
117 } else if (type.isAssignableFrom(this.type)) {
118 return value;
119 } else {
120 throw new ClassCastException("Cannot cast to " + type);
121 }
122 }
123 }