diff --git a/gclc-socket/pom.xml b/gclc-socket/pom.xml index 76ab18d..40ee86e 100644 --- a/gclc-socket/pom.xml +++ b/gclc-socket/pom.xml @@ -112,7 +112,7 @@ of Emmanuel Bigeon. --> fr.bigeon gclc - 2.0.1 + 2.0.4-SNAPSHOT fr.bigeon diff --git a/gclc-socket/src/main/java/fr/bigeon/gclc/socket/PluggableConsoleInput.java b/gclc-socket/src/main/java/fr/bigeon/gclc/socket/PluggableConsoleInput.java index 506a0ae..739cd27 100644 --- a/gclc-socket/src/main/java/fr/bigeon/gclc/socket/PluggableConsoleInput.java +++ b/gclc-socket/src/main/java/fr/bigeon/gclc/socket/PluggableConsoleInput.java @@ -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. *

@@ -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 @@ fr.bigeon gclc - 2.0.1 + 2.0.4-SNAPSHOT fr.bigeon diff --git a/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsole.java b/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsole.java index 958e573..70c5468 100644 --- a/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsole.java +++ b/gclc-swt/src/main/java/fr/bigeon/gclc/swt/SWTConsole.java @@ -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}. *

@@ -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()); } }