// Path: src/main/java/org/jmxtrans/agent/util/logging/Logger.java
// public class Logger {
// 
//     public static Logger getLogger(String name) {
//         return new Logger(name);
//     }
// 
//     private final String name;
// 
//     @SuppressFBWarnings("MS_SHOULD_BE_REFACTORED_TO_BE_FINAL")
//     public static PrintStream out;
// 
//     static {
//         if ("stderr".equalsIgnoreCase(System.getenv("JMX_TRANS_AGENT_CONSOLE")) ||
//                 "stderr".equalsIgnoreCase(System.getProperty(Logger.class.getName() + ".console"))) {
//             Logger.out = System.err;
//         } else {
//             Logger.out = System.out;
//         }
//     }
// 
//     @SuppressFBWarnings("MS_SHOULD_BE_REFACTORED_TO_BE_FINAL")
//     public static Level level = Level.INFO;
// 
//     @Nullable
//     public static Level parseLevel(@Nullable String level, @Nullable Level defaultValue) {
// 
//         Map<String, Level> julLevelsByName = new HashMap<String, Level>() {
//             {
//                 put("TRACE", Level.FINEST);
//                 put("FINEST", Level.FINEST);
//                 put("FINER", Level.FINER);
//                 put("FINE", Level.FINE);
//                 put("DEBUG", Level.FINE);
//                 put("INFO", Level.INFO);
//                 put("WARNING", Level.WARNING);
//                 put("WARN", Level.WARNING);
//                 put("SEVERE", Level.SEVERE);
// 
//             }
//         };
// 
//         for(Map.Entry<String, Level> entry: julLevelsByName.entrySet()) {
//             if(entry.getKey().equalsIgnoreCase(level))
//                 return entry.getValue();
//         }
//         return defaultValue;
//     }
// 
//     static {
//         String level = System.getProperty(Logger.class.getName() + ".level", "INFO");
//         Logger.level = parseLevel(level, Level.INFO);
//     }
// 
//     public Logger(String name) {
//         this.name = name;
//     }
// 
//     public void log(Level level, String msg) {
//         log(level, msg, null);
//     }
// 
//     public void log(Level level, String msg, Throwable thrown) {
//         if (!isLoggable(level)) {
//             return;
//         }
//         Logger.out.println(new Timestamp(System.currentTimeMillis()) + " " + level + " [" + Thread.currentThread().getName() + "] " + name + " - " + msg);
//         if (thrown != null) {
//             thrown.printStackTrace(Logger.out);
//         }
//     }
// 
//     public void finest(String msg) {
//         log(Level.FINEST, msg);
//     }
// 
//     public void finer(String msg) {
//         log(Level.FINER, msg);
//     }
// 
//     public void fine(String msg) {
//         log(Level.FINE, msg);
//     }
// 
//     public void info(String msg) {
//         log(Level.INFO, msg);
//     }
// 
//     public void warning(String msg) {
//         log(Level.WARNING, msg);
//     }
// 
//     public boolean isLoggable(Level level) {
//         if (level.intValue() < this.level.intValue()) {
//             return false;
//         }
//         return true;
//     }
// }


import javax.management.ObjectName;
import java.util.Arrays;
import java.util.Set;
import java.util.logging.Level;
import org.jmxtrans.agent.util.Preconditions2;
import org.jmxtrans.agent.util.logging.Logger;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
/*
 * Copyright (c) 2010-2013 the original author or authors
 * 
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 * 
 */
package org.jmxtrans.agent;



/**
 * @author <a href="mailto:cleclerc@cloudbees.com">Cyrille Le Clerc</a>
 */
public class Invocation implements Collector {

