@@ -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,12 +253,15 @@ 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.
*
diff --git a/gclc-swt/pom.xml b/gclc-swt/pom.xml
index 1a89937..7172f16 100644
--- a/gclc-swt/pom.xml
+++ b/gclc-swt/pom.xml
@@ -82,7 +82,7 @@
@@ -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,20 +326,25 @@ 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();
}
}
});
}
+
+ @Override
+ public void setPrompt(String prompt) {
+ setPrompt(new ConstantString(prompt));
+ }
/** @param string the text */
public void setText(final String string) {
diff --git a/gclc/src/main/java/fr/bigeon/gclc/manager/ConsoleInput.java b/gclc/src/main/java/fr/bigeon/gclc/manager/ConsoleInput.java
index 8f11367..f558a3e 100644
--- a/gclc/src/main/java/fr/bigeon/gclc/manager/ConsoleInput.java
+++ b/gclc/src/main/java/fr/bigeon/gclc/manager/ConsoleInput.java
@@ -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);
}
diff --git a/gclc/src/main/java/fr/bigeon/gclc/manager/EmptyInput.java b/gclc/src/main/java/fr/bigeon/gclc/manager/EmptyInput.java
index 92caad0..27452b0 100644
--- a/gclc/src/main/java/fr/bigeon/gclc/manager/EmptyInput.java
+++ b/gclc/src/main/java/fr/bigeon/gclc/manager/EmptyInput.java
@@ -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) {
+ //
+ }
}
diff --git a/gclc/src/main/java/fr/bigeon/gclc/manager/PipedConsoleInput.java b/gclc/src/main/java/fr/bigeon/gclc/manager/PipedConsoleInput.java
index a50be40..ad13c34 100644
--- a/gclc/src/main/java/fr/bigeon/gclc/manager/PipedConsoleInput.java
+++ b/gclc/src/main/java/fr/bigeon/gclc/manager/PipedConsoleInput.java
@@ -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.
*
@@ -87,7 +89,7 @@ public final class PipedConsoleInput
}
@Override
- public String getPrompt() {
+ public StringProvider getPrompt() {
return innerManager.getPrompt();
}
@@ -141,6 +143,11 @@ public final class PipedConsoleInput
public void setPrompt(final String prompt) {
innerManager.setPrompt(prompt);
}
+
+ @Override
+ public void setPrompt(StringProvider string) {
+ innerManager.setPrompt(string);
+ }
/** Type a message in the input.
*
diff --git a/gclc/src/main/java/fr/bigeon/gclc/manager/StreamConsoleInput.java b/gclc/src/main/java/fr/bigeon/gclc/manager/StreamConsoleInput.java
index 57b93e8..ff56edc 100644
--- a/gclc/src/main/java/fr/bigeon/gclc/manager/StreamConsoleInput.java
+++ b/gclc/src/main/java/fr/bigeon/gclc/manager/StreamConsoleInput.java
@@ -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.
*
* 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;
+ }
}
diff --git a/gclc/src/main/java/fr/bigeon/gclc/tools/ConstantString.java b/gclc/src/main/java/fr/bigeon/gclc/tools/ConstantString.java
new file mode 100644
index 0000000..2b3afab
--- /dev/null
+++ b/gclc/src/main/java/fr/bigeon/gclc/tools/ConstantString.java
@@ -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;
+ }
+}
diff --git a/gclc/src/main/java/fr/bigeon/gclc/tools/StringProvider.java b/gclc/src/main/java/fr/bigeon/gclc/tools/StringProvider.java
new file mode 100644
index 0000000..dabc632
--- /dev/null
+++ b/gclc/src/main/java/fr/bigeon/gclc/tools/StringProvider.java
@@ -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.
+ *
+ * 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();
+}
diff --git a/gclc/src/test/java/fr/bigeon/gclc/manager/SystemConsoleManagerTest.java b/gclc/src/test/java/fr/bigeon/gclc/manager/SystemConsoleManagerTest.java
index 19b114a..1ae9bf1 100644
--- a/gclc/src/test/java/fr/bigeon/gclc/manager/SystemConsoleManagerTest.java
+++ b/gclc/src/test/java/fr/bigeon/gclc/manager/SystemConsoleManagerTest.java
@@ -141,7 +141,7 @@ public class SystemConsoleManagerTest {
final String prt = "++";
manager.setPrompt(prt);
- assertEquals(prt, manager.getPrompt());
+ assertEquals(prt, manager.getPrompt().apply());
}
}