/*
* 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 org.apache.jmeter.protocol.java.sampler;
import java.util.Iterator;
import java.util.Map;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.test.JavaTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* JavaSamplerContext is used to provide context information to a
* JavaSamplerClient implementation. This currently consists of the
* initialization parameters which were specified in the GUI. Additional data
* may be accessible through JavaSamplerContext in the future.
*
*/
public class JavaSamplerContext {
/*
* Implementation notes:
*
* All of the methods in this class are currently read-only. If update
* methods are included in the future, they should be defined so that a
* single instance of JavaSamplerContext can be associated with each thread.
* Therefore, no synchronization should be needed. The same instance should
* be used for the call to setupTest, all calls to runTest, and the call to
* teardownTest.
*/
/** Logging */
private static final Logger log = LoggerFactory.getLogger(JavaTest.class);
/**
* Map containing the initialization parameters for the JavaSamplerClient.
*/
private final Map<String, String> params;
/**
* Create a new JavaSampler with the specified initialization parameters.
*
* @param args
* the initialization parameters.
*/
public JavaSamplerContext(Arguments args) {
this.params = args.getArgumentsAsMap();
}
/**
* Determine whether or not a value has been specified for the parameter
* with this name.
*
* @param name
* the name of the parameter to test
* @return true if the parameter value has been specified, false otherwise.
*/
public boolean containsParameter(String name) {
return params.containsKey(name);
}
/**
* Get an iterator of the parameter names. Each entry in the Iterator is a
* String.
*
* @return an Iterator of Strings listing the names of the parameters which
* have been specified for this test.
*/
public Iterator<String> getParameterNamesIterator() {
return params.keySet().iterator();
}
/**
* Get the value of a specific parameter as a String, or null if the value
* was not specified.
*
* @param name
* the name of the parameter whose value should be retrieved
* @return the value of the parameter, or null if the value was not
* specified
*/
public String getParameter(String name) {
return getParameter(name, null);
}
/**
* Get the value of a specified parameter as a String, or return the
* specified default value if the value was not specified.
*
* @param name
* the name of the parameter whose value should be retrieved
* @param defaultValue
* the default value to return if the value of this parameter was
* not specified
* @return the value of the parameter, or the default value if the parameter
* was not specified
*/
public String getParameter(String name, String defaultValue) {
if (params == null || !params.containsKey(name)) {
return defaultValue;
}
return params.get(name);
}
/**
* Get the value of a specified parameter as an integer. An exception will
* be thrown if the parameter is not specified or if it is not an integer.
* The value may be specified in decimal, hexadecimal, or octal, as defined
* by Integer.decode().
*
* @param name
* the name of the parameter whose value should be retrieved
* @return the value of the parameter
*
* @throws NumberFormatException
* if the parameter is not specified or is not an integer
*
* @see java.lang.Integer#decode(java.lang.String)
*/
public int getIntParameter(String name) throws NumberFormatException {
if (params == null || !params.containsKey(name)) {
throw new NumberFormatException("No value for parameter named '" + name + "'.");
}
return Integer.decode(params.get(name)).intValue();
}
/**
* Get the value of a specified parameter as an integer, or return the
* specified default value if the value was not specified or is not an
* integer. A warning will be logged if the value is not an integer. The
* value may be specified in decimal, hexadecimal, or octal, as defined by
* Integer.decode().
*
* @param name
* the name of the parameter whose value should be retrieved
* @param defaultValue
* the default value to return if the value of this parameter was
* not specified
* @return the value of the parameter, or the default value if the parameter
* was not specified
*
* @see java.lang.Integer#decode(java.lang.String)
*/
public int getIntParameter(String name, int defaultValue) {
if (params == null || !params.containsKey(name)) {
return defaultValue;
}
try {
return Integer.decode(params.get(name)).intValue();
} catch (NumberFormatException e) {
log.warn("Value for parameter '" + name + "' not an integer: '" + params.get(name) + "'. Using default: '"
+ defaultValue + "'.", e);
return defaultValue;
}
}
/**
* Get the value of a specified parameter as a long. An exception will be
* thrown if the parameter is not specified or if it is not a long. The
* value may be specified in decimal, hexadecimal, or octal, as defined by
* Long.decode().
*
* @param name
* the name of the parameter whose value should be retrieved
* @return the value of the parameter
*
* @throws NumberFormatException
* if the parameter is not specified or is not a long
*
* @see Long#decode(String)
*/
public long getLongParameter(String name) throws NumberFormatException {
if (params == null || !params.containsKey(name)) {
throw new NumberFormatException("No value for parameter named '" + name + "'.");
}
return Long.decode(params.get(name)).longValue();
}
/**
* Get the value of a specified parameter as along, or return the specified
* default value if the value was not specified or is not a long. A warning
* will be logged if the value is not a long. The value may be specified in
* decimal, hexadecimal, or octal, as defined by Long.decode().
*
* @param name
* the name of the parameter whose value should be retrieved
* @param defaultValue
* the default value to return if the value of this parameter was
* not specified
* @return the value of the parameter, or the default value if the parameter
* was not specified
*
* @see Long#decode(String)
*/
public long getLongParameter(String name, long defaultValue) {
if (params == null || !params.containsKey(name)) {
return defaultValue;
}
try {
return Long.decode(params.get(name)).longValue();
} catch (NumberFormatException e) {
log.warn("Value for parameter '" + name + "' not a long: '" + params.get(name) + "'. Using default: '"
+ defaultValue + "'.", e);
return defaultValue;
}
}
}