Update to gclc-2.0.1

Signed-off-by: Emmanuel Bigeon <emmanuel@bigeon.fr>
This commit is contained in:
Emmanuel Bigeon 2017-11-18 18:29:24 -05:00
parent d2cd059c01
commit 206df88506
10 changed files with 151 additions and 95 deletions

View File

@ -1,4 +1,35 @@
<!-- GCLC swt, provide a swt window for console applications -->
<!-- Copyright (C) 2015-2017 E. Bigeon -->
<!-- mailto:emmanuel@bigeon.fr -->
<!-- -->
<!-- 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. -->
<!-- Copyright E. Bigeon (2015) -->
<!-- -->
<!-- emmanuel@bigeon.fr -->
@ -51,7 +82,7 @@
<dependency>
<groupId>fr.bigeon</groupId>
<artifactId>gclc</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>fr.bigeon</groupId>

View File

@ -1,10 +1,7 @@
/*
* Copyright E. Bigeon (2015)
*
* emmanuel@bigeon.fr
*
* This software is a computer program whose purpose is to
* provide a swt window for console applications.
* GCLC swt, provide a swt window for console applications
* Copyright (C) 2015-2017 E. Bigeon
* mailto:emmanuel@bigeon.fr
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
@ -46,12 +43,15 @@ package fr.bigeon.gclc.swt;
*
* @author Emmanuel Bigeon */
public interface ConsoleDelayIO {
/** Actually send the input as the prompt next input. */
void validateInput();
/** Get the input text.
* @return the non validated input */
String getInput();
/** @param input the input to set */
/** Set the input text.
*
* @param input the input to set */
void setInput(String input);
/** @return the non validated input */
String getInput();
/** Actually send the input as the prompt next input. */
void validateInput();
}

View File

@ -1,10 +1,7 @@
/*
* Copyright E. Bigeon (2015)
*
* emmanuel@bigeon.fr
*
* This software is a computer program whose purpose is to
* provide a swt window for console applications.
* GCLC swt, provide a swt window for console applications
* Copyright (C) 2015-2017 E. Bigeon
* mailto:emmanuel@bigeon.fr
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
@ -45,40 +42,46 @@ import org.eclipse.swt.events.KeyEvent;
import fr.bigeon.collections.ArrayRibbon;
import fr.bigeon.collections.Ribbon;
/** A key listener to validate commands and manage the history of commands
/** A key listener to validate commands and manage the history of commands.
*
* @author Emmanuel Bigeon */
public final class HistoryTextKeyListener extends KeyAdapter {
/** The size of commands history */
/** The size of commands history. */
private static final int DEFAULT_HISTORY_SIZE = 10;
/** The empty string constant */
/** The empty string constant. */
private static final String EMPTY = ""; //$NON-NLS-1$
/** The history ribbon */
/** The history ribbon. */
private final Ribbon<String> commands;
/** The current index in history search */
/** The current index in history search. */
private int currentIndex = 0;
/** The console to notify of command validation */
/** The console to notify of command validation. */
private final ConsoleDelayIO console;
/** @param console the console delayed */
public HistoryTextKeyListener(ConsoleDelayIO console) {
/** Create the key listener that cycle the history.
*
* @param console the console delayed */
public HistoryTextKeyListener(final ConsoleDelayIO console) {
super();
this.console = console;
this.commands = new ArrayRibbon<>(DEFAULT_HISTORY_SIZE);
commands = new ArrayRibbon<>(DEFAULT_HISTORY_SIZE);
}
/* (non-Javadoc)
* @see org.eclipse.swt.events.KeyAdapter#keyPressed(org.eclipse.swt.events.
* KeyEvent) */
@Override
public void keyPressed(KeyEvent e) {
public void keyPressed(final KeyEvent e) {
pressedKeyCode(e.keyCode);
}
/** @param keyCode the pressed key code */
public void pressedKeyCode(int keyCode) {
/** Indicate a pressed key combination.
*
* @param keyCode the pressed key code */
public void pressedKeyCode(final int keyCode) {
// Enter validates the command if prompting
if (keyCode == '\r') {
String input = console.getInput();
final String input = console.getInput();
if (!input.isEmpty()) {
commands.add(input);
}
@ -90,7 +93,7 @@ public final class HistoryTextKeyListener extends KeyAdapter {
if (keyCode == SWT.ARROW_UP &&
currentIndex < commands.size() - 1) {
currentIndex++;
String cmd = commands.get(commands.size() - currentIndex - 1);
final String cmd = commands.get(commands.size() - currentIndex - 1);
console.setInput(cmd);
}
@ -100,7 +103,7 @@ public final class HistoryTextKeyListener extends KeyAdapter {
currentIndex--;
console.setInput(EMPTY);
} else if (currentIndex > 0) {
String cmd = commands
final String cmd = commands
.get(commands.size() - (--currentIndex) - 1);
console.setInput(cmd);
}

View File

@ -1,10 +1,7 @@
/*
* Copyright E. Bigeon (2015)
*
* emmanuel@bigeon.fr
*
* This software is a computer program whose purpose is to
* provide a swt window for console applications.
* GCLC swt, provide a swt window for console applications
* Copyright (C) 2015-2017 E. Bigeon
* mailto:emmanuel@bigeon.fr
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
@ -54,36 +51,34 @@ import fr.bigeon.gclc.ConsoleApplication;
import fr.bigeon.gclc.manager.ConsoleInput;
import fr.bigeon.gclc.manager.ConsoleOutput;
/** A SWT component to connect to gclc {@link ConsoleApplication}
/** A SWT component to connect to gclc {@link ConsoleApplication}.
* <p>
*
* @author Emmanuel Bigeon */
public class SWTConsole extends Composite
public final class SWTConsole extends Composite
implements ConsoleDelayIO, ConsoleInput, ConsoleOutput {
/**
*
*/
/** The number of columns of the layout. */
private static final int LAYOUT_NB_COLUMNS = 2;
/** The cmd prefix in the output console */
/** The cmd prefix in the output console. */
private static final String CMD_PREFIX = "[CMD] "; //$NON-NLS-1$
/** The class logger */
/** The class logger. */
private static final Logger LOGGER = Logger
.getLogger(SWTConsole.class.getName());
/** The empty string constant */
/** The empty string constant. */
private static final String EMPTY = ""; //$NON-NLS-1$
/** The console output text field */
/** The console output text field. */
private final Text consoleOutput;
/** The console input text field */
/** The console input text field. */
private final Text consoleInput;
/** The prompt label */
/** The prompt label. */
private final Label lblPromptlabel;
/** The prompt text */
/** The prompt text. */
private String prompt = ">"; //$NON-NLS-1$
/** The command entered by the user */
/** The command entered by the user. */
private String command = null;
/** If the prompt should be active */
/** If the prompt should be active. */
private boolean prompting = false;
/** The object for thread synchronization with the prompt */
/** The object for thread synchronization with the prompt. */
private final Object promptLock = new Object();
/** Create the composite.
@ -121,7 +116,7 @@ public class SWTConsole extends Composite
@Override
public void close() {
synchronized (promptLock) {
promptLock.notify();
promptLock.notifyAll();
}
if (consoleInput.isDisposed()) {
return;
@ -149,7 +144,7 @@ public class SWTConsole extends Composite
@Override
public void interruptPrompt() {
synchronized (promptLock) {
promptLock.notify();
promptLock.notifyAll();
}
}
@ -232,6 +227,7 @@ public class SWTConsole extends Composite
LOGGER.log(Level.WARNING,
"Error in synchronization of prompting", e); //$NON-NLS-1$
command = null;
Thread.currentThread().interrupt();
}
}
if (isDisposed()) {
@ -281,6 +277,7 @@ public class SWTConsole extends Composite
LOGGER.log(Level.WARNING,
"Error in synchronization of prompting", e); //$NON-NLS-1$
command = null;
Thread.currentThread().interrupt();
} finally {
Display.getDefault().syncExec(new Runnable() {
@SuppressWarnings("synthetic-access")

View File

@ -1,10 +1,7 @@
/*
* Copyright E. Bigeon (2015)
*
* emmanuel@bigeon.fr
*
* This software is a computer program whose purpose is to
* provide a swt window for console applications.
* GCLC swt, provide a swt window for console applications
* Copyright (C) 2015-2017 E. Bigeon
* mailto:emmanuel@bigeon.fr
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
@ -47,7 +44,7 @@ import org.eclipse.swt.widgets.Shell;
* <p>
*
* @author Emmanuel Bigeon */
public class SWTConsoleShell extends Shell {
public final class SWTConsoleShell extends Shell {
/** The console component */
private SWTConsole console;

View File

@ -1,10 +1,7 @@
/*
* Copyright E. Bigeon (2015)
*
* emmanuel@bigeon.fr
*
* This software is a computer program whose purpose is to
* provide a swt window for console applications.
* GCLC swt, provide a swt window for console applications
* Copyright (C) 2015-2017 E. Bigeon
* mailto:emmanuel@bigeon.fr
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
@ -58,7 +55,7 @@ import fr.bigeon.gclc.tools.AOutputForwardRunnable;
* <p>
*
* @author Emmanuel Bigeon */
public class SWTConsoleView extends Composite implements ConsoleDelayIO {
public final class SWTConsoleView extends Composite implements ConsoleDelayIO {
/** The local implementation of the forwarding runnable
*
* @author Emmanuel Bigeon */
@ -95,8 +92,7 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO {
private final Text consoleOutput;
/** The console input text field */
private final Text consoleInput;
/** The actual manager */
private PipedConsoleOutput manager;
/** The input. */
private PipedConsoleInput input;
/** The forwarding runnable */
private ToSWTConsoleForwardRunnable forward;
@ -160,10 +156,12 @@ public class SWTConsoleView extends Composite implements ConsoleDelayIO {
consoleInput.setSelection(input.length());
}
/** @param manager the manager to set */
/** Set the input and output.
*
* @param manager the output to set
* @param input the input */
public void setManager(final PipedConsoleOutput manager,
final PipedConsoleInput input) {
this.manager = manager;
this.input = input;
if (forward != null) {
forward.setRunning(false);

View File

@ -0,0 +1,39 @@
/*
* GCLC swt, provide a swt window for console applications
* Copyright (C) 2015-2017 E. Bigeon
* mailto:emmanuel@bigeon.fr
*
* 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.
*/
/**
* gclc-swt:fr.bigeon.gclc.swt.package-info.java
* Created on: Nov 18, 2017
*/
/** SWT components for a frontend of GCLC applications.
*
* @author Emmanuel Bigeon */
package fr.bigeon.gclc.swt;

View File

@ -1,10 +1,7 @@
/*
* Copyright E. Bigeon (2015)
*
* emmanuel@bigeon.fr
*
* This software is a computer program whose purpose is to
* provide a swt window for console applications.
* GCLC swt, provide a swt window for console applications
* Copyright (C) 2015-2017 E. Bigeon
* mailto:emmanuel@bigeon.fr
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,

View File

@ -1,10 +1,7 @@
/*
* Copyright E. Bigeon (2015)
*
* emmanuel@bigeon.fr
*
* This software is a computer program whose purpose is to
* provide a swt window for console applications.
* GCLC swt, provide a swt window for console applications
* Copyright (C) 2015-2017 E. Bigeon
* mailto:emmanuel@bigeon.fr
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,

View File

@ -1,10 +1,7 @@
/*
* Copyright E. Bigeon (2015)
*
* emmanuel@bigeon.fr
*
* This software is a computer program whose purpose is to
* provide a swt window for console applications.
* GCLC swt, provide a swt window for console applications
* Copyright (C) 2015-2017 E. Bigeon
* mailto:emmanuel@bigeon.fr
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
@ -72,13 +69,13 @@ public class SWTConsoleViewTest {
final Shell shell = new Shell(DISPLAY);
final SWTConsoleView swtConsole = new SWTConsoleView(shell, SWT.NONE);
try (PipedConsoleOutput manager = new PipedConsoleOutput();
PipedConsoleInput input = new PipedConsoleInput()) {
PipedConsoleInput input = new PipedConsoleInput(System.out)) {
swtConsole.setManager(manager, input);
} catch (final IOException e2) {
assertNull(e2);
}
try (PipedConsoleOutput manager = new PipedConsoleOutput();
PipedConsoleInput input = new PipedConsoleInput()) {
PipedConsoleInput input = new PipedConsoleInput(System.out)) {
swtConsole.setManager(manager, input);
final ConsoleApplication appl = new ConsoleApplication(manager,
input,