package com.codeaffine.example.rwt.osgi.configurationadmin.console; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.widgets.Text; class CommandParser implements KeyListener { private static final long serialVersionUID = 1L; private final InputProcessor inputProcessor; private final Text consoleWidget; CommandParser( InputProcessor inputProcessor, Text consoleWidget ) { this.inputProcessor = inputProcessor; this.consoleWidget = consoleWidget; } public void keyReleased( KeyEvent event ) { if( enterPressed( event ) ) { inputProcessor.processCommand(); } consoleWidget.getParent().layout( true, true ); } public void keyPressed( KeyEvent event ) { String value = consoleWidget.getText(); String newValue = value; if( backSpacePressed( event ) ) { newValue = removeLastCommandCharacter( value ); } else if( anyKeyPressed( event ) ) { newValue = appendLastCommandCharacter( event, value ); } if( !enterPressed( event ) ) { event.doit = false; } consoleWidget.setText( newValue ); consoleWidget.setSelection( consoleWidget.getText().length() ); consoleWidget.getParent().layout( true, true ); } private String appendLastCommandCharacter( KeyEvent event, String value ) { String filtered = filterWhiteSpacesExceptSpace( event ); inputProcessor.appendCommandCharacter( filtered ); return value + filtered; } private String removeLastCommandCharacter( String value ) { inputProcessor.removeLastCommandCharacter(); return value.substring( 0, value.length() - 1 ); } private String filterWhiteSpacesExceptSpace( KeyEvent event ) { String result = new StringBuilder().append( event.character ).toString(); if( event.character != ' ' ) { result = result.trim(); } return result; } private boolean anyKeyPressed( KeyEvent event ) { return event.character != 13; } private boolean backSpacePressed( KeyEvent event ) { return event.character == 8; } private boolean enterPressed( KeyEvent event ) { return event.character == 13; } }