001/** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.xbean.command; 018 019import java.io.DataInputStream; 020import java.io.IOException; 021import java.io.InputStream; 022import java.io.PrintStream; 023import java.util.StringTokenizer; 024import java.util.Vector; 025 026 027public class CommandShell implements Command { 028 029 private final String prompt; 030 031 public CommandShell(String serverName) { 032 serverName = serverName.toLowerCase(); 033 prompt = TTY_Reset + TTY_Bright + "["+serverName+"]$ " + TTY_Reset; 034 } 035 036 private boolean stop = false; 037 private int rc = 0; 038 039 public static final char ESC = (char) 27; 040 public static final String TTY_Reset = ESC + "[0m"; 041 public static final String TTY_Bright = ESC + "[1m"; 042 public static final String TTY_Dim = ESC + "[2m"; 043 public static final String TTY_Underscore = ESC + "[4m"; 044 public static final String TTY_Blink = ESC + "[5m"; 045 public static final String TTY_Reverse = ESC + "[7m"; 046 public static final String TTY_Hidden = ESC + "[8m"; 047 /* Foreground Colors */ 048 public static final String TTY_FG_Black = ESC + "[30m"; 049 public static final String TTY_FG_Red = ESC + "[31m"; 050 public static final String TTY_FG_Green = ESC + "[32m"; 051 public static final String TTY_FG_Yellow = ESC + "[33m"; 052 public static final String TTY_FG_Blue = ESC + "[34m"; 053 public static final String TTY_FG_Magenta = ESC + "[35m"; 054 public static final String TTY_FG_Cyan = ESC + "[36m"; 055 public static final String TTY_FG_White = ESC + "[37m"; 056 /* Background Colors */ 057 public static final String TTY_BG_Black = ESC + "[40m"; 058 public static final String TTY_BG_Red = ESC + "[41m"; 059 public static final String TTY_BG_Green = ESC + "[42m"; 060 public static final String TTY_BG_Yellow = ESC + "[43m"; 061 public static final String TTY_BG_Blue = ESC + "[44m"; 062 public static final String TTY_BG_Magenta = ESC + "[45m"; 063 public static final String TTY_BG_Cyan = ESC + "[46m"; 064 public static final String TTY_BG_White = ESC + "[47m"; 065 066 public int main(String[] args, InputStream input, PrintStream out) { 067 068 DataInputStream in = new DataInputStream(input); 069 while (!stop) { 070 prompt(in, out); 071 } 072 return rc; 073 } 074 075 protected void prompt(DataInputStream in, PrintStream out) { 076 try { 077 out.print(prompt); 078 out.flush(); 079 080 String commandline = in.readLine(); 081 if( commandline == null ) { 082 this.stop = true; 083 return; 084 } 085 commandline = commandline.trim(); 086 if (commandline.length() < 1) { 087 return; 088 } 089 090 String command = commandline; 091 092 StringTokenizer cmdstr = new StringTokenizer(command); 093 command = cmdstr.nextToken(); 094 095 // Get parameters 096 Vector p = new Vector(); 097 while ( cmdstr.hasMoreTokens() ) { 098 p.add(cmdstr.nextToken()); 099 } 100 String[] args = new String[p.size()]; 101 p.copyInto(args); 102 103 Command cmd = CommandRegistry.getCommand(command); 104 105 if (cmd == null) { 106 out.print(command); 107 out.println(": command not found"); 108 } else { 109 cmd.main(args, in, out); 110 } 111 } catch (UnsupportedOperationException e) { 112 this.rc=-1; 113 this.stop = true; 114 } catch (Throwable e) { 115 e.printStackTrace(out); 116 this.rc=-1; 117 this.stop = true; 118 } 119 } 120 121 protected void badCommand(DataInputStream in, PrintStream out) throws IOException { 122 //asdf: command not found 123 } 124 125}