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

     1  package application
     2  
     3  import (
     4  	"github.com/cloudfoundry/cli/cf/api"
     5  	"github.com/cloudfoundry/cli/cf/api/applications"
     6  	"github.com/cloudfoundry/cli/cf/command_registry"
     7  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
     8  	"github.com/cloudfoundry/cli/cf/errors"
     9  	. "github.com/cloudfoundry/cli/cf/i18n"
    10  	"github.com/cloudfoundry/cli/cf/requirements"
    11  	"github.com/cloudfoundry/cli/cf/terminal"
    12  	"github.com/cloudfoundry/cli/flags"
    13  	"github.com/cloudfoundry/cli/flags/flag"
    14  )
    15  
    16  type DeleteApp struct {
    17  	ui        terminal.UI
    18  	config    core_config.Reader
    19  	appRepo   applications.ApplicationRepository
    20  	routeRepo api.RouteRepository
    21  	appReq    requirements.ApplicationRequirement
    22  }
    23  
    24  func init() {
    25  	command_registry.Register(&DeleteApp{})
    26  }
    27  
    28  func (cmd *DeleteApp) MetaData() command_registry.CommandMetadata {
    29  	fs := make(map[string]flags.FlagSet)
    30  	fs["f"] = &cliFlags.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}
    31  	fs["r"] = &cliFlags.BoolFlag{Name: "r", Usage: T("Also delete any mapped routes")}
    32  
    33  	return command_registry.CommandMetadata{
    34  		Name:        "delete",
    35  		ShortName:   "d",
    36  		Description: T("Delete an app"),
    37  		Usage:       T("CF_NAME delete APP_NAME [-f -r]"),
    38  		Flags:       fs,
    39  	}
    40  }
    41  
    42  func (cmd *DeleteApp) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) {
    43  	if len(fc.Args()) != 1 {
    44  		cmd.ui.Failed(T("Incorrect Usage. Requires app name as argument\n\n") + command_registry.Commands.CommandUsage("delete"))
    45  	}
    46  
    47  	reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement(),
    48  		requirementsFactory.NewTargetedSpaceRequirement()}
    49  	return
    50  }
    51  
    52  func (cmd *DeleteApp) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command {
    53  	cmd.ui = deps.Ui
    54  	cmd.config = deps.Config
    55  	cmd.appRepo = deps.RepoLocator.GetApplicationRepository()
    56  	cmd.routeRepo = deps.RepoLocator.GetRouteRepository()
    57  	return cmd
    58  }
    59  
    60  func (cmd *DeleteApp) Execute(c flags.FlagContext) {
    61  	appName := c.Args()[0]
    62  
    63  	if !c.Bool("f") {
    64  		response := cmd.ui.ConfirmDelete(T("app"), appName)
    65  		if !response {
    66  			return
    67  		}
    68  	}
    69  
    70  	cmd.ui.Say(T("Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...",
    71  		map[string]interface{}{
    72  			"AppName":   terminal.EntityNameColor(appName),
    73  			"OrgName":   terminal.EntityNameColor(cmd.config.OrganizationFields().Name),
    74  			"SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name),
    75  			"Username":  terminal.EntityNameColor(cmd.config.Username())}))
    76  
    77  	app, apiErr := cmd.appRepo.Read(appName)
    78  
    79  	switch apiErr.(type) {
    80  	case nil: // no error
    81  	case *errors.ModelNotFoundError:
    82  		cmd.ui.Ok()
    83  		cmd.ui.Warn(T("App {{.AppName}} does not exist.", map[string]interface{}{"AppName": appName}))
    84  		return
    85  	default:
    86  		cmd.ui.Failed(apiErr.Error())
    87  	}
    88  
    89  	if c.Bool("r") {
    90  		for _, route := range app.Routes {
    91  			apiErr = cmd.routeRepo.Delete(route.Guid)
    92  			if apiErr != nil {
    93  				cmd.ui.Failed(apiErr.Error())
    94  			}
    95  		}
    96  	}
    97  
    98  	apiErr = cmd.appRepo.Delete(app.Guid)
    99  	if apiErr != nil {
   100  		cmd.ui.Failed(apiErr.Error())
   101  	}
   102  
   103  	cmd.ui.Ok()
   104  }