00001 package GuiComponents.Inspector;
00002
00003 import java.util.*;
00004 import java.lang.reflect.*;
00005 import Sct.*;
00006
00007 interface Rep {
00008 public String getName();
00009 public String getClassName();
00010 public String getValue();
00011 }
00012
00013 class PrimitiveRep implements Rep {
00014 protected String name;
00015 protected String typeName;
00016 protected Object value;
00017
00018 PrimitiveRep(String name, Object value) {
00019 this.name = name;
00020 this.value = value;
00021 typeName = value.getClass().getName();
00022 }
00023
00024 public String toString() {
00025 return getName();
00026 }
00027
00028 public String getName() {
00029 return name;
00030 }
00031
00032 public String getClassName() {
00033 return typeName;
00034 }
00035
00036 public String getValue() {
00037 return value.toString();
00038 }
00039 }
00040
00041 class NullRep extends PrimitiveRep {
00042 NullRep(String name) {
00043 super(name, "null");
00044 typeName = "Unknown";
00045 }
00046 }
00047
00048 class ArrayRep extends PrimitiveRep {
00049 ArrayRep(String name, Object value) {
00050 super(name, value);
00051 typeName = value.getClass().getComponentType().getName() + "[" + Array.getLength(value) + "]";
00052 }
00053
00054
00055 public String getValue() {
00056 int count = 10;
00057 if (Array.getLength(value) < 10) count = Array.getLength(value);
00058 String s = "";
00059 for (int i=0; i<count; ++i) {
00060 if(getClassName().startsWith("int")) {
00061 Integer intVal = (Integer)Array.get(value, i);
00062 String hexString = "0x" + Integer.toHexString(intVal.intValue());
00063 s += hexString;
00064 } else {
00065 s += Array.get(value, i);
00066 }
00067
00068 if(i<count-1) s += ", ";
00069 }
00070 return s;
00071 }
00072 }
00073
00074 class StreamableRep implements Rep, Sct.OStream, Sct.ObjectManager {
00075 protected ArrayList streamables = new ArrayList();
00076 protected ArrayList primitives = new ArrayList();
00077 protected String className;
00078 protected String name;
00079 private Streamable object;
00080 private boolean written = false;
00081
00082 StreamableRep(String name, Serializable ob) {
00083 className = ob.getClassName();
00084 object = ob;
00085 this.name = name;
00086 writeObject(ob);
00087 written = true;
00088 }
00089
00090 StreamableRep(String name, Streamable ob) {
00091 className = ob.getClassName();
00092 object = ob;
00093 this.name = name;
00094
00095 if (ob instanceof Serializable) {
00096 this.name += " (" + ob.getClassName() + "." + ((Serializable)ob).getUniqueID() + ")";
00097 }
00098 }
00099
00100 public String toString() {
00101 return getName();
00102 }
00103
00104 public String getName() {
00105 return name;
00106 }
00107
00108 public String getClassName() {
00109 return className;
00110 }
00111
00112 public String getValue() {
00113 return "";
00114 }
00115
00116 int getChildCount() {
00117 if (!written) writeChildren();
00118 return streamables.size() + primitives.size();
00119 }
00120
00121 Rep getChild(int index) {
00122 if (index >= streamables.size()) {
00123 return (Rep)primitives.get(index - streamables.size());
00124 } else {
00125 return (Rep)streamables.get(index);
00126 }
00127 }
00128
00129 private void writeChildren() {
00130 if (written) return;
00131 try {
00132 object.write(this, this);
00133 written = true;
00134 } catch (java.io.IOException ioe) {
00135 throw new RuntimeException(ioe);
00136 }
00137 }
00138
00139
00140
00141
00142 public Name writeObject(Serializable object) {
00143 try {
00144 object.write(this, this);
00145 } catch (java.io.IOException ioe) {
00146 throw new RuntimeException(ioe);
00147 }
00148 return null;
00149 }
00150
00151 public void writeObject(OStream s, String name, Streamable object, boolean writeClassName) {
00152 if (object == null) primitives.add(new NullRep(name));
00153 else {
00154 StreamableRep srep = new StreamableRep(name, object);
00155 streamables.add(srep);
00156 }
00157 }
00158
00159
00160
00161 public void writeBoolean(String name, boolean b) {
00162 primitives.add(new PrimitiveRep(name, new Boolean(b)));
00163 }
00164
00165 public void writeBooleanArray(String name, boolean[] b) {
00166 primitives.add(new ArrayRep(name, b));
00167 }
00168
00169 public void writeByte(String name, byte b, boolean sign) {
00170 primitives.add(new PrimitiveRep(name, new Byte(b)));
00171 }
00172
00173 public void writeByteArray(String name, byte[] b, boolean sign) {
00174 primitives.add(new ArrayRep(name, b));
00175 }
00176
00177 public void writeDouble(String name, double d) {
00178 primitives.add(new PrimitiveRep(name, new Double(d)));
00179 }
00180
00181 public void writeDoubleArray(String name, double[] d) {
00182 primitives.add(new ArrayRep(name, d));
00183 }
00184
00185 public void writeFloat(String name, float f) {
00186 primitives.add(new PrimitiveRep(name, new Float(f)));
00187 }
00188
00189 public void writeFloatArray(String name, float[] f) {
00190 primitives.add(new ArrayRep(name, f));
00191 }
00192
00193 public void writeInt(String name, int i, boolean sign) {
00194 primitives.add(new PrimitiveRep(name, new Integer(i)));
00195 }
00196
00197 public void writeIntArray(String name, int[] i, boolean sign) {
00198 primitives.add(new ArrayRep(name, i));
00199 }
00200
00201 public void writeShort(String name, short s, boolean sign) {
00202 primitives.add(new PrimitiveRep(name, new Short(s)));
00203 }
00204
00205 public void writeShortArray(String name, short[] s, boolean sign) {
00206 primitives.add(new ArrayRep(name, s));
00207 }
00208
00209 public void writeString(String name, String s) {
00210 primitives.add(new PrimitiveRep(name, s));
00211 }
00212
00213 public void writeStringArray(String name, String[] s) {
00214 primitives.add(new ArrayRep(name, s));
00215 }
00216
00217 public Sct.Serializable readObject(String name) throws UnsupportedOperationException{
00218 throw new UnsupportedOperationException("TestGUI.Inspector.ObjectManager only supports write operations");
00219 }
00220
00221 public Sct.Streamable readObject(IStream s, String name) throws UnsupportedOperationException {
00222 throw new UnsupportedOperationException("TestGUI.Inspector.ObjectManager only supports write operations");
00223 }
00224
00225 public Sct.Serializable readObject(String uniqueID, String className) throws UnsupportedOperationException {
00226 throw new UnsupportedOperationException("TestGUI.Inspector.ObjectManager only supports write operations");
00227 }
00228
00229 public Sct.Streamable readObject(IStream s, String name, String className) throws UnsupportedOperationException {
00230 throw new UnsupportedOperationException("TestGUI.Inspector.ObjectManager only supports write operations");
00231 }
00232
00233 public void writeLong(String name, long i, boolean sign) throws java.io.IOException {
00234 }
00235
00236 public void writeLongArray(String name, long[] i, boolean sign) throws java.io.IOException {
00237 }
00238
00239 }
00240
00241