Package org.objectweb.joram.mom.messages

Source Code of org.objectweb.joram.mom.messages.MessageJMXWrapper

/*
* JORAM: Java(TM) Open Reliable Asynchronous Messaging
* Copyright (C) 2009 - 2010 ScalAgent Distributed Technologies
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
* USA.
*
* Initial developer(s): ScalAgent Distributed Technologies
* Contributor(s):
*/
package org.objectweb.joram.mom.messages;

import java.util.Enumeration;
import java.util.List;
import java.util.Map;

import javax.management.openmbean.ArrayType;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.OpenDataException;
import javax.management.openmbean.OpenType;
import javax.management.openmbean.SimpleType;
import javax.management.openmbean.TabularData;
import javax.management.openmbean.TabularDataSupport;
import javax.management.openmbean.TabularType;

import fr.dyade.aaa.common.stream.Properties;

public class MessageJMXWrapper {
  private final static String[] itemNames = { "order", "identifier", "priority", "timestamp", "expiration", "properties" };

  private final static String[] itemDescs = { "order", "identifier", "priority", "timestamp", "expiration", "properties" };

  private static OpenType[] itemTypes;

  private static CompositeType rowType;
  static {
    try {
      ArrayType a1 = new ArrayType(1, SimpleType.STRING);

      itemTypes = new OpenType[] { SimpleType.LONG, SimpleType.STRING, SimpleType.INTEGER, SimpleType.LONG, SimpleType.LONG,  a1};
      rowType = new CompositeType("Message", "Message", itemNames, itemDescs, itemTypes);
    } catch (OpenDataException exc) {
      // Should never happened
    }
  }
 
  /**
   * Returns the description of a message.
   * The description includes the type and priority of the message.
   *
   * @param msg The message to describe.
   * @return    The message description.
   *
   * @throws Exception
   */
  public static CompositeData createCompositeDataSupport(Message msg) throws Exception {
    String[] props = null;

    Properties properties = msg.getHeaderMessage().properties;
    if (properties != null) {
      props = new String[properties.size()];
      int i = 0;
      StringBuffer strbuf = new StringBuffer();
      for (Enumeration e = properties.keys(); e.hasMoreElements();) {
        String key = (String) e.nextElement();
        strbuf.append(key).append('=').append(properties.get(key));
        props[i++] = strbuf.toString();
        strbuf.setLength(0);
      }
    }
   
    CompositeDataSupport cds = new CompositeDataSupport(rowType, itemNames,
                                                        new Object[] {
                                                                      new Long(msg.order),
                                                                      msg.getIdentifier(),
                                                                      new Integer(msg.getPriority()),
                                                                      new Long(msg.getTimestamp()),
                                                                      new Long(msg.getExpiration()),
                                                                      props
                                                                      });
    return cds;
  }

  /**
   * Returns the description of a vector of messages.
   *
   * @param messages The vector of messages to describe.
   * @return The messages description.
   *
   * @throws Exception
   */
  public static TabularData createTabularDataSupport(List messages) throws Exception {
    String[] id = { "identifier" };
    TabularDataSupport tds = new TabularDataSupport(new TabularType("Messages", "Messages", rowType, id));

    for (int i=0; i<messages.size(); i++) {
      Message message = (Message) messages.get(i);
      tds.put(MessageJMXWrapper.createCompositeDataSupport(message));
    }
    return tds;
  }

  /**
   * Returns the description of a subset of an hashtable of messages.
   *
   * @param messages The hashtable of messages to describe.
   * @return The messages description.
   *
   * @throws Exception
   */
  public static TabularData createTabularDataSupport(Map messages, List ids) throws Exception {
    String[] id = { "identifier" };
    TabularDataSupport tds = new TabularDataSupport(new TabularType("Messages", "Messages", rowType, id));

    for (int i=0; i<ids.size(); i++) {
      Message message = (Message) messages.get(ids.get(i));
      tds.put(MessageJMXWrapper.createCompositeDataSupport(message));
    }
    return tds;
  }

//  public static CompositeData[] createTabularDataSupport(Enumeration messages) throws Exception {
//    if (rowType == null)
//      rowType = new CompositeType("Message", "xxx", itemNames, itemDescs, itemTypes);
//
//    Vector v = new Vector();
//    while (messages.hasMoreElements()) {
//      Message message = (Message) messages.nextElement();
//      v.add(MessageJMXWrapper.createCompositeDataSupport(message));
//    }
//    CompositeData[] cda = new CompositeData[v.size()];
//    return (CompositeData[]) v.toArray(cda);
//  }

}
TOP

Related Classes of org.objectweb.joram.mom.messages.MessageJMXWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.