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.formatter; 018 019import java.io.OutputStream; 020import java.io.PrintStream; 021import java.util.Collection; 022import java.util.Iterator; 023import java.util.Map; 024import java.util.Arrays; 025 026import javax.jms.Message; 027import javax.management.Attribute; 028import javax.management.AttributeList; 029import javax.management.ObjectInstance; 030import javax.management.ObjectName; 031 032public class CommandShellOutputFormatter implements OutputFormatter { 033 private OutputStream outputStream; 034 private PrintStream out; 035 036 public CommandShellOutputFormatter(OutputStream out) { 037 038 this.outputStream = out; 039 if (out instanceof PrintStream) { 040 this.out = (PrintStream)out; 041 } else { 042 this.out = new PrintStream(out); 043 } 044 } 045 046 /** 047 * Retrieve the output stream being used by the formatter 048 * 049 * @return 050 */ 051 public OutputStream getOutputStream() { 052 return outputStream; 053 } 054 055 /** 056 * Print an ObjectInstance format of an mbean 057 * 058 * @param mbean - mbean to print 059 */ 060 public void printMBean(ObjectInstance mbean) { 061 printMBean(mbean.getObjectName()); 062 } 063 064 /** 065 * Print an ObjectName format of an mbean 066 * 067 * @param mbean - mbean to print 068 */ 069 public void printMBean(ObjectName mbean) { 070 printMBean(mbean.getKeyPropertyList()); 071 } 072 073 /** 074 * Print an AttributeList format of an mbean 075 * 076 * @param mbean - mbean to print 077 */ 078 public void printMBean(AttributeList mbean) { 079 for (Iterator i = mbean.iterator(); i.hasNext();) { 080 Attribute attrib = (Attribute)i.next(); 081 if (attrib.getValue() instanceof ObjectName) { 082 printMBean((ObjectName)attrib.getValue()); 083 } else if (attrib.getValue() instanceof ObjectInstance) { 084 printMBean((ObjectInstance)attrib.getValue()); 085 } else { 086 out.println(attrib.getName() + " = " + attrib.getValue().toString()); 087 out.println(); 088 } 089 } 090 } 091 092 /** 093 * Print a Map format of an mbean 094 * 095 * @param mbean - mbean to print 096 */ 097 public void printMBean(Map mbean) { 098 for (Iterator i = mbean.keySet().iterator(); i.hasNext();) { 099 String key = (String)i.next(); 100 String val = mbean.get(key).toString(); 101 out.println(key + " = " + val); 102 } 103 out.println(); 104 } 105 106 /** 107 * Print a collection of mbean 108 * 109 * @param mbean - collection of mbeans 110 */ 111 public void printMBean(Collection mbean) { 112 for (Iterator i = mbean.iterator(); i.hasNext();) { 113 Object obj = i.next(); 114 if (obj instanceof ObjectInstance) { 115 printMBean((ObjectInstance)obj); 116 } else if (obj instanceof ObjectName) { 117 printMBean((ObjectName)obj); 118 } else if (obj instanceof Map) { 119 printMBean((Map)obj); 120 } else if (obj instanceof AttributeList) { 121 printMBean((AttributeList)obj); 122 } else if (obj instanceof Collection) { 123 printMessage((Collection)obj); 124 } else { 125 printException(new UnsupportedOperationException("Unknown mbean type: " + obj.getClass().getName())); 126 } 127 } 128 } 129 130 /** 131 * Print a Map format of a JMS message 132 * 133 * @param msg 134 */ 135 public void printMessage(Map msg) { 136 for (Iterator i = msg.keySet().iterator(); i.hasNext();) { 137 String key = (String)i.next(); 138 String val = msg.get(key).toString(); 139 out.println(key + " = " + val); 140 } 141 out.println(); 142 } 143 144 /** 145 * Print a Message format of a JMS message 146 * 147 * @param msg - JMS message to print 148 */ 149 public void printMessage(Message msg) { 150 // TODO 151 } 152 153 /** 154 * Print a collection of JMS messages 155 * 156 * @param msg - collection of JMS messages 157 */ 158 public void printMessage(Collection msg) { 159 for (Iterator i = msg.iterator(); i.hasNext();) { 160 Object obj = i.next(); 161 if (obj instanceof Message) { 162 printMessage((Message)obj); 163 } else if (obj instanceof Map) { 164 printMessage((Map)obj); 165 } else if (obj instanceof Collection) { 166 printMessage((Collection)obj); 167 } else { 168 printException(new UnsupportedOperationException("Unknown message type: " + obj.getClass().getName())); 169 } 170 } 171 } 172 173 /** 174 * Print help messages 175 * 176 * @param helpMsgs - help messages to print 177 */ 178 public void printHelp(String[] helpMsgs) { 179 for (int i = 0; i < helpMsgs.length; i++) { 180 out.println(helpMsgs[i]); 181 } 182 out.println(); 183 } 184 185 /** 186 * Print an information message 187 * 188 * @param info - information message to print 189 */ 190 public void printInfo(String info) { 191 out.println("INFO: " + info); 192 } 193 194 /** 195 * Print an exception message 196 * 197 * @param e - exception to print 198 */ 199 public void printException(Exception e) { 200 out.println("ERROR: " + e); 201 e.printStackTrace(out); 202 } 203 204 /** 205 * Print a version information 206 * 207 * @param version - version info to print 208 */ 209 public void printVersion(String version) { 210 out.println(""); 211 out.println("ActiveMQ " + version); 212 out.println("For help or more information please see: http://activemq.apache.org"); 213 out.println(""); 214 } 215 216 /** 217 * Print a generic key value mapping 218 * 219 * @param map to print 220 */ 221 public void print(Map map) { 222 for (Iterator i = map.keySet().iterator(); i.hasNext();) { 223 String key = (String)i.next(); 224 String val = map.get(key).toString(); 225 out.println(key + " = " + val); 226 } 227 out.println(); 228 } 229 230 /** 231 * Print a generic array of strings 232 * 233 * @param strings - string array to print 234 */ 235 public void print(String[] strings) { 236 for (int i = 0; i < strings.length; i++) { 237 out.println(strings[i]); 238 } 239 out.println(); 240 } 241 242 /** 243 * Print a collection of objects 244 * 245 * @param collection - collection to print 246 */ 247 public void print(Collection collection) { 248 for (Iterator i = collection.iterator(); i.hasNext();) { 249 out.println(i.next().toString()); 250 } 251 out.println(); 252 } 253 254 /** 255 * Print a java string 256 * 257 * @param string - string to print 258 */ 259 public void print(String string) { 260 out.println(string); 261 } 262 263}