Package org.fusesource.ide.jmx.activemq

Source Code of org.fusesource.ide.jmx.activemq.ActiveMQConverter

/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Red Hat, Inc. - initial API and implementation
******************************************************************************/

package org.fusesource.ide.jmx.activemq;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.management.openmbean.CompositeData;
import javax.management.openmbean.TabularData;

import org.fusesource.ide.jmx.commons.messages.Exchange;
import org.fusesource.ide.jmx.commons.messages.IExchange;
import org.fusesource.ide.jmx.commons.messages.Message;


public class ActiveMQConverter {

  private Set<String> nestedProperties = new HashSet<String>(Arrays.asList(
      "BooleanProperties", "ByteProperties", "ShortProperties",
      "IntProperties", "LongProperties", "FloatProperties",
      "DoubleProperties", "StringProperties"));
  private Set<String> bodyKeys = new HashSet<String>(Arrays.asList("Text",
      "Object", "Bytes", "Map"));
  private Set<String> ignoredKeys = new HashSet<String>(Arrays.asList("PropertiesText"));

  public IExchange toExchange(Object object) {
    if (object instanceof CompositeData) {
      CompositeData data = (CompositeData) object;
      return toExchange(data);
    }
    return null;
  }

  public IExchange toExchange(CompositeData data) {
    Message message = new Message();
    Map<String, Object> headers = message.getHeaders();
    Set<String> keySet = data.getCompositeType().keySet();
    for (String key : keySet) {
      Object value = data.get(key);
      // ActiveMQJMXPlugin.getLogger().debug("Key: " + key + " value " + value);
      if (ignoredKeys.contains(key)) {
        continue;
      }
      boolean nestedProperty = nestedProperties.contains(key);
      if (nestedProperty && value instanceof TabularData) {
        TabularData td = (TabularData) value;
        Map<String, Object> map = toMap(td);
        putAllNonNull(headers, map);
      } else if (nestedProperty && value instanceof Map) {
        Map<String, Object> map = (Map<String, Object>) value;
        putAllNonNull(headers, map);
      } else if (bodyKeys.contains(key)) {
        message.setBody(value);
      } else if (value != null) {
        headers.put(key, value);
      }
    }
    Set<Entry<String, Object>> entrySet = headers.entrySet();
    return new Exchange(message);
  }

  protected void putAllNonNull(Map<String, Object> headers,
      Map<String, Object> map) {
    Set<Entry<String, Object>> entrySet = map.entrySet();
    for (Entry<String, Object> entry : entrySet) {
      Object value = entry.getValue();
      if (value != null) {
        headers.put(entry.getKey(), value);
      }
    }
  }

  private Map<String, Object> toMap(TabularData td) {
    HashMap<String, Object> answer = new HashMap<String, Object>();
    Collection<?> rows = td.values();
    for (Object row : rows) {
      if (row instanceof CompositeData) {
        CompositeData cd = (CompositeData) row;
        // lets assume its just a key & value
        if (true) {
          Object key = cd.get("key");
          if (key != null) {
            Object value = cd.get("value");
            //ActiveMQJMXPlugin.getLogger().debug("Got key " + key + " value " + value);
            answer.put(key.toString(), value);
          }
        } else {
          Set<?> keys = cd.getCompositeType().keySet();
          for (Object key : keys) {
            String keyText = key.toString();
            Object value = cd.get(keyText);
            //ActiveMQJMXPlugin.getLogger().debug("Got key " + key + " value " + value);
            answer.put(keyText, value);
          }
        }
      }
    }
    return answer;
  }
}
TOP

Related Classes of org.fusesource.ide.jmx.activemq.ActiveMQConverter

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.