package com.griddynamics.jagger.invoker.scenario;
import com.griddynamics.jagger.invoker.v2.JHttpEndpoint;
import org.springframework.http.HttpHeaders;
import java.util.List;
import java.util.Map;
import static com.google.common.collect.Lists.newArrayList;
/**
* Global context for {@link JHttpUserScenario} which is used for storing global parameters: endpoints, headers, etc.
*
* @ingroup Main_Http_User_Scenario_group
*/
public class JHttpScenarioGlobalContext {
private String userName;
private String password;
private JHttpEndpoint globalEndpoint;
private HttpHeaders globalHeaders;
public JHttpScenarioGlobalContext copy() {
JHttpScenarioGlobalContext copy = new JHttpScenarioGlobalContext();
return copy.withBasicAuth(this.userName, this.password)
.withGlobalEndpoint(JHttpEndpoint.copyOf(this.globalEndpoint))
.withGlobalHeaders(CopyUtil.copyOf(this.globalHeaders));
}
/**
* Sets endpoint for all steps.
* Endpoint still can be overridden in {@link JHttpUserScenarioStep.Builder#withPreProcessFunction}
*
* @param globalEndpoint global endpoint to set
*/
public JHttpScenarioGlobalContext withGlobalEndpoint(JHttpEndpoint globalEndpoint) {
this.globalEndpoint = globalEndpoint;
return this;
}
/**
* Sets basic auth credentials for all steps.
*/
public JHttpScenarioGlobalContext withBasicAuth(String userName, String password) {
this.userName = userName;
this.password = password;
return this;
}
/**
* Sets headers for all steps.
*
* @param globalHeaders global headers to set
*/
public JHttpScenarioGlobalContext withGlobalHeaders(HttpHeaders globalHeaders) {
this.globalHeaders = globalHeaders;
return this;
}
/**
* Sets headers for all steps.
*
* @param globalHeaders global headers to set
*/
public JHttpScenarioGlobalContext withGlobalHeaders(Map<String, List<String>> globalHeaders) {
initHeadersIfNull();
this.globalHeaders.putAll(globalHeaders);
return this;
}
/**
* Sets header for all steps.
* Endpoint still can be overridden in {@link JHttpUserScenarioStep.Builder#withPreProcessFunction}
*/
public JHttpScenarioGlobalContext withGlobalHeader(String key, String value) {
initHeadersIfNull();
globalHeaders.put(key, newArrayList(value));
return this;
}
/**
* Sets cookies for all steps.
*
* @param cookies global cookies to set
*/
public JHttpScenarioGlobalContext withGlobalCookies(Map<String, String> cookies) {
initHeadersIfNull();
cookies.entrySet().forEach(entry -> this.globalHeaders.add("Cookie", entry.getKey() + "=" + entry.getValue()));
return this;
}
/**
* Sets cookie for all steps.
*/
public JHttpScenarioGlobalContext withGlobalCookie(String name, String value) {
initHeadersIfNull();
this.globalHeaders.add("Cookie", name + "=" + value);
return this;
}
private void initHeadersIfNull() {
if (this.globalHeaders == null)
this.globalHeaders = new HttpHeaders();
}
public JHttpEndpoint getGlobalEndpoint() {
return globalEndpoint;
}
public String getUserName() {
return userName;
}
public String getPassword() {
return password;
}
public HttpHeaders getGlobalHeaders() {
return globalHeaders;
}
public List<String> getGlobalCookies() {
return globalHeaders.get("Cookie");
}
}