/*
 * RMIDemoClient.java	1.0 98/11/10
 *
 * Copyright 1998 by Bill Giel/KC Multimedia and Design Group, Inc.,
 * All rights reserved.
 *
 * Disclaimer of Warranty. Software is provided "AS IS,"
 * without a warranty of any kind. ALL EXPRESS OR IMPLIED
 * REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED
 * WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 * PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. IN NO
 * EVENT WILL THE DEVELOPER OR ITS LICENSORS BE LIABLE FOR
 * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
 * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
 * HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
 * RELATING TO THE USE, DOWNLOAD, DISTRIBUTION OF OR INABILITY
 * TO USE SOFTWARE, EVEN IF THE DEVELOPER OR ITS LICENSORS HAS
 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 */

package com.kcmultimedia.demo;

import java.awt.*;
import java.awt.event.*;
import java.rmi.*;

/**
 * Client side RMI demo application
 *
 * @version 1.0 11/10/98
 * @author Bill Giel
 */
public class RMIDemoClient extends Frame
    implements ActionListener
{
    String hostname;

    TextField question,answer;

    Button fetch, quit;
    
    public RMIDemoClient(String hostname)
    {
        super("RMI Demo Client");

        this.hostname = hostname;

        addWindowListener(
            new WindowAdapter(){
                public void windowClosing(WindowEvent e){System.exit(0);}
            }
        );

        setResizable(false);
        setBackground(SystemColor.control);
        setForeground(SystemColor.controlText);        
            
        question = new TextField("",35);

        answer = new TextField("",35);
        answer.setEditable(false);

        fetch = new Button("Get Answer");
        fetch.addActionListener(this);

        quit = new Button("Quit");
        quit.addActionListener(this);

        GridBagLayout gridbag = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        setLayout(gridbag);

        c.weightx = c.weighty = 0;
        c.gridwidth = GridBagConstraints.REMAINDER;
        
        c.insets = new Insets(5,5,0,5);
        add(new Label("Enter a Yes/No Question"),c);

        c.insets = new Insets(0,5,0,5);
        add(question, c);

        c.insets = new Insets(5,5,0,5);        
        add(new Label("The answer to your question..."), c);

        c.insets = new Insets(0,5,0,5);        
        add(answer, c);

        Panel p = new Panel();
        p.add(fetch);
        p.add(quit);

        c.insets = new Insets(5,5,5,5);        
        add(p, c);

        pack();
    }

    public void actionPerformed(ActionEvent e)
    {
        Object src = e.getSource();

        if(src.equals(fetch)){
            if(question.getText().trim().length() > 0){
                try{
                    String s = getAnswer();
                    answer.setText(s);
                }catch(Exception ex){
                    System.out.println(ex.toString());
                    answer.setText("Error: Could not get answer!");
                }
            }
            else{
                answer.setText("Please enter a question.");
            }
        }
        else if(src.equals(quit)){
            System.exit(0);
        }
    }

    public String getAnswer()
        throws Exception
    {
        RMIDemo demo = (RMIDemo)Naming.lookup("//" + hostname + "/" + RMIDemo.BOUNDNAME);
        return demo.getAnswer();
    }

    public static void printUsage()
    {
        System.out.println("\nRMIDemoClient Usage:");
        System.out.println("\njava RMIDemoClient <hostname>\n");
    }

    public static void main(String[] args)
    {
        if(args.length != 1){
            printUsage();
            System.exit(0);
        }

        RMIDemoClient rdc = new RMIDemoClient(args[0]);
        rdc.setVisible(true);
    }
}

