001: /* Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com
002:
003: This file is part of the db4o open source object database.
004:
005: db4o is free software; you can redistribute it and/or modify it under
006: the terms of version 2 of the GNU General Public License as published
007: by the Free Software Foundation and as clarified by db4objects' GPL
008: interpretation policy, available at
009: http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
010: Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
011: Suite 350, San Mateo, CA 94403, USA.
012:
013: db4o is distributed in the hope that it will be useful, but WITHOUT ANY
014: WARRANTY; without even the implied warranty of MERCHANTABILITY or
015: FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
016: for more details.
017:
018: You should have received a copy of the GNU General Public License along
019: with this program; if not, write to the Free Software Foundation, Inc.,
020: 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
021: package com.db4o.db4ounit.common.reflect.custom;
022:
023: import com.db4o.reflect.*;
024:
025: /**
026: * One important thing to remember when implementing ReflectField
027: * is that getFieldType and getIndexType must always return ReflectClass
028: * instances given by the parent reflector.
029: */
030: public class CustomField implements ReflectField {
031:
032: // fields must be public so test works on less capable runtimes
033: public CustomClassRepository _repository;
034: public String _name;
035: public Class _type;
036: public int _index;
037: public boolean _indexed;
038:
039: public CustomField() {
040: }
041:
042: public CustomField(CustomClassRepository repository, int index,
043: String name, Class type) {
044: _repository = repository;
045: _index = index;
046: _name = name;
047: _type = type;
048: }
049:
050: public Object get(Object onObject) {
051: logMethodCall("get", onObject);
052: return fieldValues(onObject)[_index];
053: }
054:
055: private Object[] fieldValues(Object onObject) {
056: return ((PersistentEntry) onObject).fieldValues;
057: }
058:
059: public ReflectClass getFieldType() {
060: logMethodCall("getFieldType");
061: return _repository.forFieldType(_type);
062: }
063:
064: public String getName() {
065: return _name;
066: }
067:
068: public Object indexEntry(Object orig) {
069: logMethodCall("indexEntry", orig);
070: return orig;
071: }
072:
073: public ReflectClass indexType() {
074: logMethodCall("indexType");
075: return getFieldType();
076: }
077:
078: public boolean isPublic() {
079: return true;
080: }
081:
082: public boolean isStatic() {
083: return false;
084: }
085:
086: public boolean isTransient() {
087: return false;
088: }
089:
090: public void set(Object onObject, Object value) {
091: logMethodCall("set", onObject, value);
092: fieldValues(onObject)[_index] = value;
093: }
094:
095: public void setAccessible() {
096: }
097:
098: public void indexed(boolean value) {
099: _indexed = value;
100: }
101:
102: public boolean indexed() {
103: return _indexed;
104: }
105:
106: public String toString() {
107: return "CustomField(" + _index + ", " + _name + ", "
108: + _type.getName() + ")";
109: }
110:
111: private void logMethodCall(String methodName) {
112: Logger.logMethodCall(this , methodName);
113: }
114:
115: private void logMethodCall(String methodName, Object arg) {
116: Logger.logMethodCall(this , methodName, arg);
117: }
118:
119: private void logMethodCall(String methodName, Object arg1,
120: Object arg2) {
121: Logger.logMethodCall(this, methodName, arg1, arg2);
122: }
123: }
|