Update prompt for dynamic value

Signed-off-by: Emmanuel Bigeon <emmanuel@bigeon.fr>
This commit is contained in:
Emmanuel Bigeon 2018-01-30 12:54:40 -05:00
parent f8a37e7eee
commit 7517251d1c
11 changed files with 163 additions and 26 deletions

View File

@ -112,7 +112,7 @@ of Emmanuel Bigeon. -->
<dependency> <dependency>
<groupId>fr.bigeon</groupId> <groupId>fr.bigeon</groupId>
<artifactId>gclc</artifactId> <artifactId>gclc</artifactId>
<version>2.0.1</version> <version>2.0.4-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>fr.bigeon</groupId> <groupId>fr.bigeon</groupId>

View File

@ -46,6 +46,8 @@ import java.util.logging.Logger;
import fr.bigeon.gclc.manager.ConsoleInput; import fr.bigeon.gclc.manager.ConsoleInput;
import fr.bigeon.gclc.manager.ReadingRunnable; 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. /** A console input where the stream can be plugged.
* <p> * <p>
@ -68,7 +70,7 @@ public final class PluggableConsoleInput implements ConsoleInput {
/** If the element is closed. */ /** If the element is closed. */
private boolean closed = false; private boolean closed = false;
/** The default prompt. */ /** The default prompt. */
private String prompt = "> "; //$NON-NLS-1$ private StringProvider prompt = new ConstantString("> "); //$NON-NLS-1$
/** If the input is plugged or buffering. */ /** If the input is plugged or buffering. */
private boolean connected = false; private boolean connected = false;
/** The current connexion (if any). */ /** The current connexion (if any). */
@ -141,7 +143,7 @@ public final class PluggableConsoleInput implements ConsoleInput {
/* (non-Javadoc) /* (non-Javadoc)
* @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */ * @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */
@Override @Override
public String getPrompt() { public StringProvider getPrompt() {
return prompt; return prompt;
} }
@ -170,14 +172,14 @@ public final class PluggableConsoleInput implements ConsoleInput {
* @see fr.bigeon.gclc.manager.ConsoleInput#prompt() */ * @see fr.bigeon.gclc.manager.ConsoleInput#prompt() */
@Override @Override
public String prompt() throws IOException { public String prompt() throws IOException {
return prompt(prompt); return prompt(prompt.apply());
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see fr.bigeon.gclc.manager.ConsoleInput#prompt(long) */ * @see fr.bigeon.gclc.manager.ConsoleInput#prompt(long) */
@Override @Override
public String prompt(final long timeout) throws IOException { public String prompt(final long timeout) throws IOException {
return prompt(prompt, timeout); return prompt(prompt.apply(), timeout);
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -251,12 +253,15 @@ public final class PluggableConsoleInput implements ConsoleInput {
return res; return res;
} }
/* (non-Javadoc)
* @see fr.bigeon.gclc.manager.ConsoleInput#setPrompt(java.lang.String) */
@Override @Override
public void setPrompt(final String prompt) { public void setPrompt(final StringProvider prompt) {
this.prompt = prompt; this.prompt = prompt;
} }
@Override
public void setPrompt(String prompt) {
setPrompt(new ConstantString(prompt));
}
/** Wait for a hint or connexion. /** Wait for a hint or connexion.
* *

View File

@ -82,7 +82,7 @@
<dependency> <dependency>
<groupId>fr.bigeon</groupId> <groupId>fr.bigeon</groupId>
<artifactId>gclc</artifactId> <artifactId>gclc</artifactId>
<version>2.0.1</version> <version>2.0.4-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>fr.bigeon</groupId> <groupId>fr.bigeon</groupId>

View File

@ -50,6 +50,8 @@ import org.eclipse.swt.widgets.Text;
import fr.bigeon.gclc.ConsoleApplication; import fr.bigeon.gclc.ConsoleApplication;
import fr.bigeon.gclc.manager.ConsoleInput; import fr.bigeon.gclc.manager.ConsoleInput;
import fr.bigeon.gclc.manager.ConsoleOutput; 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}. /** A SWT component to connect to gclc {@link ConsoleApplication}.
* <p> * <p>
@ -73,7 +75,7 @@ public final class SWTConsole extends Composite
/** The prompt label. */ /** The prompt label. */
private final Label lblPromptlabel; private final Label lblPromptlabel;
/** The prompt text. */ /** The prompt text. */
private String prompt = ">"; //$NON-NLS-1$ private StringProvider prompt = new ConstantString("> "); //$NON-NLS-1$
/** The command entered by the user. */ /** The command entered by the user. */
private String command = null; private String command = null;
/** If the prompt should be active. */ /** If the prompt should be active. */
@ -97,7 +99,7 @@ public final class SWTConsole extends Composite
consoleOutput.setRedraw(true); consoleOutput.setRedraw(true);
lblPromptlabel = new Label(this, SWT.NONE); lblPromptlabel = new Label(this, SWT.NONE);
lblPromptlabel.setText(prompt); lblPromptlabel.setText(prompt.apply());
consoleInput = new Text(this, SWT.BORDER); consoleInput = new Text(this, SWT.BORDER);
consoleInput.setLayoutData( consoleInput.setLayoutData(
@ -135,7 +137,7 @@ public final class SWTConsole extends Composite
/* (non-Javadoc) /* (non-Javadoc)
* @see fr.bigeon.gclc.ConsoleManager#getPrompt() */ * @see fr.bigeon.gclc.ConsoleManager#getPrompt() */
@Override @Override
public String getPrompt() { public StringProvider getPrompt() {
return prompt; return prompt;
} }
@ -216,6 +218,7 @@ public final class SWTConsole extends Composite
public void run() { public void run() {
if (!consoleInput.isDisposed()) { if (!consoleInput.isDisposed()) {
consoleInput.setEnabled(true); consoleInput.setEnabled(true);
lblPromptlabel.setText(prompt.apply());
consoleInput.setFocus(); consoleInput.setFocus();
} }
} }
@ -284,7 +287,7 @@ public final class SWTConsole extends Composite
@Override @Override
public void run() { public void run() {
if (!consoleOutput.isDisposed()) { if (!consoleOutput.isDisposed()) {
lblPromptlabel.setText(prompt); lblPromptlabel.setText(prompt.apply());
// relayout // relayout
SWTConsole.this.layout(); SWTConsole.this.layout();
} }
@ -323,20 +326,25 @@ public final class SWTConsole extends Composite
/* (non-Javadoc) /* (non-Javadoc)
* @see fr.bigeon.gclc.ConsoleManager#setPrompt(java.lang.String) */ * @see fr.bigeon.gclc.ConsoleManager#setPrompt(java.lang.String) */
@Override @Override
public void setPrompt(final String prompt) { public void setPrompt(final StringProvider prompt) {
this.prompt = prompt; this.prompt = prompt;
Display.getDefault().syncExec(new Runnable() { Display.getDefault().syncExec(new Runnable() {
@SuppressWarnings("synthetic-access") @SuppressWarnings("synthetic-access")
@Override @Override
public void run() { public void run() {
if (!consoleOutput.isDisposed()) { if (!consoleOutput.isDisposed()) {
lblPromptlabel.setText(prompt); lblPromptlabel.setText(prompt.apply());
// relayout // relayout
SWTConsole.this.layout(); SWTConsole.this.layout();
} }
} }
}); });
} }
@Override
public void setPrompt(String prompt) {
setPrompt(new ConstantString(prompt));
}
/** @param string the text */ /** @param string the text */
public void setText(final String string) { public void setText(final String string) {

View File

@ -41,6 +41,8 @@ package fr.bigeon.gclc.manager;
import java.io.IOException; import java.io.IOException;
import java.io.InterruptedIOException; import java.io.InterruptedIOException;
import fr.bigeon.gclc.tools.StringProvider;
/** A console application input. /** A console application input.
* *
* @author Emmanuel Bigeon */ * @author Emmanuel Bigeon */
@ -55,7 +57,7 @@ public interface ConsoleInput extends AutoCloseable {
/** Get the prompt string. /** Get the prompt string.
* *
* @return the prompt prefix */ * @return the prompt prefix */
String getPrompt(); StringProvider getPrompt();
/** Indicate to the input that is should interrompt the prompting, if /** Indicate to the input that is should interrompt the prompting, if
* possible. * possible.
@ -111,4 +113,6 @@ public interface ConsoleInput extends AutoCloseable {
* *
* @param prompt the prompt */ * @param prompt the prompt */
void setPrompt(String prompt); void setPrompt(String prompt);
void setPrompt(StringProvider string);
} }

View File

@ -38,6 +38,9 @@
*/ */
package fr.bigeon.gclc.manager; 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. /** A console input that return empty to all prompting.
* *
* @author Emmanuel Bigeon */ * @author Emmanuel Bigeon */
@ -59,8 +62,8 @@ public final class EmptyInput implements ConsoleInput {
/* (non-Javadoc) /* (non-Javadoc)
* @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */ * @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */
@Override @Override
public String getPrompt() { public StringProvider getPrompt() {
return ""; //$NON-NLS-1$ return new ConstantString(""); //$NON-NLS-1$
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -114,4 +117,8 @@ public final class EmptyInput implements ConsoleInput {
// //
} }
@Override
public void setPrompt(StringProvider string) {
//
}
} }

View File

@ -44,6 +44,8 @@ import java.io.PipedOutputStream;
import java.io.PrintStream; import java.io.PrintStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import fr.bigeon.gclc.tools.StringProvider;
/** This console input allows to enter commands and retrieve the output as an /** This console input allows to enter commands and retrieve the output as an
* input. * input.
* <p> * <p>
@ -87,7 +89,7 @@ public final class PipedConsoleInput
} }
@Override @Override
public String getPrompt() { public StringProvider getPrompt() {
return innerManager.getPrompt(); return innerManager.getPrompt();
} }
@ -141,6 +143,11 @@ public final class PipedConsoleInput
public void setPrompt(final String prompt) { public void setPrompt(final String prompt) {
innerManager.setPrompt(prompt); innerManager.setPrompt(prompt);
} }
@Override
public void setPrompt(StringProvider string) {
innerManager.setPrompt(string);
}
/** Type a message in the input. /** Type a message in the input.
* *

View File

@ -45,6 +45,9 @@ import java.io.InputStreamReader;
import java.io.PrintStream; import java.io.PrintStream;
import java.nio.charset.Charset; 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. /** A console using the input stream and print stream.
* <p> * <p>
* The default constructor will use the system standart input and output. * 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 { public final class StreamConsoleInput implements ConsoleInput {
/** The default prompt. */ /** 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. */ /** The command prompt. It can be changed. */
private String prompt = DEFAULT_PROMPT; private StringProvider prompt = DEFAULT_PROMPT;
/** The print stream. */ /** The print stream. */
private final PrintStream out; private final PrintStream out;
@ -115,7 +118,7 @@ public final class StreamConsoleInput implements ConsoleInput {
/* (non-Javadoc) /* (non-Javadoc)
* @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */ * @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */
@Override @Override
public String getPrompt() { public StringProvider getPrompt() {
return prompt; return prompt;
} }
@ -138,14 +141,14 @@ public final class StreamConsoleInput implements ConsoleInput {
* @see fr.bigeon.gclc.ConsoleManager#prompt() */ * @see fr.bigeon.gclc.ConsoleManager#prompt() */
@Override @Override
public String prompt() throws IOException { public String prompt() throws IOException {
return prompt(prompt); return prompt(prompt.apply());
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see fr.bigeon.gclc.manager.ConsoleManager#prompt(long) */ * @see fr.bigeon.gclc.manager.ConsoleManager#prompt(long) */
@Override @Override
public String prompt(final long timeout) throws IOException { public String prompt(final long timeout) throws IOException {
return prompt(prompt, timeout); return prompt(prompt.apply(), timeout);
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -177,7 +180,11 @@ public final class StreamConsoleInput implements ConsoleInput {
* @see fr.bigeon.gclc.manager.ConsoleInput#setPrompt(java.lang.String) */ * @see fr.bigeon.gclc.manager.ConsoleInput#setPrompt(java.lang.String) */
@Override @Override
public void setPrompt(final String prompt) { public void setPrompt(final String prompt) {
this.prompt = prompt; this.prompt = new ConstantString(prompt);
} }
@Override
public void setPrompt(StringProvider string) {
this.prompt = string;
}
} }

View 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;
}
}

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

View File

@ -141,7 +141,7 @@ public class SystemConsoleManagerTest {
final String prt = "++"; final String prt = "++";
manager.setPrompt(prt); manager.setPrompt(prt);
assertEquals(prt, manager.getPrompt()); assertEquals(prt, manager.getPrompt().apply());
} }
} }