github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+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_metadata" 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/codegangsta/cli" 13 ) 14 15 type DeleteApp struct { 16 ui terminal.UI 17 config core_config.Reader 18 appRepo applications.ApplicationRepository 19 routeRepo api.RouteRepository 20 appReq requirements.ApplicationRequirement 21 } 22 23 func NewDeleteApp(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository, routeRepo api.RouteRepository) (cmd *DeleteApp) { 24 cmd = new(DeleteApp) 25 cmd.ui = ui 26 cmd.config = config 27 cmd.appRepo = appRepo 28 cmd.routeRepo = routeRepo 29 return 30 } 31 32 func (cmd *DeleteApp) Metadata() command_metadata.CommandMetadata { 33 return command_metadata.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: []cli.Flag{ 39 cli.BoolFlag{Name: "f", Usage: T("Force deletion without confirmation")}, 40 cli.BoolFlag{Name: "r", Usage: T("Also delete any mapped routes")}, 41 }, 42 } 43 } 44 45 func (cmd *DeleteApp) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { 46 if len(c.Args()) != 1 { 47 cmd.ui.FailWithUsage(c) 48 } 49 50 reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement()} 51 return 52 } 53 54 func (cmd *DeleteApp) Run(c *cli.Context) { 55 appName := c.Args()[0] 56 57 if !c.Bool("f") { 58 response := cmd.ui.ConfirmDelete(T("app"), appName) 59 if !response { 60 return 61 } 62 } 63 64 cmd.ui.Say(T("Deleting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", 65 map[string]interface{}{ 66 "AppName": terminal.EntityNameColor(appName), 67 "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), 68 "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), 69 "Username": terminal.EntityNameColor(cmd.config.Username())})) 70 71 app, apiErr := cmd.appRepo.Read(appName) 72 73 switch apiErr.(type) { 74 case nil: // no error 75 case *errors.ModelNotFoundError: 76 cmd.ui.Ok() 77 cmd.ui.Warn(T("App {{.AppName}} does not exist.", map[string]interface{}{"AppName": appName})) 78 return 79 default: 80 cmd.ui.Failed(apiErr.Error()) 81 } 82 83 if c.Bool("r") { 84 for _, route := range app.Routes { 85 apiErr = cmd.routeRepo.Delete(route.Guid) 86 if apiErr != nil { 87 cmd.ui.Failed(apiErr.Error()) 88 } 89 } 90 } 91 92 apiErr = cmd.appRepo.Delete(app.Guid) 93 if apiErr != nil { 94 cmd.ui.Failed(apiErr.Error()) 95 } 96 97 cmd.ui.Ok() 98 }