package core.aws.env;
import core.aws.util.Asserts;
import core.aws.util.Lists;
import java.util.List;
import java.util.Map;
/**
* @author neo
*/
public class ParamValidator {
public void validate(Goal goal, Map<Param, List<String>> params) {
if (goal == Goal.SYNC || goal == Goal.DEL) {
validateParams(params, Lists.newArrayList(Param.ENV_PATH, Param.DRY_RUN), null);
} else if (goal == Goal.DESC) {
validateParams(params, Lists.newArrayList(Param.ENV_PATH), null);
} else if (goal == Goal.BAKE) {
validateParams(params, Lists.newArrayList(Param.ENV_PATH, Param.RESOURCE_ID, Param.RESUME_BAKE), Lists.newArrayList(Param.RESOURCE_ID));
} else if (goal == Goal.DEPLOY || goal == Goal.STOP || goal == Goal.START) {
validateParams(params, Lists.newArrayList(Param.ENV_PATH, Param.RESOURCE_ID), null);
} else if (goal == Goal.EXEC) {
validateParams(params, Lists.newArrayList(Param.ENV_PATH, Param.RESOURCE_ID, Param.INSTANCE_INDEX, Param.EXECUTE_COMMAND, Param.EXECUTE_SCRIPT), Lists.newArrayList(Param.RESOURCE_ID, Param.EXECUTE_COMMAND));
} else if (goal == Goal.UPLOAD) {
validateParams(params, Lists.newArrayList(Param.ENV_PATH, Param.RESOURCE_ID, Param.PACKAGE_DIR, Param.INSTANCE_INDEX), Lists.newArrayList(Param.PACKAGE_DIR, Param.RESOURCE_ID));
} else if (goal == Goal.PROVISION) {
validateParams(params, Lists.newArrayList(Param.ENV_PATH, Param.RESOURCE_ID, Param.PACKAGE_DIR, Param.INSTANCE_INDEX, Param.PROVISION_PLAYBOOK), Lists.newArrayList(Param.RESOURCE_ID));
} else if (goal == Goal.SSH) {
validateParams(params, Lists.newArrayList(Param.ENV_PATH, Param.RESOURCE_ID, Param.INSTANCE_INDEX, Param.SSH_TUNNEL_RESOURCE_ID), Lists.newArrayList(Param.RESOURCE_ID));
} else {
Asserts.fail("unknown goal, goal={}", goal);
}
}
private void validateParams(Map<Param, List<String>> params, List<Param> allowedParams, List<Param> requiredParams) {
boolean allParamAllowed = params.keySet().stream().allMatch(allowedParams::contains);
Asserts.isTrue(allParamAllowed, "not allowed param found, allowed={}, input={}", allowedParams, params);
if (requiredParams != null) {
boolean allRequiredParamPresent = requiredParams.stream().allMatch(params::containsKey);
Asserts.isTrue(allRequiredParamPresent, "required param is missing, required={}, input={}", requiredParams, params);
}
}
}