/*
* 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.property;
import org.apache.jmeter.testelement.TestElement;
/**
* For JMeterProperties that hold multiple properties within, provides a simple
* interface for retrieving a property iterator for the sub values.
*
*/
public abstract class MultiProperty extends AbstractProperty implements Iterable<JMeterProperty> {
private static final long serialVersionUID = 240L;
public MultiProperty() {
super();
}
public MultiProperty(String name) {
super(name);
}
/**
* Get the property iterator to iterate through the sub-values of this
* JMeterProperty.
*
* @return an iterator for the sub-values of this property
*/
@Override
public abstract PropertyIterator iterator();
/**
* Add a property to the collection.
*
* @param prop the {@link JMeterProperty} to add
*/
public abstract void addProperty(JMeterProperty prop);
/**
* Clear away all values in the property.
*/
public abstract void clear();
@Override
public void setRunningVersion(boolean running) {
super.setRunningVersion(running);
for (JMeterProperty jMeterProperty : this) {
jMeterProperty.setRunningVersion(running);
}
}
protected void recoverRunningVersionOfSubElements(TestElement owner) {
PropertyIterator iter = iterator();
while (iter.hasNext()) {
JMeterProperty prop = iter.next();
if (owner.isTemporary(prop)) {
iter.remove();
} else {
prop.recoverRunningVersion(owner);
}
}
}
@Override
public void mergeIn(JMeterProperty prop) {
if (prop.getObjectValue() == getObjectValue()) {
return;
}
log.debug("merging in " + prop.getClass());
if (prop instanceof MultiProperty) {
for (JMeterProperty item : (MultiProperty) prop) {
addProperty(item);
}
} else {
addProperty(prop);
}
}
}