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.activemq.console.command; 018 019import java.io.InputStream; 020import java.io.PrintStream; 021import java.util.ArrayList; 022import java.util.Arrays; 023import java.util.List; 024 025import org.apache.activemq.console.CommandContext; 026import org.apache.activemq.console.command.store.amq.AMQJournalToolCommand; 027import org.apache.activemq.console.formatter.CommandShellOutputFormatter; 028 029public class ShellCommand extends AbstractCommand { 030 031 private boolean interactive; 032 private String[] helpFile; 033 034 public ShellCommand() { 035 this(false); 036 } 037 038 public ShellCommand(boolean interactive) { 039 this.interactive = interactive; 040 this.helpFile = new String[] { 041 interactive ? "Usage: [task] [task-options] [task data]" : "Usage: Main [--extdir <dir>] [task] [task-options] [task data]", 042 "", 043 "Tasks:", 044 " start - Creates and starts a broker using a configuration file, or a broker URI.", 045 " create - Creates a runnable broker instance in the specified path", 046 " stop - Stops a running broker specified by the broker name.", 047 " list - Lists all available brokers in the specified JMX context.", 048 " query - Display selected broker component's attributes and statistics.", 049 " browse - Display selected messages in a specified destination.", 050 " journal-audit - Allows you to view records stored in the persistent journal.", 051 " purge - Delete selected destination's messages that matches the message selector", 052 " encrypt - Encrypts given text", 053 " decrypt - Decrypts given text", 054 "", 055 "Task Options (Options specific to each task):", 056 " --extdir <dir> - Add the jar files in the directory to the classpath.", 057 " --version - Display the version information.", 058 " -h,-?,--help - Display this help information. To display task specific help, use " + (interactive ? "" : "Main ") + "[task] -h,-?,--help", 059 "", 060 "Task Data:", 061 " - Information needed by each specific task.", 062 "", 063 "JMX system property options:", 064 " -Dactivemq.jmx.url=<jmx service uri> (default is: 'service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi')", 065 " -Dactivemq.jmx.user=<user name>", 066 " -Dactivemq.jmx.password=<password>", 067 "" 068 }; 069 } 070 071 /** 072 * Main method to run a command shell client. 073 * 074 * @param args - command line arguments 075 * @param in - input stream to use 076 * @param out - output stream to use 077 * @return 0 for a successful run, -1 if there are any exception 078 */ 079 public static int main(String[] args, InputStream in, PrintStream out) { 080 081 CommandContext context = new CommandContext(); 082 context.setFormatter(new CommandShellOutputFormatter(out)); 083 084 // Convert arguments to list for easier management 085 List<String> tokens = new ArrayList<String>(Arrays.asList(args)); 086 087 ShellCommand main = new ShellCommand(); 088 try { 089 main.setCommandContext(context); 090 main.execute(tokens); 091 return 0; 092 } catch (Exception e) { 093 context.printException(e); 094 return -1; 095 } 096 } 097 098 public boolean isInteractive() { 099 return interactive; 100 } 101 102 public void setInteractive(boolean interactive) { 103 this.interactive = interactive; 104 } 105 106 /** 107 * Parses for specific command task. 108 * 109 * @param tokens - command arguments 110 * @throws Exception 111 */ 112 protected void runTask(List<String> tokens) throws Exception { 113 114 // Process task token 115 if (tokens.size() > 0) { 116 Command command=null; 117 String taskToken = (String)tokens.remove(0); 118 if (taskToken.equals("start")) { 119 command = new StartCommand(); 120 } else if (taskToken.equals("create")) { 121 command = new CreateCommand(); 122 } else if (taskToken.equals("stop")) { 123 command = new ShutdownCommand(); 124 } else if (taskToken.equals("list")) { 125 command = new ListCommand(); 126 } else if (taskToken.equals("query")) { 127 command = new QueryCommand(); 128 } else if (taskToken.equals("bstat")) { 129 command = new BstatCommand(); 130 } else if (taskToken.equals("browse")) { 131 command = new AmqBrowseCommand(); 132 } else if (taskToken.equals("purge")) { 133 command = new PurgeCommand(); 134 } else if (taskToken.equals("journal-audit")) { 135 command = new AMQJournalToolCommand(); 136 } else if (taskToken.equals("encrypt")) { 137 command = new EncryptCommand(); 138 } else if (taskToken.equals("decrypt")) { 139 command = new DecryptCommand(); 140 } else if (taskToken.equals("help")) { 141 printHelp(); 142 } else { 143 printHelp(); 144 } 145 146 if( command!=null ) { 147 command.setCommandContext(context); 148 command.execute(tokens); 149 } 150 } else { 151 printHelp(); 152 } 153 154 } 155 156 /** 157 * Print the help messages for the browse command 158 */ 159 protected void printHelp() { 160 context.printHelp(helpFile); 161 } 162}