package com.jediterm.terminal.ui;
import com.jediterm.terminal.Questioner;
import com.jediterm.terminal.Terminal;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class PreConnectHandler implements Questioner, KeyListener {
private Object mySync = new Object();
private Terminal myTerminal;
private StringBuffer myAnswer;
private boolean myVisible;
public PreConnectHandler(Terminal terminal) {
this.myTerminal = terminal;
this.myVisible = true;
}
// These methods will suspend the current thread and wait for
// the event handling thread to provide the answer.
public String questionHidden(String question) {
myVisible = false;
String answer = questionVisible(question, null);
myVisible = true;
return answer;
}
public String questionVisible(String question, String defValue) {
synchronized (mySync) {
myTerminal.writeUnwrappedString(question);
myAnswer = new StringBuffer();
if (defValue != null) {
myAnswer.append(defValue);
myTerminal.writeUnwrappedString(defValue);
}
try {
mySync.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
String answerStr = myAnswer.toString();
myAnswer = null;
return answerStr;
}
}
public void showMessage(String message) {
myTerminal.writeUnwrappedString(message);
myTerminal.nextLine();
}
public void keyPressed(KeyEvent e) {
if (myAnswer == null) return;
synchronized (mySync) {
boolean release = false;
switch (e.getKeyCode()) {
case KeyEvent.VK_BACK_SPACE:
if (myAnswer.length() > 0) {
myTerminal.backspace();
myTerminal.eraseInLine(0);
myAnswer.deleteCharAt(myAnswer.length() - 1);
}
break;
case KeyEvent.VK_ENTER:
myTerminal.nextLine();
release = true;
break;
}
if (release) mySync.notifyAll();
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
if (myAnswer == null) return;
char c = e.getKeyChar();
if (Character.getType(c) != Character.CONTROL) {
if (myVisible) myTerminal.writeCharacters(Character.toString(c));
myAnswer.append(c);
}
}
}