package tw.com.parameters;
import com.amazonaws.services.cloudformation.model.Parameter;
import com.amazonaws.services.cloudformation.model.TemplateParameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tw.com.entity.ProjectAndEnv;
import tw.com.exceptions.CannotFindVpcException;
import tw.com.exceptions.InvalidStackParameterException;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
public abstract class PopulatesParameters {
private static final Logger logger = LoggerFactory.getLogger(PopulatesParameters.class);
public static final String PARAMETER_ENV = "env";
public static final String PARAMETER_VPC = "vpc";
public static final String PARAMETER_BUILD_NUMBER = "build";
public static final String PARAM_PREFIX = "::";
public static final String CFN_TAG_ON_OUTPUT = PARAM_PREFIX+"CFN_TAG";
public static final String ENV_TAG = PARAM_PREFIX+"ENV";
public static final String CFN_TAG_ZONE = PARAM_PREFIX+"CFN_ZONE_";
abstract void addParameters(Collection<Parameter> result,
List<TemplateParameter> declaredParameters, ProjectAndEnv projAndEnv, ProvidesZones providesZones) throws CannotFindVpcException, IOException, InvalidStackParameterException;
protected void addParameterTo(Collection<Parameter> parameters, List<TemplateParameter> declared, String parameterName, String parameterValue) {
boolean isDeclared = false;
for(TemplateParameter declaration : declared) {
isDeclared = (declaration.getParameterKey().equals(parameterName));
if (isDeclared==true) break;
}
if (!isDeclared) {
logger.info(String.format("Not populating parameter %s as it is not declared in the json file", parameterName));
} else {
logger.info(String.format("Setting %s parameter to %s", parameterName, parameterValue));
Parameter parameter = new Parameter();
parameter.setParameterKey(parameterName);
parameter.setParameterValue(parameterValue);
parameters.add(parameter);
}
}
}