1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.jdo.impl.model.java;
19
20 import org.apache.jdo.model.ModelFatalException;
21 import org.apache.jdo.model.java.JavaMethod;
22 import org.apache.jdo.model.java.JavaProperty;
23 import org.apache.jdo.model.java.JavaType;
24 import org.apache.jdo.util.I18NHelper;
25
26 /***
27 * Default Implementation of the JavaProperty interface. A JavaProperty
28 * instance represents a JavaBeans property.
29 *
30 * @author Michael Bouschen
31 * @since JDO 2.0
32 */
33 public class JavaPropertyImpl
34 extends AbstractJavaMember
35 implements JavaProperty
36 {
37 /*** The method object of the getter method. */
38 private final JavaMethod getter;
39
40 /*** The method object of the setter method. */
41 private final JavaMethod setter;
42
43 /*** The type of the property. */
44 private final JavaType type;
45
46 /*** I18N support */
47 private static I18NHelper msg =
48 I18NHelper.getInstance(JavaPropertyImpl.class);
49
50 /*** Constructor setting name, getter, setter, type and declaringClass. */
51 public JavaPropertyImpl(String name, JavaMethod getter, JavaMethod setter,
52 JavaType type, JavaType declaringClass)
53 throws ModelFatalException
54 {
55 super(name, declaringClass);
56 this.getter = getter;
57 this.setter = setter;
58 this.type = type;
59 if ((getter == null) && (setter == null))
60 throw new ModelFatalException(
61 msg.msg("EXC_MissingGetterAndSetter",
62 name, declaringClass.getName()));
63 }
64
65
66
67 /***
68 * Returns the environment specific instance wrapped by this JavaModel
69 * element.
70 * <p>
71 * This implementation returns the underlying object of the
72 * getter method if available; otherwise the one from the setter method.
73 * @return the environment specific instance wrapped by this JavaModel
74 * element.
75 */
76 public Object getUnderlyingObject()
77 {
78 Object underlyingObject = null;
79
80 if (getter != null)
81 underlyingObject = getter.getUnderlyingObject();
82 else if (setter != null)
83 underlyingObject = setter.getUnderlyingObject();
84
85 return underlyingObject;
86 }
87
88
89
90 /***
91 * Returns the Java language modifiers for the field represented by
92 * this JavaMember, as an integer. The java.lang.reflect.Modifier class
93 * should be used to decode the modifiers.
94 * <p>
95 * This implementation returns the underlying object of the getter method
96 * if available; otherwise the one from the setter method.
97 * @return the Java language modifiers for this JavaMember
98 * @see java.lang.reflect.Modifier
99 */
100 public int getModifiers()
101 {
102 int modifiers = 0;
103
104 if (getter != null)
105 modifiers = getter.getModifiers();
106 else if (setter != null)
107 modifiers = setter.getModifiers();
108
109 return modifiers;
110 }
111
112
113
114 /***
115 * Returns the JavaMethod representation of the getter method for this
116 * JavaProperty. If there is no getter method for this JavaProperty
117 * (i.e. the property is write-only), then the method returns
118 * <code>null</code>.
119 * @return the getter method if available; or <code>null</code>
120 * otherwise.
121 */
122 public JavaMethod getGetterMethod()
123 {
124 return getter;
125 }
126
127 /***
128 * Returns the JavaMethod representation of the setter method for this
129 * JavaProperty. If there is no setter method for this JavaProperty
130 * (i.e. the property is read-only), then the method returns
131 * <code>null</code>.
132 * @return the setter method if available; or <code>null</code>
133 * otherwise.
134 */
135 public JavaMethod getSetterMethod()
136 {
137 return setter;
138 }
139
140 /***
141 * Returns the JavaType representation of the property type.
142 * @return property type
143 */
144 public JavaType getType()
145 {
146 return type;
147 }
148 }