/*
* Copyright 2005-2010 Ignis Software Tools Ltd. All rights reserved.
*/
package systemobject.terminal;
import java.util.regex.Pattern;
/**
* The prompt class is used to define expected prompts to wait for. <br>
* <br>
* Variables: <br>
* ----------- <br>
* <br>
* prompt - String that defines the prompt content.<br>
* default is null<br>
* <br>
* isRegularExpression - defines if the prompt string should be searched as
* written or as a regular expression.<br>
* default is false<br>
* <br>
* dontWaitForScrollEnd - defines whether prompt should appear after all input
* was read (wait until all input was received)<br>
* default is false<br>
* <br>
* commandEnd - does this prompt indicate the end of the command?<br>
* default is false<br>
* <br>
* stringToSend - the String to send to the terminal if the prompt was found but
* command wasn't terminated yet <br>
* Used for prompts that require input to continue, for example:<br>
* <b>Prompt p = new Prompt("enter user:",false);<br>
* p.setStringToSend("admin");<br>
* </b> default is null<br>
* <br>
* addEnter - True means an enter String will be added to the stringToSend<br>
* default is true<br>
* <br>
* pattern - the pattern for the regular expression (optional) if this is a
* regularExpression prompt<br>
* default is null<br>
* <br>
*
*
*/
public class Prompt {
private String prompt;
private boolean regularExpression = false;
private boolean dontWaitForScrollEnd = false;
private boolean commandEnd = false;
private String stringToSend = null;
private boolean addEnter = true;
private boolean regexCaseInsensitive = false;
private Pattern pattern = null;
/**
* a new empty prompt, with default values
*/
public Prompt() {
}
/**
* a new Prompt with given prompt String
*
* @param prompt
* String that defines the prompt to search
* @param isRegExp
* if True then the Prompt is a regular expression
*/
public Prompt(String prompt, boolean regularExpression) {
this(prompt, regularExpression, false);
}
/**
*
* @param prompt
* @param regularExpression
* @param commandEnd
*/
public Prompt(String prompt, boolean regularExpression, boolean commandEnd) {
this(prompt, regularExpression, commandEnd, false);
}
/**
*
* @param prompt
* @param regularExpression
* @param commandEnd
* @param regexCaseInsensitive
*/
public Prompt(String prompt, boolean regularExpression, boolean commandEnd, boolean regexCaseInsensitive) {
this(prompt, regularExpression, false, commandEnd, null, true, regexCaseInsensitive);
}
/**
*
* @param prompt
* @param regularExpression
* @param stringToSend
* @param addEnter
*/
public Prompt(String prompt, boolean regularExpression, String stringToSend, boolean addEnter) {
this(prompt, regularExpression, stringToSend, addEnter, false);
}
/**
*
* @param prompt
* @param regularExpression
* @param stringToSend
* @param addEnter
* @param regexCaseInsensitive
*/
public Prompt(String prompt, boolean regularExpression, String stringToSend, boolean addEnter, boolean regexCaseInsensitive) {
this(prompt, regularExpression, false, false, stringToSend, addEnter, regexCaseInsensitive);
}
/**
*
* @param prompt
* @param regularExpression
* @param dontWaitForScrollEnd
* @param commandEnd
* @param stringToSend
* @param addEnter
* @param regexCaseInsensitive
*/
public Prompt(String prompt, boolean regularExpression, boolean dontWaitForScrollEnd, boolean commandEnd, String stringToSend,
boolean addEnter, boolean regexCaseInsensitive) {
super();
setPrompt(prompt);
setRegularExpression(regularExpression);
setDontWaitForScrollEnd(dontWaitForScrollEnd);
setCommandEnd(commandEnd);
setStringToSend(stringToSend);
setAddEnter(addEnter);
setRegexCaseInsensitive(regexCaseInsensitive);
}
/**
* get the Prompt string to search for
*
* @return
*/
public String getPrompt() {
return prompt;
}
/**
* set the Prompt string to search for<br>
* default is null
*
* @param prompt
*/
public void setPrompt(String prompt) {
this.prompt = prompt;
}
/**
* @return True if Prompt is defined to be a regular expression
*/
public boolean isRegularExpression() {
return regularExpression;
}
/**
* signal if this Prompt is a regular expression<br>
* default is false
*
* @param regularExpression
*/
public void setRegularExpression(boolean regularExpression) {
this.regularExpression = regularExpression;
}
public boolean equals(Object o) {
return (o instanceof Prompt && ((Prompt) o).getPrompt().equals(getPrompt()));
}
/**
* should prompt appear after all input was read?
*
* @return True if it shouldn't wait, False if all input should be read
* first
*/
public boolean dontWaitForScrollEnd() {
return dontWaitForScrollEnd;
}
/**
* signal if the prompt should appear after all input was read<br>
* default is false
*
* @param scrollEnd
*/
public void setDontWaitForScrollEnd(boolean scrollEnd) {
dontWaitForScrollEnd = scrollEnd;
}
/**
* the String to send to the terminal if the prompt was found
*
* @return
*/
public String getStringToSend() {
return stringToSend;
}
/**
* the String to send to the terminal if the prompt was found
*
* @param stringToSend
*/
public void setStringToSend(String stringToSend) {
this.stringToSend = stringToSend;
}
/**
* should an enter string be added to the stringToSend?
*
* @return
*/
public boolean isAddEnter() {
return addEnter;
}
/**
* signal if a an enter string should be added to the stringToSend<br>
* default is true
*
* @param addEnter
*/
public void setAddEnter(boolean addEnter) {
this.addEnter = addEnter;
}
/**
* does this prompt indicate the end of the command?
*
* @return
*/
public boolean isCommandEnd() {
return commandEnd;
}
/**
* signal that this prompt indicates the end of the command<br>
* default is false
*
* @param commandEnd
* if True then after the prompt is found, stop reading the input
*/
public void setCommandEnd(boolean commandEnd) {
this.commandEnd = commandEnd;
}
/**
* get the defined Pattern for the regular expression or the default on if
* not defined
*
* @return
*/
public Pattern getPattern() {
if (pattern == null) {
pattern = Pattern.compile(prompt, Pattern.DOTALL | (isRegexCaseInsensitive() ? Pattern.CASE_INSENSITIVE : 0));
}
return pattern;
}
public boolean isRegexCaseInsensitive() {
return regexCaseInsensitive;
}
public void setRegexCaseInsensitive(boolean regexCaseInsensitive) {
this.regexCaseInsensitive = regexCaseInsensitive;
}
}