Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

StreamableRep.java

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     //Import ObjectManager stuff
00140         
00141     //Break return contract
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     //OStream stuff
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 

Generated on Thu Jul 15 09:55:49 2004 for SCT DAQ/DCS Software - Java by doxygen 1.3.5