/** * */ package edu.washington.cs.publickey; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; /** * @author isdal * */ public class PublicKeyFriendBean { public static boolean logToStdOut = false; public static PublicKeyFriendBean[] deserialize(String raw) throws IOException { log("'" + raw + "'"); ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); ClassLoader beanClassLoader = PublicKeyFriendBean.class.getClassLoader(); log("using cl " + oldClassLoader); if (!oldClassLoader.equals(beanClassLoader)) { log("setting class loader to: " + beanClassLoader); Thread.currentThread().setContextClassLoader(beanClassLoader); } if (raw.length() == 0) { return new PublicKeyFriendBean[0]; } PublicKeyFriendBean[] res = null; ByteArrayInputStream in = new ByteArrayInputStream(raw.getBytes("UTF-8")); XMLDecoder d = new XMLDecoder(in); Object o = d.readObject(); if (o instanceof PublicKeyFriendBean[]) { res = ((PublicKeyFriendBean[]) o); } in.close(); if (!oldClassLoader.equals(beanClassLoader)) { log("setting old classloader: " + oldClassLoader); Thread.currentThread().setContextClassLoader(oldClassLoader); } return res; } private static void log(String msg) { if (logToStdOut) { System.out.println(msg); } } public static String serialize(PublicKeyFriendBean[] f) throws IOException { ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); ClassLoader beanClassLoader = PublicKeyFriendBean.class.getClassLoader(); log("using cl " + oldClassLoader); if (!oldClassLoader.equals(beanClassLoader)) { log("setting class loader to: " + beanClassLoader); Thread.currentThread().setContextClassLoader(beanClassLoader); } ByteArrayOutputStream out = new ByteArrayOutputStream(); XMLEncoder e = new XMLEncoder(out); e.writeObject(f); e.close(); out.close(); String ret = new String(out.toByteArray(), "UTF-8"); log("'" + ret + "'"); if (!oldClassLoader.equals(beanClassLoader)) { log("setting old classloader: " + oldClassLoader); Thread.currentThread().setContextClassLoader(oldClassLoader); } return ret; } private String keyNick; private String publicKey; private String publicKeySha1; private String realName; private int sourceNetwork; private String sourceNetworkUid; public boolean equals(Object o) { if (o != null) { if (o instanceof PublicKeyFriendBean) { PublicKeyFriendBean c = (PublicKeyFriendBean) o; if (!publicKey.equals(c.getPublicKey())) { log("public key not same"); log("'" + publicKey + "'"); log("'" + c.getPublicKey() + "'"); return false; } if (sourceNetwork != c.getSourceNetwork()) { log("source net not same"); return false; } if (!sourceNetworkUid.equals(c.getSourceNetworkUid())) { log("net uid not same"); log("'" + sourceNetworkUid + "'"); log("'" + c.getSourceNetworkUid() + "'"); return false; } if (!keyNick.equals(c.getKeyNick())) { log("key nick not same"); return false; } return true; } } return false; } public String getKeyNick() { return keyNick; } public String getPublicKey() { return publicKey; } public String getPublicKeySha1() { return publicKeySha1; } public String getRealName() { return realName; } public int getSourceNetwork() { return sourceNetwork; } public String getSourceNetworkUid() { return sourceNetworkUid; } // public static PublicKeyFriendBean[] deserialize(String raw) throws // IOException { // return deserialize(raw, Thread.currentThread().getContextClassLoader()); // } public String serialize() throws IOException { return serialize(new PublicKeyFriendBean[] { this }); } // public static String serialize(PublicKeyFriendBean[] f) throws // IOException { // return serialize(f, Thread.currentThread().getContextClassLoader()); // } public void setKeyNick(String keyNick) { this.keyNick = keyNick; } public void setPublicKey(String publicKey) { this.publicKey = publicKey; } public void setPublicKeySha1(String publicKeySha1) { this.publicKeySha1 = publicKeySha1; } public void setRealName(String realName) { this.realName = realName; } public void setSourceNetwork(int sourceNetwork) { this.sourceNetwork = sourceNetwork; } public void setSourceNetworkUid(String sourceNetworkUid) { this.sourceNetworkUid = sourceNetworkUid; } public String toString() { return realName + " (" + keyNick + ") " + sourceNetwork + " " + sourceNetworkUid + " " + publicKey; } }