package core.aws.plan.vpc; import core.aws.plan.Planner; import core.aws.task.vpc.CreateNATGatewayTask; import core.aws.task.vpc.CreateSubnetTask; import core.aws.task.vpc.DeleteNATGatewayTask; import core.aws.task.vpc.DeleteSubnetTask; import core.aws.workflow.Tasks; /** * @author neo */ public class NATGatewayTaskPlanner extends Planner { public NATGatewayTaskPlanner(Tasks tasks) { super(tasks); } @Override public void plan() { linkCreateTasks(); linkDeleteTasks(); } private void linkDeleteTasks() { for (DeleteNATGatewayTask natTask : all(DeleteNATGatewayTask.class)) { all(DeleteSubnetTask.class).stream() .filter(subnetTask -> subnetTask.resource.remoteSubnets.stream() .anyMatch(subnet -> natTask.resource.remoteNATGateway.getSubnetId().equals(subnet.getSubnetId()))) .findAny().ifPresent(task -> task.dependsOn(natTask)); } } private void linkCreateTasks() { for (CreateNATGatewayTask natTask : all(CreateNATGatewayTask.class)) { find(CreateSubnetTask.class, natTask.resource.subnet) .ifPresent(natTask::dependsOn); } } }