1 4 package com.tc.object; 5 6 import com.tc.exception.ImplementMe; 7 import com.tc.object.bytecode.TransparentAccess; 8 import com.tc.object.dna.api.DNA; 9 import com.tc.object.dna.api.DNAWriter; 10 import com.tc.object.field.TCField; 11 import com.tc.object.field.TCFieldFactory; 12 import com.tc.object.tx.optimistic.OptimisticTransactionManager; 13 import com.tc.objectserver.core.api.TestDNAWriter; 14 15 import java.lang.reflect.Constructor ; 16 import java.lang.reflect.Field ; 17 import java.util.Collection ; 18 import java.util.HashMap ; 19 import java.util.Map ; 20 21 24 public class TCObjectImplTest extends BaseDSOTestCase { 25 26 public void tests() throws Exception { 27 TestClientObjectManager objectManager = new TestClientObjectManager(); 28 TCClass clazz = new TestTCClass(objectManager); 29 TestObject to1 = new TestObject(null, null); 30 TestObject to2 = new TestObject("TestObject2", null); 31 ObjectID id1 = new ObjectID(1); 32 ObjectID id2 = new ObjectID(2); 33 objectManager.add(id2, new TCObjectPhysical(objectManager.getReferenceQueue(), id2, to2, clazz)); 34 35 TCObjectImpl tcObj = new TCObjectPhysical(objectManager.getReferenceQueue(), id1, to1, clazz); 36 tcObj.resolveReference(TestObject.class.getName() + ".test1"); 37 tcObj.resolveReference(TestObject.class.getName() + ".test2"); 38 assertTrue(to1.test1 == null); assertTrue(to1.test2 == null); 40 41 tcObj.setReference(TestObject.class.getName() + ".test2", new ObjectID(2)); 42 43 assertTrue(to1.test1 == null); assertTrue(to1.test2 == null); 45 46 tcObj.resolveReference(TestObject.class.getName() + ".test2"); 47 assertTrue(to1.test1 == null); assertTrue(to1.test2 == to2); 49 50 tcObj.dehydrate(new TestDNAWriter()); 51 tcObj.clearReferences(100); 52 assertTrue(to1.test2 == null); 53 tcObj.resolveReference(TestObject.class.getName() + ".test2"); 54 assertTrue(to1.test2 == to2); 55 } 56 57 private static class TestObject implements TransparentAccess { 58 public String test1; 59 public TestObject test2; 60 61 public TCObject managed; 62 63 public TestObject(String test1, TestObject test2) { 64 this.test1 = test1; 65 this.test2 = test2; 66 } 67 68 public void __tc_getallfields(Map map) { 69 map.put(getClass().getName() + "." + "test1", test1); 70 map.put(getClass().getName() + "." + "test2", test2); 71 } 72 73 public void __tc_setfield(String fieldName, Object value) { 74 if (fieldName.equals(TestObject.class.getName() + ".test1")) { 75 test1 = (String ) value; 76 } 77 if (fieldName.equals(TestObject.class.getName() + ".test2")) { 78 test2 = (TestObject) value; 79 } 80 } 81 82 public void __tc_managed(TCObject b) { 83 this.managed = b; 84 } 85 86 public TCObject __tc_managed() { 87 return managed; 88 } 89 90 public Object __tc_getmanagedfield(String name) { 91 throw new ImplementMe(); 92 } 93 94 public void __tc_setmanagedfield(String name, Object value) { 95 throw new ImplementMe(); 96 } 97 98 } 99 100 public class TestTCClass implements TCClass { 101 private TCFieldFactory fieldFactory; 102 private Map fields = new HashMap (); 103 private final TestClientObjectManager objectManager; 104 105 public Field getParentField() { 106 return null; 107 } 108 109 public String getParentFieldName() { 110 return "className.this$0"; 111 } 112 113 public TestTCClass(TestClientObjectManager objectManager) throws Exception { 114 this.objectManager = objectManager; 115 fieldFactory = new TCFieldFactory(configHelper()); 116 Field[] flds = TestObject.class.getDeclaredFields(); 117 for (int i = 0; i < flds.length; i++) { 118 fields.put(TestObject.class.getName() + "." + flds[i].getName(), fieldFactory.getInstance(this, flds[i])); 119 } 120 } 121 122 public TCField[] getPortableFields() { 123 Collection fs = fields.values(); 124 return (TCField[]) fs.toArray(new TCField[fs.size()]); 125 } 126 127 public Constructor getConstructor() throws SecurityException { 128 return null; 130 } 131 132 public TCClass getSuperclass() { 133 return null; 135 } 136 137 public boolean isPortable() { 138 return false; 140 } 141 142 public TCField getDeclaredField(String name) { 143 try { 144 return (TCField) fields.get(name); 145 } catch (Exception e) { 146 throw new RuntimeException (e); 147 } 148 } 149 150 public TCField getField(String name) { 151 return getDeclaredField(name); 152 } 153 154 public TCField getField(String classname, String fieldname) { 155 return null; 157 } 158 159 public TCField getField(Field field) { 160 return null; 162 } 163 164 public boolean isIndexed() { 165 return false; 167 } 168 169 public void hydrate(TCObject tcObject, DNA dna, Object pojo, boolean force) { 170 } 172 173 public void dehydrate(TCObject tcObject, DNAWriter writer, Object pojo) { 174 } 176 177 public String getName() { 178 return TestObject.class.getName(); 179 } 180 181 public Class getComponentType() { 182 return null; 183 } 184 185 public TraversedReferences getPortableObjects(Object pojo, TraversedReferences addTo) { 186 return addTo; 187 } 188 189 public String getDefiningLoaderDescription() { 190 throw new ImplementMe(); 191 } 192 193 public boolean isNonStaticInner() { 194 return false; 195 } 196 197 public boolean isLogical() { 198 return false; 199 } 200 201 public TCObject createTCObject(ObjectID id, Object peer) { 202 throw new ImplementMe(); 203 } 204 205 public boolean hasOnLoadExecuteScript() { 206 return false; 207 } 208 209 public String getOnLoadExecuteScript() { 210 211 return null; 212 } 213 214 public boolean hasOnLoadMethod() { 215 return false; 216 } 217 218 public String getOnLoadMethod() { 219 return null; 220 } 221 222 public boolean isUseNonDefaultConstructor() { 223 return false; 224 } 225 226 public Object getNewInstanceFromNonDefaultConstructor(DNA dna) { 227 return null; 228 } 229 230 public Class getPeerClass() { 231 throw new ImplementMe(); 232 } 233 234 public Map connectedCopy(Object source, Object dest, Map visited, OptimisticTransactionManager txManager) { 235 throw new ImplementMe(); 236 } 237 238 public String getFieldNameByOffset(long fieldOffset) { 239 throw new ImplementMe(); 240 } 241 242 public ClientObjectManager getObjectManager() { 243 return objectManager; 244 } 245 246 public boolean isProxyClass() { 247 return false; 248 } 249 250 public String getExtendingClassName() { 251 return getName(); 252 } 253 254 public boolean isEnum() { 255 return false; 256 } 257 } 258 } 259 | Popular Tags |