00001 package Sct.IS;
00002 import Sct.*;
00003 import java.io.IOException;
00004 import java.io.InvalidClassException;
00005
00006 public class ObjectManagerIS extends AbstractObjectManager {
00007 private static ObjectManagerIS instance;
00008 static {
00009 instance = new ObjectManagerIS();
00010 }
00011
00012 protected ObjectManagerIS() {}
00013
00014 public static ObjectManagerIS getInstance() {
00015 return instance;
00016 }
00017
00018
00019 public Serializable readObject(String uniqueID, String className) throws IOException{
00020 ISObject o = new ISObject(className);
00021 NameIS name = new NameIS(className, uniqueID);
00022 is.Repository r = SctNames.getISRepository();
00023 try {
00024 r.getValue(name.getName(), o);
00025 } catch (RuntimeException re) {
00026 IOException e = new IOException("IS Exception trying to read " + name.getName());
00027 e.initCause(re);
00028 throw e;
00029 }
00030
00031 return o.s;
00032 }
00033
00034 public Name writeObject(Serializable object) throws IOException{
00035 ISObject o = new ISObject(object);
00036 is.Repository r = SctNames.getISRepository();
00037 NameIS name = new NameIS(object);
00038 try {
00039 r.insert(name.getName(), o);
00040 } catch (RuntimeException re) {
00041 IOException e = new IOException("IS Exception trying to write " + name.getName());
00042 e.initCause(re);
00043 throw e;
00044 }
00045 return name;
00046 }
00047
00048 public Serializable readObject(String name) throws IOException{
00049 is.Repository r = SctNames.getISRepository();
00050
00051 try {
00052 NameIS nameIS = new NameIS(name);
00053 ISObject o = new ISObject(nameIS.getClassName());
00054 r.getValue(name, o);
00055 return o.s;
00056
00057 } catch (IllegalArgumentException iae) {
00058 is.AnyInfo any = new is.AnyInfo();
00059 try {
00060 r.getValue(name, any);
00061 return new AnyInfoAdapter(any);
00062 } catch (RuntimeException re) {
00063 IOException e = new IOException("IS Exception trying to read " + name);
00064 e.initCause(re);
00065 throw e;
00066 }
00067 } catch (RuntimeException re) {
00068 IOException e = new IOException("IS Exception trying to read " + name);
00069 e.initCause(re);
00070 throw e;
00071 }
00072
00073 }
00074
00075
00076 protected class ISObject extends is.Info {
00077 protected boolean bInConstructor = true;
00078 Serializable s;
00079
00083 ISObject(Serializable s) {
00084 super(s.getClassName());
00085 this.s = s;
00086 bInConstructor = false;
00087 }
00088
00092 ISObject(String typename) {
00093 super(typename);
00094 bInConstructor = false;
00095 }
00096
00097 public void publishGuts(is.Ostream out) {
00098 if (bInConstructor) return;
00099 super.publishGuts(out);
00100 try {
00101 OStreamIS outIS = new OStreamIS(out);
00102 writeClassName(outIS, s.getClassName());
00103 s.write(outIS, ObjectManagerIS.getInstance());
00104 } catch (IOException e) {
00105 e.printStackTrace();
00106 return;
00107 }
00108 }
00109 public void refreshGuts(is.Istream in) {
00110 super.refreshGuts(in);
00112 try {
00113 IStreamIS inIS = new IStreamIS(in);
00114 s = (Serializable)ObjectManagerIS.getInstance().createObject(inIS, readClassName(inIS));
00115 } catch (InvalidClassException e) {
00116 IllegalArgumentException ie = new IllegalArgumentException();
00117 ie.initCause(e);
00118 throw ie;
00119 } catch (Exception e) {
00120 e.printStackTrace();
00121 return;
00122 }
00123 }
00124 }
00125 }