    @Nullable
    protected final ObjectName objectName;
    @Nonnull
    protected final String operationName;
    @Nullable
    protected final String resultAlias;
    @Nullable
    protected final String type;
    @Nonnull
    protected final Object[] params;
    @Nonnull
    protected final String[] signature;
// Path: src/main/java/org/jmxtrans/agent/util/logging/Logger.java
// public class Logger {
// 
//     public static Logger getLogger(String name) {
//         return new Logger(name);
//     }
// 
//     private final String name;
// 
//     @SuppressFBWarnings("MS_SHOULD_BE_REFACTORED_TO_BE_FINAL")
//     public static PrintStream out;
// 
//     static {
//         if ("stderr".equalsIgnoreCase(System.getenv("JMX_TRANS_AGENT_CONSOLE")) ||
//                 "stderr".equalsIgnoreCase(System.getProperty(Logger.class.getName() + ".console"))) {
//             Logger.out = System.err;
//         } else {
//             Logger.out = System.out;
//         }
//     }
// 
//     @SuppressFBWarnings("MS_SHOULD_BE_REFACTORED_TO_BE_FINAL")
//     public static Level level = Level.INFO;
// 
//     @Nullable
//     public static Level parseLevel(@Nullable String level, @Nullable Level defaultValue) {
// 
//         Map<String, Level> julLevelsByName = new HashMap<String, Level>() {
//             {
//                 put("TRACE", Level.FINEST);
//                 put("FINEST", Level.FINEST);
//                 put("FINER", Level.FINER);
//                 put("FINE", Level.FINE);
//                 put("DEBUG", Level.FINE);
//                 put("INFO", Level.INFO);
//                 put("WARNING", Level.WARNING);
//                 put("WARN", Level.WARNING);
//                 put("SEVERE", Level.SEVERE);
// 
//             }
//         };
// 
//         for(Map.Entry<String, Level> entry: julLevelsByName.entrySet()) {
//             if(entry.getKey().equalsIgnoreCase(level))
//                 return entry.getValue();
//         }
//         return defaultValue;
//     }
// 
//     static {
//         String level = System.getProperty(Logger.class.getName() + ".level", "INFO");
//         Logger.level = parseLevel(level, Level.INFO);
//     }
// 
//     public Logger(String name) {
//         this.name = name;
//     }
// 
//     public void log(Level level, String msg) {
//         log(level, msg, null);
//     }
// 
//     public void log(Level level, String msg, Throwable thrown) {
//         if (!isLoggable(level)) {
//             return;
//         }
//         Logger.out.println(new Timestamp(System.currentTimeMillis()) + " " + level + " [" + Thread.currentThread().getName() + "] " + name + " - " + msg);
//         if (thrown != null) {
//             thrown.printStackTrace(Logger.out);
//         }
//     }
// 
//     public void finest(String msg) {
//         log(Level.FINEST, msg);
//     }
// 
//     public void finer(String msg) {
//         log(Level.FINER, msg);
//     }
// 
//     public void fine(String msg) {
//         log(Level.FINE, msg);
//     }
// 
//     public void info(String msg) {
//         log(Level.INFO, msg);
//     }
// 
//     public void warning(String msg) {
//         log(Level.WARNING, msg);
//     }
// 
//     public boolean isLoggable(Level level) {
//         if (level.intValue() < this.level.intValue()) {
//             return false;
//         }
//         return true;
//     }
// }


// Path: src/main/java/org/jmxtrans/agent/Invocation.java
import javax.management.ObjectName;
import java.util.Arrays;
import java.util.Set;
import java.util.logging.Level;
import org.jmxtrans.agent.util.Preconditions2;
import org.jmxtrans.agent.util.logging.Logger;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;

/*
 * Copyright (c) 2010-2013 the original author or authors
 * 
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 * 
 */
package org.jmxtrans.agent;



/**
 * @author <a href="mailto:cleclerc@cloudbees.com">Cyrille Le Clerc</a>
 */
public class Invocation implements Collector {

    @Nullable
    protected final ObjectName objectName;
    @Nonnull
    protected final String operationName;
    @Nullable
    protected final String resultAlias;
    @Nullable
    protected final String type;
    @Nonnull
    protected final Object[] params;
    @Nonnull
    protected final String[] signature;
    private final Logger logger = Logger.getLogger(getClass().getName());