Search in sources :

Example 1 with OperationInfo

use of org.apache.tomcat.util.modeler.OperationInfo in project tomcat by apache.

the class MbeansDescriptorsIntrospectionSource method createManagedBean.

/**
     * XXX Find if the 'className' is the name of the MBean or
     *       the real class ( I suppose first )
     * XXX Read (optional) descriptions from a .properties, generated
     *       from source
     * XXX Deal with constructors
     *
     * @param registry The Bean registry (not used)
     * @param domain The bean domain (not used)
     * @param realClass The class to analyze
     * @param type The bean type
     * @return ManagedBean The create MBean
     */
public ManagedBean createManagedBean(Registry registry, String domain, Class<?> realClass, String type) {
    ManagedBean mbean = new ManagedBean();
    Method[] methods = null;
    Hashtable<String, Method> attMap = new Hashtable<>();
    // key: attribute val: getter method
    Hashtable<String, Method> getAttMap = new Hashtable<>();
    // key: attribute val: setter method
    Hashtable<String, Method> setAttMap = new Hashtable<>();
    // key: operation val: invoke method
    Hashtable<String, Method> invokeAttMap = new Hashtable<>();
    methods = realClass.getMethods();
    initMethods(realClass, methods, attMap, getAttMap, setAttMap, invokeAttMap);
    try {
        Enumeration<String> en = attMap.keys();
        while (en.hasMoreElements()) {
            String name = en.nextElement();
            AttributeInfo ai = new AttributeInfo();
            ai.setName(name);
            Method gm = getAttMap.get(name);
            if (gm != null) {
                //ai.setGetMethodObj( gm );
                ai.setGetMethod(gm.getName());
                Class<?> t = gm.getReturnType();
                if (t != null)
                    ai.setType(t.getName());
            }
            Method sm = setAttMap.get(name);
            if (sm != null) {
                //ai.setSetMethodObj(sm);
                Class<?> t = sm.getParameterTypes()[0];
                if (t != null)
                    ai.setType(t.getName());
                ai.setSetMethod(sm.getName());
            }
            ai.setDescription("Introspected attribute " + name);
            if (log.isDebugEnabled())
                log.debug("Introspected attribute " + name + " " + gm + " " + sm);
            if (gm == null)
                ai.setReadable(false);
            if (sm == null)
                ai.setWriteable(false);
            if (sm != null || gm != null)
                mbean.addAttribute(ai);
        }
        for (Entry<String, Method> entry : invokeAttMap.entrySet()) {
            String name = entry.getKey();
            Method m = entry.getValue();
            if (m != null) {
                OperationInfo op = new OperationInfo();
                op.setName(name);
                op.setReturnType(m.getReturnType().getName());
                op.setDescription("Introspected operation " + name);
                Class<?>[] parms = m.getParameterTypes();
                for (int i = 0; i < parms.length; i++) {
                    ParameterInfo pi = new ParameterInfo();
                    pi.setType(parms[i].getName());
                    pi.setName("param" + i);
                    pi.setDescription("Introspected parameter param" + i);
                    op.addParameter(pi);
                }
                mbean.addOperation(op);
            } else {
                log.error("Null arg method for [" + name + "]");
            }
        }
        if (log.isDebugEnabled())
            log.debug("Setting name: " + type);
        mbean.setName(type);
        return mbean;
    } catch (Exception ex) {
        ex.printStackTrace();
        return null;
    }
}
Also used : OperationInfo(org.apache.tomcat.util.modeler.OperationInfo) Hashtable(java.util.Hashtable) Method(java.lang.reflect.Method) ParameterInfo(org.apache.tomcat.util.modeler.ParameterInfo) AttributeInfo(org.apache.tomcat.util.modeler.AttributeInfo) ManagedBean(org.apache.tomcat.util.modeler.ManagedBean)

Aggregations

Method (java.lang.reflect.Method)1 Hashtable (java.util.Hashtable)1 AttributeInfo (org.apache.tomcat.util.modeler.AttributeInfo)1 ManagedBean (org.apache.tomcat.util.modeler.ManagedBean)1 OperationInfo (org.apache.tomcat.util.modeler.OperationInfo)1 ParameterInfo (org.apache.tomcat.util.modeler.ParameterInfo)1