001 002 package org.objectweb.jac.core.dist; 003 004 import java.lang.reflect.Field; 005 import java.util.Hashtable; 006 007 import org.objectweb.jac.core.rtti.ClassRepository; 008 009 public class ObjectState { 010 011 public static Field[] getFields(Object object) { 012 013 Hashtable fields = ClassRepository.getDirectFieldAccess(object.getClass()); 014 Object[] res = fields.values().toArray(); 015 Field[] ares = new Field[res.length]; 016 System.arraycopy ( res, 0, ares, 0, ares.length ); 017 return ares; 018 019 } 020 021 public static Field getField(Object object,String name) { 022 023 Hashtable fields = ClassRepository.getDirectFieldAccess(object.getClass()); 024 return (Field) fields.get(name); 025 026 } 027 028 public static Object getFieldValue (Object substance,String fieldName) { 029 Hashtable ht = ClassRepository.getDirectFieldAccess(substance.getClass()); 030 Field field = (Field) ht.get(fieldName); 031 if ( field == null ) return null; 032 Object ret = null; 033 try { 034 ret = field.get(substance); 035 } catch ( Exception e ) {} 036 return ret; 037 } 038 039 public static Object[] getState (Object substance) { 040 041 Hashtable fields = ClassRepository.getDirectFieldAccess(substance.getClass()); 042 Object[] tmp = fields.keySet().toArray(); 043 String[] names = new String[tmp.length]; 044 System.arraycopy( tmp, 0, names, 0, tmp.length ); 045 Object[] values = new Object[tmp.length]; 046 for ( int i = 0; i < names.length; i ++ ) { 047 Field f = (Field) fields.get ( names[i] ); 048 try { 049 values[i] = f.get(substance); 050 } catch ( Exception e ) {} 051 } 052 053 return new Object[] { names, values }; 054 } 055 056 public static Object[] getState (Object substance,String[] fieldNames) { 057 058 Hashtable tmpfields = ClassRepository.getDirectFieldAccess(substance.getClass()); 059 Hashtable fields = new Hashtable(); 060 for ( int i = 0; i < fieldNames.length; i ++ ) { 061 Field f = (Field) tmpfields.get( fieldNames[i] ); 062 if ( f != null ) { 063 fields.put( fieldNames[i], f ); 064 } 065 } 066 Object[] tmp = fields.keySet().toArray(); 067 String[] names = new String[tmp.length]; 068 System.arraycopy( tmp, 0, names, 0, tmp.length ); 069 Object[] values = new Object[tmp.length]; 070 for ( int i = 0; i < names.length; i ++ ) { 071 Field f = (Field) fields.get ( names[i] ); 072 try { 073 values[i] = f.get(substance); 074 } catch ( Exception e ) {} 075 } 076 077 return new Object[] { names, values }; 078 } 079 080 public static void setState (Object substance, Object[] state ) { 081 082 Hashtable fields = ClassRepository.getDirectFieldAccess(substance.getClass()); 083 String[] names = (String[])state[0]; 084 Object[] values = (Object[])state[1]; 085 for ( int i = 0; i < names.length; i ++ ) { 086 Field f = (Field) fields.get ( names[i] ); 087 try { 088 f.set(substance,values[i]); 089 } catch ( Exception e ) {} 090 } 091 } 092 093 public static void setFieldValue (Object substance, String fieldName, Object value) { 094 Hashtable ht = ClassRepository.getDirectFieldAccess(substance.getClass()); 095 Field field = (Field) ht.get( fieldName ); 096 if ( field == null ) return; 097 try { 098 field.set(substance, value); 099 } catch ( Exception e ) {} 100 } 101 102 }