import java.awt.*;

public class URLDialog extends Dialog {
  private TextField url, login, passwd, remdir, port;
  private Button b_ok, b_canc, b_cls;
  private String ClassName = "URLDialog";
  private String Message = "";
  private boolean Ok = false;

/**
 * Construction de la fenetre de saisie des parametres de l'URL
 * @param d_url nom de l'url par defaut
 * @param d_remdir valeur par defaut du remote directory
 * @param d_port valeur par defaut du port
 */
  public URLDialog(String d_url, String d_remdir, String d_port) {
    super(new Frame(),"URL Parameters", true);
    setLayout(null);
    add(url = new TextField(d_url));
    add(login = new TextField());
    add(passwd = new TextField()); passwd.setEchoCharacter('*');
    add(remdir = new TextField(d_remdir));
    add(port = new TextField(d_port));
    add(b_ok = new Button("Ok"));
    add(b_cls = new Button("Clear"));
    add(b_canc = new Button("Cancel"));
    resize(320, 350);

// Mise en place de la zone pour l'URL
    url.move(10, 45);
    url.resize(300, 30);

// Mise en place de la zone pour l'URL
    login.move(10, 95);
    login.resize(300, 30);

// Mise en place de la zone pour l'URL
    passwd.move(10, 145);
    passwd.resize(300, 30);

// Mise en place de la zone pour l'URL
    remdir.move(10, 195);
    remdir.resize(300, 30);

// Mise en place de la zone pour l'URL
    port.move(10, 245);
    port.resize(300, 30);

// Mise en place du bouton Ok
    b_ok.move(50, 295);
    b_ok.resize(60, 30);

// Mise en place du bouton Clear
    b_cls.move(130, 295);
    b_cls.resize(60, 30);

// Mise en place du bouton Cancel
    b_canc.move(210, 295);
    b_canc.resize(60, 30);
  }

  public void paint(Graphics g) {
    g.setColor(Color.black);
    Font f = g.getFont();
    g.setFont(new Font(f.getName(), Font.BOLD, f.getSize()));
    g.setColor(Color.black);

    g.drawString("URL", 10, 40);
    g.drawString("Login", 10, 90);
    g.drawString("Password", 10, 140);
    g.drawString("Remote Directory", 10, 190);
    g.drawString("Port", 10, 240);

// Affichage du message
    g.setColor(Color.red);
    g.drawString(Message, 10, 340);
  }

  public boolean action(Event ev, Object what) {
    try {
      if (ev.target instanceof Button) {
        Init.println(ClassName, what.toString());
        if (what.equals("Ok"))
          Ok = true; 
        if (!what.equals("Clear"))
	  dispose();  // On ne detruit pas la fenetre sur un Clear
        else {
	  url.setText("");
	  login.setText("");
	  passwd.setText("");
	  remdir.setText("");
	  port.setText("");
	}
      } else if (ev.target==port) // Changement de la valeur du Port
// On verifie si c'est bien un entier
        Integer.parseInt((String)what);
      else {
        Init.println(ClassName, "action:"+ev.target+"."+what);
        Ok = true;
        dispose();
      } 
      if (!Message.equals("")) {
	Message = "";
	repaint();
      }
    } catch (NumberFormatException nfe) {
      port.setText("");
      Message = "You must enter a number for the port field.";
      repaint();
    }
    return super.action(ev, what);
  }

  public String getURL() {
    Init.println(ClassName, "getURL:"+url.getText());
    return url.getText();
  }

  public String getLogin() {
    Init.println(ClassName, "getLogin:"+login.getText());
    return login.getText();
  }

  public String getPasswd() {
    Init.println(ClassName, "getPasswd:"+passwd.getText());
    return passwd.getText();
  }

  public String getRemdir() {
    Init.println(ClassName, "getRemdir:"+remdir.getText());
    return remdir.getText();
  }

  public String getPort() {
    Init.println(ClassName, "getPort:"+port.getText());
    return port.getText();
  }

/**
 * Return true si on a clicke sur Ok , false sinon
 */
  public boolean getMode() {
    Init.println(ClassName, "getMode:"+Ok);
    return Ok;
  }
}
