01: package net.sf.jmoney.model2;
02:
03: public abstract class ReferencePropertyAccessor<V extends ExtendableObject>
04: extends ScalarPropertyAccessor<V> {
05:
06: // Applies only if this property is of type ExtendableObject
07: // private Field theObjectKeyField;
08:
09: public <E> ReferencePropertyAccessor(Class<V> classOfValueObject,
10: PropertySet<E> propertySet, String localName,
11: String displayName, int weight, int minimumWidth,
12: final IPropertyControlFactory<V> propertyControlFactory,
13: IPropertyDependency<E> propertyDependency) {
14: super (classOfValueObject, propertySet, localName, displayName,
15: weight, minimumWidth, propertyControlFactory,
16: propertyDependency);
17:
18: // Class<E> implementationClass = propertySet.getImplementationClass();
19: //
20: // // If the property value is an extendable object, use introspection on
21: // // the implementation class to find the field containing
22: // // the object key for the object referenced by this property.
23: // if (ExtendableObject.class.isAssignableFrom(classOfValueObject)) {
24: // String fieldName = localName + "Key";
25: //
26: // Class classToTry = propertySet.getImplementationClass();
27: // do {
28: // try {
29: // theObjectKeyField = classToTry.getDeclaredField(fieldName);
30: // break;
31: // } catch (NoSuchFieldException e) {
32: // classToTry = classToTry.getSuperclass();
33: // }
34: // } while (classToTry != null);
35: //
36: // if (theObjectKeyField == null) {
37: // throw new MalformedPluginException("The " + propertySet.getImplementationClass().getName() + " class must have a field called " + fieldName + ".");
38: // }
39: //
40: // if (!IObjectKey.class.isAssignableFrom(theObjectKeyField.getType())) {
41: // throw new MalformedPluginException("Field '" + fieldName + "' in '" + implementationClass.getName() + "' must reference an object type that implements IObjectKey.");
42: // }
43: //
44: // // (1 is public, 2 is private, 4 is protected, 1,2 & 4 bits off is default).
45: // if ((theObjectKeyField.getModifiers() & 5) == 0) {
46: // throw new MalformedPluginException("Field '" + fieldName + "' in '" + implementationClass.getName() + "' must be protected (or public if you insist).");
47: // }
48: // }
49: //
50: }
51:
52: /**
53: * Given an object (which must be of a class that contains this
54: * property), return the object key to this property.
55: *
56: * @param object
57: * @return
58: */
59: public abstract IObjectKey invokeObjectKeyField(
60: ExtendableObject parentObject);
61:
62: // public IObjectKey invokeObjectKeyField(ExtendableObject object) {
63: // if (getPropertySet().isExtension()) {
64: // ExtensionObject extension = object.getExtension((ExtensionPropertySet<?>)getPropertySet(), false);
65: // if (extension == null) {
66: // return null;
67: // } else {
68: // return getObjectKey(extension);
69: //// return (IObjectKey)extension.getProtectedFieldValue(theObjectKeyField);
70: // }
71: // } else {
72: // return getObjectKey(object);
73: //// return (IObjectKey)object.getProtectedFieldValue(theObjectKeyField);
74: // }
75: // }
76:
77: }
|