Update prompt for dynamic value
Signed-off-by: Emmanuel Bigeon <emmanuel@bigeon.fr>
This commit is contained in:
parent
f8a37e7eee
commit
7517251d1c
@ -112,7 +112,7 @@ of Emmanuel Bigeon. -->
|
||||
<dependency>
|
||||
<groupId>fr.bigeon</groupId>
|
||||
<artifactId>gclc</artifactId>
|
||||
<version>2.0.1</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>fr.bigeon</groupId>
|
||||
|
@ -46,6 +46,8 @@ import java.util.logging.Logger;
|
||||
|
||||
import fr.bigeon.gclc.manager.ConsoleInput;
|
||||
import fr.bigeon.gclc.manager.ReadingRunnable;
|
||||
import fr.bigeon.gclc.tools.ConstantString;
|
||||
import fr.bigeon.gclc.tools.StringProvider;
|
||||
|
||||
/** A console input where the stream can be plugged.
|
||||
* <p>
|
||||
@ -68,7 +70,7 @@ public final class PluggableConsoleInput implements ConsoleInput {
|
||||
/** If the element is closed. */
|
||||
private boolean closed = false;
|
||||
/** The default prompt. */
|
||||
private String prompt = "> "; //$NON-NLS-1$
|
||||
private StringProvider prompt = new ConstantString("> "); //$NON-NLS-1$
|
||||
/** If the input is plugged or buffering. */
|
||||
private boolean connected = false;
|
||||
/** The current connexion (if any). */
|
||||
@ -141,7 +143,7 @@ public final class PluggableConsoleInput implements ConsoleInput {
|
||||
/* (non-Javadoc)
|
||||
* @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */
|
||||
@Override
|
||||
public String getPrompt() {
|
||||
public StringProvider getPrompt() {
|
||||
return prompt;
|
||||
}
|
||||
|
||||
@ -170,14 +172,14 @@ public final class PluggableConsoleInput implements ConsoleInput {
|
||||
* @see fr.bigeon.gclc.manager.ConsoleInput#prompt() */
|
||||
@Override
|
||||
public String prompt() throws IOException {
|
||||
return prompt(prompt);
|
||||
return prompt(prompt.apply());
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see fr.bigeon.gclc.manager.ConsoleInput#prompt(long) */
|
||||
@Override
|
||||
public String prompt(final long timeout) throws IOException {
|
||||
return prompt(prompt, timeout);
|
||||
return prompt(prompt.apply(), timeout);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@ -251,13 +253,16 @@ public final class PluggableConsoleInput implements ConsoleInput {
|
||||
return res;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see fr.bigeon.gclc.manager.ConsoleInput#setPrompt(java.lang.String) */
|
||||
@Override
|
||||
public void setPrompt(final String prompt) {
|
||||
public void setPrompt(final StringProvider prompt) {
|
||||
this.prompt = prompt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPrompt(String prompt) {
|
||||
setPrompt(new ConstantString(prompt));
|
||||
}
|
||||
|
||||
/** Wait for a hint or connexion.
|
||||
*
|
||||
* @param messageTimeout the timeout on the current connexion hint waiting
|
||||
|
@ -82,7 +82,7 @@
|
||||
<dependency>
|
||||
<groupId>fr.bigeon</groupId>
|
||||
<artifactId>gclc</artifactId>
|
||||
<version>2.0.1</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>fr.bigeon</groupId>
|
||||
|
@ -50,6 +50,8 @@ import org.eclipse.swt.widgets.Text;
|
||||
import fr.bigeon.gclc.ConsoleApplication;
|
||||
import fr.bigeon.gclc.manager.ConsoleInput;
|
||||
import fr.bigeon.gclc.manager.ConsoleOutput;
|
||||
import fr.bigeon.gclc.tools.ConstantString;
|
||||
import fr.bigeon.gclc.tools.StringProvider;
|
||||
|
||||
/** A SWT component to connect to gclc {@link ConsoleApplication}.
|
||||
* <p>
|
||||
@ -73,7 +75,7 @@ public final class SWTConsole extends Composite
|
||||
/** The prompt label. */
|
||||
private final Label lblPromptlabel;
|
||||
/** The prompt text. */
|
||||
private String prompt = ">"; //$NON-NLS-1$
|
||||
private StringProvider prompt = new ConstantString("> "); //$NON-NLS-1$
|
||||
/** The command entered by the user. */
|
||||
private String command = null;
|
||||
/** If the prompt should be active. */
|
||||
@ -97,7 +99,7 @@ public final class SWTConsole extends Composite
|
||||
consoleOutput.setRedraw(true);
|
||||
|
||||
lblPromptlabel = new Label(this, SWT.NONE);
|
||||
lblPromptlabel.setText(prompt);
|
||||
lblPromptlabel.setText(prompt.apply());
|
||||
|
||||
consoleInput = new Text(this, SWT.BORDER);
|
||||
consoleInput.setLayoutData(
|
||||
@ -135,7 +137,7 @@ public final class SWTConsole extends Composite
|
||||
/* (non-Javadoc)
|
||||
* @see fr.bigeon.gclc.ConsoleManager#getPrompt() */
|
||||
@Override
|
||||
public String getPrompt() {
|
||||
public StringProvider getPrompt() {
|
||||
return prompt;
|
||||
}
|
||||
|
||||
@ -216,6 +218,7 @@ public final class SWTConsole extends Composite
|
||||
public void run() {
|
||||
if (!consoleInput.isDisposed()) {
|
||||
consoleInput.setEnabled(true);
|
||||
lblPromptlabel.setText(prompt.apply());
|
||||
consoleInput.setFocus();
|
||||
}
|
||||
}
|
||||
@ -284,7 +287,7 @@ public final class SWTConsole extends Composite
|
||||
@Override
|
||||
public void run() {
|
||||
if (!consoleOutput.isDisposed()) {
|
||||
lblPromptlabel.setText(prompt);
|
||||
lblPromptlabel.setText(prompt.apply());
|
||||
// relayout
|
||||
SWTConsole.this.layout();
|
||||
}
|
||||
@ -323,14 +326,14 @@ public final class SWTConsole extends Composite
|
||||
/* (non-Javadoc)
|
||||
* @see fr.bigeon.gclc.ConsoleManager#setPrompt(java.lang.String) */
|
||||
@Override
|
||||
public void setPrompt(final String prompt) {
|
||||
public void setPrompt(final StringProvider prompt) {
|
||||
this.prompt = prompt;
|
||||
Display.getDefault().syncExec(new Runnable() {
|
||||
@SuppressWarnings("synthetic-access")
|
||||
@Override
|
||||
public void run() {
|
||||
if (!consoleOutput.isDisposed()) {
|
||||
lblPromptlabel.setText(prompt);
|
||||
lblPromptlabel.setText(prompt.apply());
|
||||
// relayout
|
||||
SWTConsole.this.layout();
|
||||
}
|
||||
@ -338,6 +341,11 @@ public final class SWTConsole extends Composite
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPrompt(String prompt) {
|
||||
setPrompt(new ConstantString(prompt));
|
||||
}
|
||||
|
||||
/** @param string the text */
|
||||
public void setText(final String string) {
|
||||
consoleInput.setText(string);
|
||||
|
@ -41,6 +41,8 @@ package fr.bigeon.gclc.manager;
|
||||
import java.io.IOException;
|
||||
import java.io.InterruptedIOException;
|
||||
|
||||
import fr.bigeon.gclc.tools.StringProvider;
|
||||
|
||||
/** A console application input.
|
||||
*
|
||||
* @author Emmanuel Bigeon */
|
||||
@ -55,7 +57,7 @@ public interface ConsoleInput extends AutoCloseable {
|
||||
/** Get the prompt string.
|
||||
*
|
||||
* @return the prompt prefix */
|
||||
String getPrompt();
|
||||
StringProvider getPrompt();
|
||||
|
||||
/** Indicate to the input that is should interrompt the prompting, if
|
||||
* possible.
|
||||
@ -111,4 +113,6 @@ public interface ConsoleInput extends AutoCloseable {
|
||||
*
|
||||
* @param prompt the prompt */
|
||||
void setPrompt(String prompt);
|
||||
|
||||
void setPrompt(StringProvider string);
|
||||
}
|
||||
|
@ -38,6 +38,9 @@
|
||||
*/
|
||||
package fr.bigeon.gclc.manager;
|
||||
|
||||
import fr.bigeon.gclc.tools.ConstantString;
|
||||
import fr.bigeon.gclc.tools.StringProvider;
|
||||
|
||||
/** A console input that return empty to all prompting.
|
||||
*
|
||||
* @author Emmanuel Bigeon */
|
||||
@ -59,8 +62,8 @@ public final class EmptyInput implements ConsoleInput {
|
||||
/* (non-Javadoc)
|
||||
* @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */
|
||||
@Override
|
||||
public String getPrompt() {
|
||||
return ""; //$NON-NLS-1$
|
||||
public StringProvider getPrompt() {
|
||||
return new ConstantString(""); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@ -114,4 +117,8 @@ public final class EmptyInput implements ConsoleInput {
|
||||
//
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPrompt(StringProvider string) {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
@ -44,6 +44,8 @@ import java.io.PipedOutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import fr.bigeon.gclc.tools.StringProvider;
|
||||
|
||||
/** This console input allows to enter commands and retrieve the output as an
|
||||
* input.
|
||||
* <p>
|
||||
@ -87,7 +89,7 @@ public final class PipedConsoleInput
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPrompt() {
|
||||
public StringProvider getPrompt() {
|
||||
return innerManager.getPrompt();
|
||||
}
|
||||
|
||||
@ -142,6 +144,11 @@ public final class PipedConsoleInput
|
||||
innerManager.setPrompt(prompt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPrompt(StringProvider string) {
|
||||
innerManager.setPrompt(string);
|
||||
}
|
||||
|
||||
/** Type a message in the input.
|
||||
*
|
||||
* @param content the content to type to the application
|
||||
|
@ -45,6 +45,9 @@ import java.io.InputStreamReader;
|
||||
import java.io.PrintStream;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
import fr.bigeon.gclc.tools.ConstantString;
|
||||
import fr.bigeon.gclc.tools.StringProvider;
|
||||
|
||||
/** A console using the input stream and print stream.
|
||||
* <p>
|
||||
* The default constructor will use the system standart input and output.
|
||||
@ -53,10 +56,10 @@ import java.nio.charset.Charset;
|
||||
public final class StreamConsoleInput implements ConsoleInput {
|
||||
|
||||
/** The default prompt. */
|
||||
public static final String DEFAULT_PROMPT = "> "; //$NON-NLS-1$
|
||||
public static final StringProvider DEFAULT_PROMPT = new ConstantString("> "); //$NON-NLS-1$
|
||||
|
||||
/** The command prompt. It can be changed. */
|
||||
private String prompt = DEFAULT_PROMPT;
|
||||
private StringProvider prompt = DEFAULT_PROMPT;
|
||||
|
||||
/** The print stream. */
|
||||
private final PrintStream out;
|
||||
@ -115,7 +118,7 @@ public final class StreamConsoleInput implements ConsoleInput {
|
||||
/* (non-Javadoc)
|
||||
* @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */
|
||||
@Override
|
||||
public String getPrompt() {
|
||||
public StringProvider getPrompt() {
|
||||
return prompt;
|
||||
}
|
||||
|
||||
@ -138,14 +141,14 @@ public final class StreamConsoleInput implements ConsoleInput {
|
||||
* @see fr.bigeon.gclc.ConsoleManager#prompt() */
|
||||
@Override
|
||||
public String prompt() throws IOException {
|
||||
return prompt(prompt);
|
||||
return prompt(prompt.apply());
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see fr.bigeon.gclc.manager.ConsoleManager#prompt(long) */
|
||||
@Override
|
||||
public String prompt(final long timeout) throws IOException {
|
||||
return prompt(prompt, timeout);
|
||||
return prompt(prompt.apply(), timeout);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@ -177,7 +180,11 @@ public final class StreamConsoleInput implements ConsoleInput {
|
||||
* @see fr.bigeon.gclc.manager.ConsoleInput#setPrompt(java.lang.String) */
|
||||
@Override
|
||||
public void setPrompt(final String prompt) {
|
||||
this.prompt = prompt;
|
||||
this.prompt = new ConstantString(prompt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPrompt(StringProvider string) {
|
||||
this.prompt = string;
|
||||
}
|
||||
}
|
||||
|
50
gclc/src/main/java/fr/bigeon/gclc/tools/ConstantString.java
Normal file
50
gclc/src/main/java/fr/bigeon/gclc/tools/ConstantString.java
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright Bigeon Emmanuel (2014)
|
||||
*
|
||||
* emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is a computer program whose purpose is to
|
||||
* provide a generic framework for console applications.
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
* modify and/or redistribute the software under the terms of the CeCILL
|
||||
* license as circulated by CEA, CNRS and INRIA at the following URL
|
||||
* "http://www.cecill.info".
|
||||
*
|
||||
* As a counterpart to the access to the source code and rights to copy,
|
||||
* modify and redistribute granted by the license, users are provided only
|
||||
* with a limited warranty and the software's author, the holder of the
|
||||
* economic rights, and the successive licensors have only limited
|
||||
* liability.
|
||||
*
|
||||
* In this respect, the user's attention is drawn to the risks associated
|
||||
* with loading, using, modifying and/or developing or reproducing the
|
||||
* software by the user in light of its specific status of free software,
|
||||
* that may mean that it is complicated to manipulate, and that also
|
||||
* therefore means that it is reserved for developers and experienced
|
||||
* professionals having in-depth computer knowledge. Users are therefore
|
||||
* encouraged to load and test the software's suitability as regards their
|
||||
* requirements in conditions enabling the security of their systems and/or
|
||||
* data to be ensured and, more generally, to use and operate it in the
|
||||
* same conditions as regards security.
|
||||
*
|
||||
* The fact that you are presently reading this means that you have had
|
||||
* knowledge of the CeCILL license and that you accept its terms.
|
||||
*/
|
||||
package fr.bigeon.gclc.tools;
|
||||
|
||||
public class ConstantString implements StringProvider {
|
||||
private String string;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String apply() {
|
||||
return string;
}
|
||||
|
||||
|
||||
public ConstantString(String string) {
|
||||
this.string = string;
|
||||
}
|
||||
}
|
49
gclc/src/main/java/fr/bigeon/gclc/tools/StringProvider.java
Normal file
49
gclc/src/main/java/fr/bigeon/gclc/tools/StringProvider.java
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright Bigeon Emmanuel (2014)
|
||||
*
|
||||
* emmanuel@bigeon.fr
|
||||
*
|
||||
* This software is a computer program whose purpose is to
|
||||
* provide a generic framework for console applications.
|
||||
*
|
||||
* This software is governed by the CeCILL license under French law and
|
||||
* abiding by the rules of distribution of free software. You can use,
|
||||
* modify and/or redistribute the software under the terms of the CeCILL
|
||||
* license as circulated by CEA, CNRS and INRIA at the following URL
|
||||
* "http://www.cecill.info".
|
||||
*
|
||||
* As a counterpart to the access to the source code and rights to copy,
|
||||
* modify and redistribute granted by the license, users are provided only
|
||||
* with a limited warranty and the software's author, the holder of the
|
||||
* economic rights, and the successive licensors have only limited
|
||||
* liability.
|
||||
*
|
||||
* In this respect, the user's attention is drawn to the risks associated
|
||||
* with loading, using, modifying and/or developing or reproducing the
|
||||
* software by the user in light of its specific status of free software,
|
||||
* that may mean that it is complicated to manipulate, and that also
|
||||
* therefore means that it is reserved for developers and experienced
|
||||
* professionals having in-depth computer knowledge. Users are therefore
|
||||
* encouraged to load and test the software's suitability as regards their
|
||||
* requirements in conditions enabling the security of their systems and/or
|
||||
* data to be ensured and, more generally, to use and operate it in the
|
||||
* same conditions as regards security.
|
||||
*
|
||||
* The fact that you are presently reading this means that you have had
|
||||
* knowledge of the CeCILL license and that you accept its terms.
|
||||
*/
|
||||
package fr.bigeon.gclc.tools;
|
||||
|
||||
/**
|
||||
* A string providing object.
|
||||
* <p>
|
||||
* Implementations of this interface will provide a string, this internal state
|
||||
* of the object may be so that successive calls to the apply method return
|
||||
* different results.
|
||||
*
|
||||
* @author Emmanuel
|
||||
*
|
||||
*/
|
||||
public interface StringProvider {
|
||||
String apply();
|
||||
}
|
@ -141,7 +141,7 @@ public class SystemConsoleManagerTest {
|
||||
|
||||
final String prt = "++";
|
||||
manager.setPrompt(prt);
|
||||
assertEquals(prt, manager.getPrompt());
|
||||
assertEquals(prt, manager.getPrompt().apply());
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user