import java.awt.*;
import java.applet.Applet;

public class aceClientApplet extends Applet {
  AceView.AceDB acedb;
  int aceHandle;
  String ior_file_name;
  String ace_path_name;
  List classList;
  GridBagLayout gridbag;
  GridBagConstraints gbconstraints;


  public aceClientApplet() {
    //FlowLayout myLayout = new FlowLayout();
    //this.setLayout( myLayout );
    
    ior_file_name = new String( "http://moot.cadif.cornell.edu/doc/demos/corba/AceDB.ref" );
    ace_path_name = new String( "?????" );
    gridbag = new GridBagLayout();
    this.setLayout(gridbag);
    gbconstraints = new GridBagConstraints();
    gbconstraints.fill = GridBagConstraints.BOTH;
    gbconstraints.weightx = 1.0;
    gbconstraints.weighty = 1.0;
    gbconstraints.gridwidth = GridBagConstraints.REMAINDER;
    gbconstraints.gridheight = 1;


 
  }

  public void init() {
    classList = new List();
    classList.resize( 300, 200 );
    gridbag.setConstraints( classList,gbconstraints );
    add(classList);
  }


  public void start() {
    String classListArray[];

    connectCorbaURL( ior_file_name );
    //    System.out.println( "connected" );
    try {
      acedb.aceOpen("" );
      //*****this should raise an exception
      //acedb.aceForbidWriteAccess();
      //      acedb.aceGetWriteAccess( true );
      //*************************
      aceHandle = acedb.aceHandleCreate( aceHandle );
      System.out.println( "Connected to Ace Server..." );
      classListArray = acedb.aceClasses( aceHandle );
    //System.out.println( "hello " + String.valueOf( classListArray.length ));
      for ( int i = 0; i < classListArray.length; i++ ) {
        String newItem = new String( classListArray[i] );
      //System.out.println( newItem );

        classList.addItem( String.valueOf( acedb.aceClassSize( newItem )) + " " + newItem   );
    }
    } catch ( AceView.aceException e ) {
      System.err.println( "Ace Error: " + e.message );
    }
    classList.repaint();
  }

  /**
   * connect to a corba service given an url that contains the IOR
   */
  void connectCorbaURL( String iorUrl ) {

     try{

       org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();

       IORHolder ior_holder = new IORHolder();
       String iorString = ior_holder.readURL( iorUrl );
       
       org.omg.CORBA.Object object = orb.string_to_object( iorString );
       acedb = AceView.AceDBHelper.narrow( object );



     } catch ( org.omg.CORBA.SystemException e ) {

         System.err.println( "System Exception ");
         System.err.println( e );
     }

  }
  /**
   * connect to a corba service given the name of a file that contains the ior
   */
  void connectCorbaFile( String iorFileName ) {

     try{

       org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();

       IORHolder ior_holder = new IORHolder();
       String iorString = ior_holder.readIORFile( iorFileName );
       
       org.omg.CORBA.Object object = orb.string_to_object( iorString );
       acedb = AceView.AceDBHelper.narrow( object );



     } catch ( org.omg.CORBA.SystemException e ) {

         System.err.println( "System Exception ");
         System.err.println( e );
     }

  }

  public boolean handleEvent(Event e) {
    if (e.id == Event.WINDOW_DESTROY) {
      System.exit(0);
    }
    return super.handleEvent(e);
  }



}




