package tw.com.commandline.actions; import com.amazonaws.services.cloudformation.model.Parameter; import org.apache.commons.cli.MissingArgumentException; import tw.com.AwsFacade; import tw.com.FacadeFactory; import tw.com.commandline.CommandLineException; import tw.com.entity.ProjectAndEnv; import tw.com.exceptions.CfnAssistException; import tw.com.providers.ProvidesCurrentIp; import java.io.IOException; import java.util.Collection; public class WhitelistAction extends SharedAction { private static final int INDEX_OF_PORT_ARG = 1; @SuppressWarnings("static-access") public WhitelistAction() { createOptionWithArgs("whitelist", "Whitelist current ip (i.e. add to the security group) for ELB tagged with type tag, supply tag & port", 2); } @Override public void invoke(FacadeFactory factory, ProjectAndEnv projectAndEnv, Collection<Parameter> cfnParams, Collection<Parameter> artifacts, String... argument) throws IOException, InterruptedException, CfnAssistException, MissingArgumentException { AwsFacade facade = factory.createFacade(); ProvidesCurrentIp hasCurrentIp = factory.getCurrentIpProvider(); Integer port = Integer.parseInt(argument[INDEX_OF_PORT_ARG]); facade.whitelistCurrentIpForPortToElb(projectAndEnv, argument[0], hasCurrentIp, port); } @Override public void validate(ProjectAndEnv projectAndEnv, Collection<Parameter> cfnParams, Collection<Parameter> artifacts, String... argumentForAction) throws CommandLineException { guardForProjectAndEnv(projectAndEnv); try { Integer.parseInt(argumentForAction[INDEX_OF_PORT_ARG]); } catch (NumberFormatException exception) { throw new CommandLineException(exception.getLocalizedMessage()); } } @Override public boolean usesProject() { return true; } @Override public boolean usesComment() { return false; } @Override public boolean usesSNS() { return false; } }