import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class StudentClient extends JApplet {
  private JTextField jtfName = new JTextField(32);
  private JTextField jtfStreet = new JTextField(32);
  private JTextField jtfCity = new JTextField(20);
  private JTextField jtfState = new JTextField(2);
  private JTextField jtfZip = new JTextField(5);
  
  private JButton jbtRegister = new JButton("Register to the Server");
  
  private boolean isStandAlone = false;
  
  String host = "localhost";
  public void init() {
    
    JPanel p1 = new JPanel();
    p1.setLayout(new GridLayout(3, 1));
    p1.add(new JLabel("Name"));
    p1.add(new JLabel("Street"));
    p1.add(new JLabel("City"));
    
    JPanel jpState = new JPanel();
    jpState.setLayout(new BorderLayout());
    jpState.add(new JLabel("State"), BorderLayout.WEST);
    jpState.add(jtfState, BorderLayout.CENTER);
    
    JPanel jpZip = new JPanel();
    jpZip.setLayout(new BorderLayout());
    jpZip.add(new JLabel("Zip"), BorderLayout.WEST);
    jpZip.add(jtfZip, BorderLayout.CENTER);
    
    JPanel p2 = new JPanel();
    p2.setLayout(new BorderLayout());
    p2.add(jpState, BorderLayout.WEST);
    p2.add(jpZip, BorderLayout.CENTER);
    
    JPanel p3 = new JPanel();
    p3.setLayout(new BorderLayout());
    p3.add(jtfCity, BorderLayout.CENTER);
    p3.add(p2, BorderLayout.EAST);
    
    JPanel p4 = new JPanel();
    p4.setLayout(new GridLayout(3, 1));
    p4.add(jtfName);
    p4.add(jtfStreet);
    p4.add(p3);
    
    JPanel studentPanel = new JPanel(new BorderLayout());
    studentPanel.setBorder(new BevelBorder(BevelBorder.RAISED));
    studentPanel.add(p1, BorderLayout.WEST);
    studentPanel.add(p4, BorderLayout.CENTER);
    
    add(studentPanel, BorderLayout.CENTER);
    add(jbtRegister, BorderLayout.SOUTH);
    
    jbtRegister.addActionListener(new ButtonListener());
    
    if (!isStandAlone)
      host = getCodeBase().getHost();
  }
  
  private class ButtonListener implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
      try {
        
        Socket socket = new Socket(host, 8000);
        
        ObjectOutputStream toServer =
          new ObjectOutputStream(socket.getOutputStream());
        
        String name = jtfName.getText().trim();
        String street = jtfStreet.getText().trim();
        String city = jtfCity.getText().trim();
        String state = jtfState.getText().trim();
        String zip = jtfZip.getText().trim();
        
        StudentAddress s =
          new StudentAddress(name, street, city, state, zip);
        toServer.writeObject(s);
      }
      catch (IOException ex) {
        System.err.println(ex);
      }
    }
  }
  
  public static void main(String[] args) {
    
    JFrame frame = new JFrame("Register Student Client");
    
    StudentClient applet = new StudentClient();
    applet.isStandAlone = true;
    
    if (args.length == 1) applet.host = args[0];
    
    frame.add(applet, BorderLayout.CENTER);
    
    applet.init();
    applet.start();
    
    frame.pack();
    frame.setVisible(true);
  }
}