github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/route/delete_route.go (about)

     1  package route
     2  
     3  import (
     4  	"github.com/cloudfoundry/cli/cf/api"
     5  	"github.com/cloudfoundry/cli/cf/command_registry"
     6  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
     7  	"github.com/cloudfoundry/cli/cf/errors"
     8  	. "github.com/cloudfoundry/cli/cf/i18n"
     9  	"github.com/cloudfoundry/cli/cf/requirements"
    10  	"github.com/cloudfoundry/cli/cf/terminal"
    11  	"github.com/cloudfoundry/cli/flags"
    12  	"github.com/cloudfoundry/cli/flags/flag"
    13  )
    14  
    15  type DeleteRoute struct {
    16  	ui        terminal.UI
    17  	config    core_config.Reader
    18  	routeRepo api.RouteRepository
    19  	domainReq requirements.DomainRequirement
    20  }
    21  
    22  func init() {
    23  	command_registry.Register(&DeleteRoute{})
    24  }
    25  
    26  func (cmd *DeleteRoute) MetaData() command_registry.CommandMetadata {
    27  	fs := make(map[string]flags.FlagSet)
    28  	fs["f"] = &cliFlags.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}
    29  	fs["n"] = &cliFlags.StringFlag{Name: "n", Usage: T("Hostname")}
    30  
    31  	return command_registry.CommandMetadata{
    32  		Name:        "delete-route",
    33  		Description: T("Delete a route"),
    34  		Usage:       T("CF_NAME delete-route DOMAIN [-n HOSTNAME] [-f]"),
    35  		Flags:       fs,
    36  	}
    37  }
    38  
    39  func (cmd *DeleteRoute) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) {
    40  	if len(fc.Args()) != 1 {
    41  		cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("delete-route"))
    42  	}
    43  
    44  	cmd.domainReq = requirementsFactory.NewDomainRequirement(fc.Args()[0])
    45  
    46  	reqs = []requirements.Requirement{
    47  		requirementsFactory.NewLoginRequirement(),
    48  		cmd.domainReq,
    49  	}
    50  	return
    51  }
    52  
    53  func (cmd *DeleteRoute) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command {
    54  	cmd.ui = deps.Ui
    55  	cmd.config = deps.Config
    56  	cmd.routeRepo = deps.RepoLocator.GetRouteRepository()
    57  	return cmd
    58  }
    59  
    60  func (cmd *DeleteRoute) Execute(c flags.FlagContext) {
    61  	host := c.String("n")
    62  	domainName := c.Args()[0]
    63  
    64  	url := domainName
    65  	if host != "" {
    66  		url = host + "." + domainName
    67  	}
    68  	if !c.Bool("f") {
    69  		if !cmd.ui.ConfirmDelete("route", url) {
    70  			return
    71  		}
    72  	}
    73  
    74  	cmd.ui.Say(T("Deleting route {{.URL}}...", map[string]interface{}{"URL": terminal.EntityNameColor(url)}))
    75  
    76  	domain := cmd.domainReq.GetDomain()
    77  	route, apiErr := cmd.routeRepo.FindByHostAndDomain(host, domain)
    78  
    79  	switch apiErr.(type) {
    80  	case nil:
    81  	case *errors.ModelNotFoundError:
    82  		cmd.ui.Warn(T("Unable to delete, route '{{.URL}}' does not exist.",
    83  			map[string]interface{}{"URL": url}))
    84  		return
    85  	default:
    86  		cmd.ui.Failed(apiErr.Error())
    87  		return
    88  	}
    89  
    90  	apiErr = cmd.routeRepo.Delete(route.Guid)
    91  	if apiErr != nil {
    92  		cmd.ui.Failed(apiErr.Error())
    93  		return
    94  	}
    95  
    96  	cmd.ui.Ok()
    97  }