diff options
Diffstat (limited to 'java/management/tools/qpid-cli/src/org/apache/qpid/commands/Commandviewcontent.java')
-rw-r--r-- | java/management/tools/qpid-cli/src/org/apache/qpid/commands/Commandviewcontent.java | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/java/management/tools/qpid-cli/src/org/apache/qpid/commands/Commandviewcontent.java b/java/management/tools/qpid-cli/src/org/apache/qpid/commands/Commandviewcontent.java new file mode 100644 index 0000000000..d1ae1c1893 --- /dev/null +++ b/java/management/tools/qpid-cli/src/org/apache/qpid/commands/Commandviewcontent.java @@ -0,0 +1,248 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.commands; + +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.StringTokenizer; + +import javax.management.MBeanServerConnection; +import javax.management.ObjectName; +import javax.management.openmbean.CompositeData; + +import org.apache.qpid.commands.objects.QueueObject; +import org.apache.qpid.utils.JMXinfo; + +public class Commandviewcontent extends CommandImpl +{ + + public static final String COMMAND_NAME = "viewcontent"; + + private long number = 0; + private QueueObject objname; + private MBeanServerConnection mbsc; + private String method1; + private ObjectName queue; + + public Commandviewcontent(JMXinfo info) + { + super(info); + this.mbsc = info.getmbserverconnector(); + this.objname = new QueueObject(mbsc); + this.method1 = "viewMessageContent"; + + } + + public void viewcontent() + { + objname.setQueryString(getObject(), getName(), getVirtualhost()); + Set set = objname.returnObjects(); + String temp_header = "", header = "", message_data = "", encoding = null; + + if (objname.getSet().size() != 0) + { + Iterator it = set.iterator(); + this.queue = (ObjectName) it.next(); + try + { + if (objname.getmessagecount(this.queue) == 0) + { + echo("Selected Queue doesn't contain any messages"); + return; + } + if (this.number == 0) + { + echo("You haven't selected a MessageId Please use -id and give a message id"); + echo("Or run view command with same arguemnts to view messageId list for the queue"); + } + else + { + Object[] params = { this.number }; + String[] signature = { new String("long") }; + CompositeData data = (CompositeData) this.mbsc.invoke(queue, this.method1, params, signature); + List<String> itemNames = new ArrayList<String>(data.getCompositeType().keySet()); + for (int j = 0; j < itemNames.size(); j++) + { + temp_header = ""; + temp_header = itemNames.get(j); + while (temp_header.length() < 15) + temp_header = " " + temp_header; + + header = header + temp_header + "|"; + } + echo(header); + encoding = String.valueOf(data.get(itemNames.get(2))); // set + // the + // encoding + // at + // the + // beginning + // because + // encoding + // comes + // later + // in + // the + // loop + if (encoding == null || encoding.length() == 0) + { + encoding = Charset.defaultCharset().name(); + + } + for (int j = 0; j < itemNames.size(); j++) + { + temp_header = ""; + if (j != 1) + { + temp_header = String.valueOf(data.get(itemNames.get(j))); + while (temp_header.length() < 15) + temp_header = " " + temp_header; + } + else + { + Byte[] arrayItems = (Byte[]) data.get(itemNames.get(j)); + byte[] byteArray = new byte[arrayItems.length]; + for (int i = 0; i < arrayItems.length; i++) + { + byteArray[i] = arrayItems[i]; + temp_header = new String(byteArray, encoding); + while (temp_header.length() < 15) + temp_header = " " + temp_header; + } + } + message_data = message_data + temp_header + "|"; + + } + echo(message_data); + } + } + catch (Exception ex) + { + echo("Given MessageId is invalid, There's no message with the given messageId"); + ex.printStackTrace(); + return; + } + + } + else + { + if (hasName()) + { + + echo("The Queue you have specified is not in the current broker"); + echo(""); + } + else + { + printusage(); + } + } + } + + public void execute() + { + /* + * In here you it's easy to handle any number of otpions which are going + * to add with the list command which works with main option object or o + */ + + if (checkoptionsetting("object") || checkoptionsetting("o")) + { + String object = optionchecker("object"); + if (object == null) + { + object = optionchecker("o"); + } + if (object.compareToIgnoreCase("queue") == 0) + setObject(object); + else + { + unrecognizeoption(); + echo("This command is only applicable for delete command so please start with queue"); + } + if (checkoptionsetting("name") || checkoptionsetting("n")) + { + String name = optionchecker("name"); + if (name == null) + name = optionchecker("n"); + + setName(name); + } + if (checkoptionsetting("virtualhost") || checkoptionsetting("v")) + { + String vhost = optionchecker("virtualhost"); + if (vhost == null) + vhost = optionchecker("v"); + setVirtualhost(vhost); + } + if (checkoptionsetting("messageid") || checkoptionsetting("id")) + { + String number = optionchecker("id"); + if (number == null) + number = optionchecker("id"); + + setnumber(removeSpaces(number)); + } + this.viewcontent(); + } + else if (checkoptionsetting("h") || checkoptionsetting("help")) + printusage(); + else + unrecognizeoption(); + } + + public void printusage() + { + echo(""); + echo("Usage:viewcontent [OPTION] ... [OBJECT TYPE]...\n"); + echo("view the information about given number of messages from the given queue object\n"); + echo("To specify the desired queue you have to give the virtualhost name and the queue name with following commands\n"); + echo("Where possible options include:\n"); + echo(" -v --virtualhost Give the virtuallhost name of the desired queue"); + echo(" -n --name Give the queue name of the desired queue you want to view messages"); + echo(" -id Give the messageId of the required message you want to view the content"); + echo(" -h --help Display the help and back to the qpid-cli prompt\n"); + + } + + private void setnumber(String number) + { + this.number = Long.valueOf(number); + } + + private static String removeSpaces(String s) + { + StringTokenizer st = new StringTokenizer(s, " ", false); + String t = ""; + while (st.hasMoreElements()) + t += st.nextElement(); + return t; + } + + public long getnumber() + { + return this.number; + } + +} |