📄 consoleservicerequest.java
字号:
/*
* @(#)ConsoleServiceRequest.java 2006/11/13
*
* Copyright (c) ZhiYang.
* All rights reserved.
*/
package his;
import java.util.*;
import java.io.*;
/**
* 命令行用户请求
* @version 1.0
* @author 杨智 (MSE2006B-06250145)
*
*/
public class ConsoleServiceRequest implements ServiceRequest
{
/*
* UIMessager: output message while doing a command
*/
private UIMessager msger;
/*
* Command reators: user to create Command object
*/
private static Map reactors = new TreeMap();
static {
reactors.put( "register", new RegisterReactor() );
reactors.put( "add", new AddReactor() );
reactors.put( "query", new QueryReactor() );
reactors.put( "delete", new DeleteReactor() );
reactors.put( "clear", new ClearReactor() );
}
/*
* input wrapper
*/
private class InputWrapper {
static final String prompt = "$";
BufferedReader br;
boolean isFile;
InputWrapper ( BufferedReader br, boolean isFile ) {
this.br = br;
this.isFile = isFile;
}
String readLine() throws IOException {
if( !isFile ) {
msger.println( "" );
msger.print( prompt );
}
String ret = br.readLine();
if( isFile ) {
if( ret != null && ret.length()>0 ) {
msger.println( "" );
msger.println( prompt + ret );
}
}
return ret;
}
}
/*
* ServiceRequest stack
*/
Stack srStack = new Stack();
/*
* constructor
*/
public ConsoleServiceRequest ( UIMessager msger ) {
this.msger = msger;
srStack.push( new InputWrapper( new BufferedReader( new InputStreamReader(System.in)), false ) );
}
private Command constructCommand ( String strCommand, String strParams ) {
//msger.println("command: " + strCommand );
//msger.println("params : " + strParams );
MeetingReactor reactor = (MeetingReactor) reactors.get( strCommand );
if( reactor != null ) {
/*
if( 0 == strParams.compareTo("?") ){
reactor.printUsage( msger );
return null;
}*/
Object[] params = reactor.parseParameters( strParams.split(" ") );
if( params == null ) {
msger.println("invalid parameters!");
reactor.printUsage( msger );
return null;
}
/*
for(int i=0; i<params.length; ++i ) {
msger.println("params[" + i + "]=" + params[i] );
}*/
return new MeetingCommand ( reactor, params, msger );
}
else {
msger.println("invalid parameters!");
}
return null;
}
private void executeHelpCommand ( String destCmd ) {
if( null == destCmd || destCmd.length()<1 ) {
Iterator it = reactors.entrySet().iterator();
while( it.hasNext() ) {
Map.Entry entry = (Map.Entry) it.next();
((MeetingReactor)entry.getValue()).printUsage(msger);
msger.println("");
}
}
else {
if( destCmd.compareTo ( "quit" ) == 0 ) {
msger.println("Usage: quit");
return;
}
else if( destCmd.compareTo ( "batch" ) == 0 ) {
msger.println("Usage: batch batch_file_path");
return;
}
MeetingReactor reactor = (MeetingReactor) reactors.get( destCmd );
if( null == reactor ) {
msger.println("unknown command");
}
else {
reactor.printUsage(msger);
}
}
}
private Command getNextCommand ( InputWrapper br ) {
String strCmdLine = null;
try {
strCmdLine = br.readLine();
if( null == strCmdLine ) {
// end of current stream
srStack.pop();
return null;
}
else if( strCmdLine.length()<1 ){
return null;
}
}
catch ( IOException e ) {
srStack.pop();
return null;
}
int idx = strCmdLine.indexOf(' ');
String strCommand = idx>0 ? strCmdLine.substring(0,idx) : strCmdLine ;
String strParams = idx>0 ? strCmdLine.substring(idx+1) : "";
strCommand = strCommand.toLowerCase();
if( strCommand.compareTo("quit") == 0 ) {
srStack.pop();
return null;
}
else if( strCommand.compareTo("help") == 0 ) {
executeHelpCommand( strParams );
return null;
}
else if( strCommand.compareTo("batch") ==0 ) {
// batch command file
try {
srStack.push( new InputWrapper( new BufferedReader( new FileReader( strParams ) ), true ) );
}
catch ( FileNotFoundException e ) {
msger.println("batch file \"" + strParams + "\" can not found!" );
}
return null;
}
return constructCommand ( strCommand, strParams );
}
/*
* get next command from request
* @return return null if requsts to quit
*/
public Command getNextCommand( ) throws HISE.TryNextCommand {
Command cmd = null;
while( null == cmd ) {
if( srStack.empty() )
return null;
InputWrapper br = (InputWrapper) srStack.peek();
cmd = getNextCommand ( br );
if( null == cmd ) {
throw new HISE.TryNextCommand();
}
}
return cmd;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -