/*
* 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.testelement;
import org.apache.jmeter.testelement.property.JMeterProperty;
import org.apache.jmeter.testelement.property.NullProperty;
import org.apache.jmeter.testelement.property.PropertyIterator;
import org.apache.jmeter.threads.JMeterContext;
public interface TestElement extends Cloneable {
String NAME = "TestElement.name"; //$NON-NLS-1$
String GUI_CLASS = "TestElement.gui_class"; //$NON-NLS-1$
String ENABLED = "TestElement.enabled"; //$NON-NLS-1$
String TEST_CLASS = "TestElement.test_class"; //$NON-NLS-1$
// Needed by AbstractTestElement.
// Also TestElementConverter and TestElementPropertyConverter for handling empty comments
String COMMENTS = "TestPlan.comments"; //$NON-NLS-1$
// N.B. Comments originally only applied to Test Plans, hence the name - which can now not be easily changed
void addTestElement(TestElement child);
/**
* This method should clear any test element properties that are merged
* by {@link #addTestElement(TestElement)}.
*/
void clearTestElementChildren();
void setProperty(String key, String value);
void setProperty(String key, String value, String dflt);
void setProperty(String key, boolean value);
void setProperty(String key, boolean value, boolean dflt);
void setProperty(String key, int value);
void setProperty(String key, int value, int dflt);
void setProperty(String name, long value);
void setProperty(String name, long value, long dflt);
/**
* Check if ENABLED property is present and true ; defaults to true
*
* @return true if element is enabled
*/
boolean isEnabled();
/**
* Set the enabled status of the test element
* @param enabled the status to set
*/
void setEnabled(boolean enabled);
/**
* Returns true or false whether the element is the running version.
*
* @return <code>true</code> if the element is the running version
*/
boolean isRunningVersion();
/**
* Test whether a given property is only a temporary resident of the
* TestElement
*
* @param property
* the property to be tested
* @return <code>true</code> if property is temporary
*/
boolean isTemporary(JMeterProperty property);
/**
* Indicate that the given property should be only a temporary property in
* the TestElement
*
* @param property
* void
*/
void setTemporary(JMeterProperty property);
/**
* Return a property as a boolean value.
*
* @param key
* the name of the property to get
* @return the value of the property
*/
boolean getPropertyAsBoolean(String key);
/**
* Return a property as a boolean value or a default value if no property
* could be found.
*
* @param key
* the name of the property to get
* @param defaultValue
* the default value to use
* @return the value of the property, or <code>defaultValue</code> if no
* property could be found
*/
boolean getPropertyAsBoolean(String key, boolean defaultValue);
/**
* Return a property as a long value.
*
* @param key
* the name of the property to get
* @return the value of the property
*/
long getPropertyAsLong(String key);
/**
* Return a property as a long value or a default value if no property
* could be found.
*
* @param key
* the name of the property to get
* @param defaultValue
* the default value to use
* @return the value of the property, or <code>defaultValue</code> if no
* property could be found
*/
long getPropertyAsLong(String key, long defaultValue);
/**
* Return a property as an int value.
*
* @param key
* the name of the property to get
* @return the value of the property
*/
int getPropertyAsInt(String key);
/**
* Return a property as an int value or a default value if no property
* could be found.
*
* @param key
* the name of the property to get
* @param defaultValue
* the default value to use
* @return the value of the property, or <code>defaultValue</code> if no
* property could be found
*/
int getPropertyAsInt(String key, int defaultValue);
/**
* Return a property as a float value.
*
* @param key
* the name of the property to get
* @return the value of the property
*/
float getPropertyAsFloat(String key);
/**
* Return a property as a double value.
*
* @param key
* the name of the property to get
* @return the value of the property
*/
double getPropertyAsDouble(String key);
/**
* Make the test element the running version, or make it no longer the
* running version. This tells the test element that it's current state must
* be retrievable by a call to recoverRunningVersion(). It is kind of like
* making the TestElement Read- Only, but not as strict. Changes can be made
* and the element can be modified, but the state of the element at the time
* of the call to setRunningVersion() must be recoverable.
*
* @param run
* flag whether this element should be the running version
*/
void setRunningVersion(boolean run);
/**
* Tells the test element to return to the state it was in when
* setRunningVersion(true) was called.
*/
void recoverRunningVersion();
/**
* Clear the TestElement of all data.
*/
void clear();
/**
* Return a property as a string value.
*
* @param key
* the name of the property to get
* @return the value of the property
*/
String getPropertyAsString(String key);
/**
* Return a property as an string value or a default value if no property
* could be found.
*
* @param key
* the name of the property to get
* @param defaultValue
* the default value to use
* @return the value of the property, or <code>defaultValue</code> if no
* property could be found
*/
String getPropertyAsString(String key, String defaultValue);
/**
* Sets and overwrites a property in the TestElement. This call will be
* ignored if the TestElement is currently a "running version".
*
* @param property
* the property to be set
*/
void setProperty(JMeterProperty property);
/**
* Given the name of the property, returns the appropriate property from
* JMeter. If it is null, a NullProperty object will be returned.
*
* @param propName
* the name of the property to get
* @return {@link JMeterProperty} stored under the name, or
* {@link NullProperty} if no property can be found
*/
JMeterProperty getProperty(String propName);
/**
* Get a Property Iterator for the TestElements properties.
*
* @return PropertyIterator
*/
PropertyIterator propertyIterator();
/**
* Remove property stored under the <code>key</code>
*
* @param key
* name of the property to be removed
*/
void removeProperty(String key);
// lifecycle methods
Object clone();
/**
* Convenient way to traverse a test element.
*
* @param traverser
* The traverser that is notified of the contained elements
*/
void traverse(TestElementTraverser traverser);
/**
* @return Returns the threadContext.
*/
JMeterContext getThreadContext();
/**
* @param threadContext
* The threadContext to set.
*/
void setThreadContext(JMeterContext threadContext);
/**
* @return Returns the threadName.
*/
String getThreadName();
/**
* @param threadName
* The threadName to set.
*/
void setThreadName(String threadName);
/**
* Called by Remove to determine if it is safe to remove the element. The
* element can either clean itself up, and return true, or the element can
* return false.
*
* @return true if safe to remove the element
*/
boolean canRemove();
/**
* Get the name of this test element
* @return name of this element
*/
String getName();
/**
* @param name
* of this element
*/
void setName(String name);
/**
* @return comment associated with this element
*/
String getComment();
/**
* Associates a comment with this element
*
* @param comment
* to be associated
*/
void setComment(String comment);
}