All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bluejeans.utils.InvokerMXBean Maven / Gradle / Ivy

/*
 * Copyright Blue Jeans Network.
 */
package com.bluejeans.utils;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Array;
import java.lang.reflect.Method;

import org.apache.commons.lang.ClassUtils;

/**
 * Invoker MBean
 *
 * @author Dinesh Ilindra
 */
public interface InvokerMXBean {

    /**
     * Print the value by running any on this.
     *
     * @param name
     *            the name
     * @param args
     *            the aeguments
     * @return the print result
     */
    String printThis(final String name, final String... args);

    /**
     * The invoker basic implementation.
     *
     * @author Dinesh Ilindra
     */
    public static class Invoker implements InvokerMXBean {

        /**
         * Registers this as MBean.
         */
        public Invoker() {
            try {
                MetaUtil.registerAsMBean(this);
            } catch (final Exception jme) {
                //jme.printStackTrace();
            }
        }

        /**
         * Run any on this.
         *
         * @param name
         *            the name
         * @param args
         *            the arguments
         * @return the result
         * @throws Exception
         *             any problem
         */
        public Object runThis(final String name, final String... args) throws Exception {
            int len = 0;
            if (args != null) {
                len = args.length;
            }
            final Object[] invokeArgs = new Object[len];
            final Method method = MetaUtil.findFirstMethod(this.getClass(), name, len);
            for (int index = 0; index < len; index++) {
                Class paramType = method.getParameterTypes()[index];
                try {
                    if (paramType.isPrimitive()) {
                        paramType = ClassUtils.primitiveToWrapper(paramType);
                    }
                    invokeArgs[index] = paramType.getMethod("valueOf", String.class).invoke(null, args[index]);
                } catch (final NoSuchMethodException nsme) {
                    invokeArgs[index] = paramType.getConstructor(String.class).newInstance(args[index]);
                }
            }
            return method.invoke(this, invokeArgs);
        }

        /*
         * (non-Javadoc)
         *
         * @see com.bjn.utils.InvokerMBean#printThis(java.lang.String, java.lang.String[])
         */
        @Override
        public String printThis(final String name, final String... args) {
            final StringBuilder val = new StringBuilder();
            try {
                final Object result = runThis(name, args);
                if (result.getClass().isArray()) {
                    for (int index = 0; index < Array.getLength(result); index++) {
                        val.append(Array.get(result, index));
                        val.append("\n");
                    }
                } else {
                    val.append(runThis(name, args));
                }
            } catch (final Exception ex) {
                final StringWriter sw = new StringWriter();
                ex.printStackTrace(new PrintWriter(sw));
                val.append(sw);
            }
            return val.toString();
        }

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy