/*
* Copyright 2015 ThoughtWorks, Inc.
*
* Licensed 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 com.thoughtworks.go.config;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.thoughtworks.go.domain.BaseCollection;
import com.thoughtworks.go.domain.ConfigErrors;
import com.thoughtworks.go.security.GoCipher;
import com.thoughtworks.go.util.command.EnvironmentVariableContext;
/**
* @understands environment variables that are passed to a running job
*/
@ConfigTag("environmentvariables")
@ConfigCollection(EnvironmentVariableConfig.class)
public class EnvironmentVariablesConfig extends BaseCollection<EnvironmentVariableConfig> implements Serializable, ParamsAttributeAware, Validatable {
private final ConfigErrors configErrors = new ConfigErrors();
public EnvironmentVariablesConfig() {
}
public EnvironmentVariablesConfig(List<EnvironmentVariableConfig> elements) {
super(elements);
}
public EnvironmentVariablesConfig(EnvironmentVariableConfig[] elements) {
super(elements);
}
public void validate(ValidationContext validationContext) {
Map<String, EnvironmentVariableConfig> map = new HashMap<>();
for (EnvironmentVariableConfig config : this) {
config.validateName(map, validationContext);
}
}
public boolean validateTree(ValidationContext validationContext) {
validate(validationContext);
boolean isValid = errors().isEmpty();
for (EnvironmentVariableConfig config : this) {
isValid = config.validateTree(validationContext) && isValid;
}
return isValid;
}
public ConfigErrors errors() {
return configErrors;
}
public void addError(String fieldName, String message) {
configErrors.add(fieldName, message);
}
public void add(String name, String value) {
add(new EnvironmentVariableConfig(name.trim(), value));
}
public void addTo(EnvironmentVariableContext variableContext) {
for (EnvironmentVariableConfig variable : this) {
variable.addTo(variableContext);
}
}
public void addToIfExists(EnvironmentVariableContext variableContext) {
for (EnvironmentVariableConfig variable : this) {
variable.addToIfExists(variableContext);
}
}
public EnvironmentVariablesConfig overrideWith(EnvironmentVariablesConfig environmentVariablesConfig) {
EnvironmentVariablesConfig variablesConfig = new EnvironmentVariablesConfig();
variablesConfig.addAll(this);
for (EnvironmentVariableConfig environmentVariableConfig : environmentVariablesConfig) {
variablesConfig.removeIfExists(environmentVariableConfig.getName());
variablesConfig.add(environmentVariableConfig);
}
return variablesConfig;
}
public void removeIfExists(String name) {
EnvironmentVariableConfig configToRemove = null;
for (EnvironmentVariableConfig config : this) {
if (config.getName().equals(name)) {
configToRemove = config;
break;
}
}
if (configToRemove != null) {
this.remove(configToRemove);
}
}
public boolean hasVariable(String variableName) {
for (EnvironmentVariableConfig variableConfig : this) {
if (variableConfig.hasName(variableName)) {
return true;
}
}
return false;
}
public void setConfigAttributes(Object attributes) {
this.clear();
if (attributes != null) {
for (Map attributeMap : (List<Map>) attributes) {
EnvironmentVariableConfig environmentVariableConfig = new EnvironmentVariableConfig(new GoCipher());
try {
environmentVariableConfig.setConfigAttributes(attributeMap);
this.add(environmentVariableConfig);
} catch (IllegalArgumentException e) {
continue;
}
}
}
}
public EnvironmentVariablesConfig getSecureVariables() {
EnvironmentVariablesConfig result = new EnvironmentVariablesConfig();
for (EnvironmentVariableConfig environmentVariableConfig : this) {
if (environmentVariableConfig.isSecure()) {
result.add(environmentVariableConfig);
}
}
return result;
}
public EnvironmentVariablesConfig getPlainTextVariables() {
EnvironmentVariablesConfig result = new EnvironmentVariablesConfig();
for (EnvironmentVariableConfig environmentVariableConfig : this) {
if (environmentVariableConfig.isPlain()) {
result.add(environmentVariableConfig);
}
}
return result;
}
}