import java.io.*;

public class FriendLoader extends ClassLoader {
  MessagePane mp = null;
   void setMessagePane(MessagePane mp){
     this.mp = mp;
   }

   public Class getFriend() throws ClassNotFoundException {
      return findClass("Friend");
   }

   protected Class findClass(String className) throws ClassNotFoundException {
      byte classData[]= getFileData();
      if (classData == null) {
         throw new ClassNotFoundException();
      }
      return defineClass(className, classData,0,classData.length);
   }

   private byte[] getFileData()  {
      BufferedInputStream bufferedInputStream = getBufferedInputStream();
      ByteArrayOutputStream byteArrayOutputStream =
                   getByteOutputFromFileInput(bufferedInputStream);
      return byteArrayOutputStream.toByteArray();
   }

   private BufferedInputStream getBufferedInputStream(){
      BufferedInputStream bufferedInputStream = null;
      try {
         File friend = new File("Friend.class");
         FileInputStream fileInputStream =
                        new FileInputStream(friend.getPath());
         bufferedInputStream = new BufferedInputStream(fileInputStream);
      }
      catch (FileNotFoundException e){
        System.out.println("not finding file");
         mp.classNotFound();
      }
      return bufferedInputStream;
   }

   private ByteArrayOutputStream getByteOutputFromFileInput
                (BufferedInputStream bufferedInputStream){
      ByteArrayOutputStream byteArrayOutputStream =
                    new ByteArrayOutputStream();
      try {
         int c = bufferedInputStream.read();
         while(c != -1) {
            byteArrayOutputStream.write(c);
            c = bufferedInputStream.read();
         }
      }
      catch (IOException e){
         return null;
      }
      return byteArrayOutputStream;
   }
}