/*
* 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.config;
import java.io.Serializable;
import org.apache.jmeter.testelement.AbstractTestElement;
import org.apache.jmeter.testelement.property.StringProperty;
import org.apache.jorphan.util.JOrphanUtils;
/**
* Class representing an argument. Each argument consists of a name/value pair,
* as well as (optional) metadata.
*
*/
public class Argument extends AbstractTestElement implements Serializable {
private static final long serialVersionUID = 240L;
/** Name used to store the argument's name. */
public static final String ARG_NAME = "Argument.name"; // $NON-NLS-1$
/** Name used to store the argument's value. */
public static final String VALUE = "Argument.value"; // $NON-NLS-1$
/** Name used to store the argument's description. */
public static final String DESCRIPTION = "Argument.desc"; // $NON-NLS-1$
private static final String DFLT_DESCRIPTION = ""; // $NON-NLS-1$
/** Name used to store the argument's metadata. */
public static final String METADATA = "Argument.metadata"; // $NON-NLS-1$
/**
* Create a new Argument without a name, value, or metadata.
*/
public Argument() {
this(null, null, null, null);
}
/**
* Create a new Argument with the specified name and value, and no metadata.
*
* @param name
* the argument name
* @param value
* the argument value
*/
public Argument(String name, String value) {
this(name, value, null, null);
}
/**
* Create a new Argument with the specified name, value, and metadata.
*
* @param name
* the argument name
* @param value
* the argument value
* @param metadata
* the argument metadata
*/
public Argument(String name, String value, String metadata) {
this(name, value, metadata, null);
}
/**
* Create a new Argument with the specified name, value, and metadata.
*
* @param name
* the argument name
* @param value
* the argument value
* @param metadata
* the argument metadata
* @param description
* the argument description
*/
public Argument(String name, String value, String metadata, String description) {
if(name != null) {
setProperty(new StringProperty(ARG_NAME, name));
}
if(value != null) {
setProperty(new StringProperty(VALUE, value));
}
if(metadata != null) {
setProperty(new StringProperty(METADATA, metadata));
}
if(description != null) {
setProperty(DESCRIPTION, description, DFLT_DESCRIPTION);
}
}
/**
* Set the name of the Argument.
*
* @param newName
* the new name
*/
@Override
public void setName(String newName) {
setProperty(new StringProperty(ARG_NAME, newName));
}
/**
* Get the name of the Argument.
*
* @return the attribute's name
*/
@Override
public String getName() {
return getPropertyAsString(ARG_NAME);
}
/**
* Sets the value of the Argument.
*
* @param newValue
* the new value
*/
public void setValue(String newValue) {
setProperty(new StringProperty(VALUE, newValue));
}
/**
* Gets the value of the Argument object.
*
* @return the attribute's value
*/
public String getValue() {
return getPropertyAsString(VALUE);
}
/**
* Sets the Description attribute of the Argument.
*
* @param description
* the new description
*/
public void setDescription(String description) {
setProperty(DESCRIPTION, description, DFLT_DESCRIPTION);
}
/**
* Gets the Meta Data attribute of the Argument.
*
* @return the MetaData value
*/
public String getDescription() {
return getPropertyAsString(DESCRIPTION, DFLT_DESCRIPTION);
}
/**
* Sets the Meta Data attribute of the Argument.
*
* @param newMetaData
* the new metadata
*/
public void setMetaData(String newMetaData) {
setProperty(new StringProperty(METADATA, newMetaData));
}
/**
* Gets the Meta Data attribute of the Argument.
*
* @return the MetaData value
*/
public String getMetaData() {
return getPropertyAsString(METADATA);
}
@Override
public String toString() {
final String desc = getDescription();
if (DFLT_DESCRIPTION.equals(desc)) {
return getName() + getMetaData() + getValue();
} else {
return getName() + getMetaData() + getValue() + " //" + getDescription();
}
}
/**
* Is this parameter skippable, i.e. empty/blank string
* or it looks like an unrecognised variable.
*
* @param parameterName - parameter name
* @return true if parameter should be skipped
*/
public boolean isSkippable(String parameterName) {
if (JOrphanUtils.isBlank(parameterName)){
return true; // Skip parameters with a blank name (allows use of optional variables in parameter lists)
}
// TODO: improve this test
if (parameterName.trim().startsWith("${") && parameterName.endsWith("}")){// $NON-NLS-1$ $NON-NLS-2$
return true; // Missing variable name
}
return false;
}
}