/* * 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.threads; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.jmeter.engine.StandardJMeterEngine; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.samplers.Sampler; /** * Holds context for a thread. * Generated by JMeterContextService. * * The class is not thread-safe - it is only intended for use within a single thread. */ public class JMeterContext { private JMeterVariables variables; private SampleResult previousResult; private Sampler currentSampler; private Sampler previousSampler; private boolean samplingStarted; private StandardJMeterEngine engine; private JMeterThread thread; private AbstractThreadGroup threadGroup; private int threadNum; private boolean restartNextLoop = false; private ConcurrentHashMap<String, Object> samplerContext = new ConcurrentHashMap<>(5); JMeterContext() { clear0(); } public void clear() { clear0(); } private void clear0() { variables = null; previousResult = null; currentSampler = null; previousSampler = null; samplingStarted = false; threadNum = 0; thread = null; samplerContext.clear(); } /** * Gives access to the JMeter variables for the current thread. * * @return a pointer to the JMeter variables. */ public JMeterVariables getVariables() { return variables; } public void setVariables(JMeterVariables vars) { this.variables = vars; } public SampleResult getPreviousResult() { return previousResult; } public void setPreviousResult(SampleResult result) { this.previousResult = result; } public Sampler getCurrentSampler() { return currentSampler; } public void setCurrentSampler(Sampler sampler) { this.previousSampler = currentSampler; this.currentSampler = sampler; } /** * Returns the previousSampler. * * @return Sampler */ public Sampler getPreviousSampler() { return previousSampler; } /** * Returns the threadNum. * * @return int */ public int getThreadNum() { return threadNum; } /** * Sets the threadNum. * * @param threadNum * the threadNum to set */ public void setThreadNum(int threadNum) { this.threadNum = threadNum; } public JMeterThread getThread() { return this.thread; } public void setThread(JMeterThread thread) { this.thread = thread; } public AbstractThreadGroup getThreadGroup() { return this.threadGroup; } public void setThreadGroup(AbstractThreadGroup threadgrp) { this.threadGroup = threadgrp; } public StandardJMeterEngine getEngine() { return engine; } public void setEngine(StandardJMeterEngine engine) { this.engine = engine; } public boolean isSamplingStarted() { return samplingStarted; } public void setSamplingStarted(boolean b) { samplingStarted = b; } /** * if set to <code>true</code> a restart of the loop will occurs * * @param restartNextLoop * flag whether restart will occur */ public void setRestartNextLoop(boolean restartNextLoop) { this.restartNextLoop = restartNextLoop; } /** * a restart of the loop was required ? * @return the restartNextLoop */ public boolean isRestartNextLoop() { return restartNextLoop; } /** * Clean cached data after sample */ public void cleanAfterSample() { if(previousResult != null) { previousResult.cleanAfterSample(); } samplerContext.clear(); } /** * Sampler context is cleaned up as soon as Post-Processor have ended * @return Context to use within PostProcessors to cache data */ public Map<String, Object> getSamplerContext() { return samplerContext; } }