//
// 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 com.cloud.utils.mgmt;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.AttributeNotFoundException;
import javax.management.DynamicMBean;
import javax.management.InvalidAttributeValueException;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanException;
import javax.management.MBeanInfo;
import javax.management.ReflectionException;
public class PropertyMapDynamicBean implements DynamicMBean {
private Map<String, Object> _propMap = new HashMap<String, Object>();
public PropertyMapDynamicBean() {
}
public PropertyMapDynamicBean(Map<String, Object> propMap) {
_propMap = propMap;
}
@Override
public synchronized Object getAttribute(String name) throws AttributeNotFoundException, MBeanException, ReflectionException {
if (_propMap != null) {
return _propMap.get(name);
}
throw new AttributeNotFoundException("No such property " + name);
}
@Override
public synchronized AttributeList getAttributes(String[] names) {
AttributeList list = new AttributeList();
for (String name : names) {
Object value = _propMap.get(name);
if (value != null)
list.add(new Attribute(name, value));
}
return list;
}
@Override
public synchronized MBeanInfo getMBeanInfo() {
SortedSet<String> names = new TreeSet<String>();
for (String name : _propMap.keySet())
names.add(name);
MBeanAttributeInfo[] attrs = new MBeanAttributeInfo[names.size()];
Iterator<String> it = names.iterator();
for (int i = 0; i < attrs.length; i++) {
String name = it.next();
attrs[i] = new MBeanAttributeInfo(name, "java.lang.String", name, true, // isReadable
true, // isWritable
false); // isIs
}
return new MBeanInfo(this.getClass().getName(), "Dynamic MBean", attrs, null, null, null);
}
@Override
public synchronized Object invoke(String name, Object[] args, String[] sig) throws MBeanException, ReflectionException {
throw new ReflectionException(new NoSuchMethodException(name));
}
@Override
public synchronized void setAttribute(Attribute attr) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
String name = attr.getName();
if (name != null)
_propMap.put(name, attr.getValue());
}
@Override
public synchronized AttributeList setAttributes(AttributeList list) {
Attribute[] attrs = list.toArray(new Attribute[0]);
AttributeList retList = new AttributeList();
for (Attribute attr : attrs) {
String name = attr.getName();
Object value = attr.getValue();
_propMap.put(name, value);
retList.add(new Attribute(name, value));
}
return retList;
}
public synchronized void addProp(String name, Object value) {
_propMap.put(name, value);
}
public synchronized Object getProp(String name) {
return _propMap.get(name);
}
}