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 }