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     */
017    
018    package org.apache.geronimo.system.jmx;
019    
020    import java.util.Iterator;
021    import java.util.List;
022    import java.util.Set;
023    import javax.management.MBeanAttributeInfo;
024    import javax.management.MBeanConstructorInfo;
025    import javax.management.MBeanInfo;
026    import javax.management.MBeanNotificationInfo;
027    import javax.management.MBeanOperationInfo;
028    import javax.management.MBeanParameterInfo;
029    
030    import org.apache.geronimo.gbean.GAttributeInfo;
031    import org.apache.geronimo.gbean.GBeanInfo;
032    import org.apache.geronimo.gbean.GOperationInfo;
033    import org.apache.geronimo.kernel.management.NotificationType;
034    
035    
036    /**
037     * Helper class for JMX Operations
038     *
039     * @version $Rev: 485321 $ $Date: 2006-12-10 19:14:46 -0500 (Sun, 10 Dec 2006) $
040     */
041    public final class JMXUtil {
042        private JMXUtil() {
043        }
044    
045        public static MBeanInfo toMBeanInfo(GBeanInfo gBeanInfo) {
046            String className = gBeanInfo.getClassName();
047            String description = "No description available";
048    
049            // attributes
050            Set gbeanAttributes = gBeanInfo.getAttributes();
051            MBeanAttributeInfo[] attributes = new MBeanAttributeInfo[gbeanAttributes.size()];
052            int a = 0;
053            for (Iterator iterator = gbeanAttributes.iterator(); iterator.hasNext();) {
054                GAttributeInfo gAttributeInfo = (GAttributeInfo) iterator.next();
055                attributes[a] = new MBeanAttributeInfo(gAttributeInfo.getName(), gAttributeInfo.getType(), "no description available", gAttributeInfo.isReadable(), gAttributeInfo.isWritable(), isIs(gAttributeInfo));
056                a++;
057            }
058    
059            //we don't expose managed constructors
060            MBeanConstructorInfo[] constructors = new MBeanConstructorInfo[0];
061    
062            // operations
063            Set gbeanOperations = gBeanInfo.getOperations();
064            MBeanOperationInfo[] operations = new MBeanOperationInfo[gbeanOperations.size()];
065            int o = 0;
066            for (Iterator iterator = gbeanOperations.iterator(); iterator.hasNext();) {
067                GOperationInfo gOperationInfo = (GOperationInfo) iterator.next();
068                //list of class names
069                List gparameters = gOperationInfo.getParameterList();
070                MBeanParameterInfo[] parameters = new MBeanParameterInfo[gparameters.size()];
071                int p = 0;
072                for (Iterator piterator = gparameters.iterator(); piterator.hasNext();) {
073                    String type = (String) piterator.next();
074                    parameters[p] = new MBeanParameterInfo("parameter" + p, type, "no description available");
075                    p++;
076                }
077                operations[o] = new MBeanOperationInfo(gOperationInfo.getName(), "no description available", parameters, gOperationInfo.getReturnType() , MBeanOperationInfo.UNKNOWN);
078                o++;
079            }
080    
081            MBeanNotificationInfo[] notifications = new MBeanNotificationInfo[1];
082            notifications[0] = new MBeanNotificationInfo(NotificationType.TYPES, "javax.management.Notification", "J2EE Notifications");
083    
084            MBeanInfo mbeanInfo = new MBeanInfo(className, description, attributes, constructors, operations, notifications);
085            return mbeanInfo;
086        }
087    
088        private static boolean isIs(GAttributeInfo gAttributeInfo) {
089            String getterName = gAttributeInfo.getGetterName();
090            if (getterName == null) {
091                return false;
092            }
093            return getterName.startsWith("is");
094        }
095    }