github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/commands/application/stop.go (about) 1 package application 2 3 import ( 4 "errors" 5 6 . "github.com/cloudfoundry/cli/cf/i18n" 7 8 "github.com/cloudfoundry/cli/cf/api/applications" 9 "github.com/cloudfoundry/cli/cf/command_metadata" 10 "github.com/cloudfoundry/cli/cf/configuration/core_config" 11 "github.com/cloudfoundry/cli/cf/models" 12 "github.com/cloudfoundry/cli/cf/requirements" 13 "github.com/cloudfoundry/cli/cf/terminal" 14 "github.com/codegangsta/cli" 15 ) 16 17 type ApplicationStopper interface { 18 ApplicationStop(app models.Application, orgName string, spaceName string) (updatedApp models.Application, err error) 19 } 20 21 type Stop struct { 22 ui terminal.UI 23 config core_config.Reader 24 appRepo applications.ApplicationRepository 25 appReq requirements.ApplicationRequirement 26 } 27 28 func NewStop(ui terminal.UI, config core_config.Reader, appRepo applications.ApplicationRepository) (cmd *Stop) { 29 cmd = new(Stop) 30 cmd.ui = ui 31 cmd.config = config 32 cmd.appRepo = appRepo 33 34 return 35 } 36 37 func (cmd *Stop) Metadata() command_metadata.CommandMetadata { 38 return command_metadata.CommandMetadata{ 39 Name: "stop", 40 ShortName: "sp", 41 Description: T("Stop an app"), 42 Usage: T("CF_NAME stop APP_NAME"), 43 } 44 } 45 46 func (cmd *Stop) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { 47 if len(c.Args()) != 1 { 48 cmd.ui.FailWithUsage(c) 49 } 50 51 cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) 52 53 reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement(), cmd.appReq} 54 return 55 } 56 57 func (cmd *Stop) ApplicationStop(app models.Application, orgName, spaceName string) (updatedApp models.Application, err error) { 58 if app.State == "stopped" { 59 updatedApp = app 60 return 61 } 62 63 cmd.ui.Say(T("Stopping app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", 64 map[string]interface{}{ 65 "AppName": terminal.EntityNameColor(app.Name), 66 "OrgName": terminal.EntityNameColor(orgName), 67 "SpaceName": terminal.EntityNameColor(spaceName), 68 "CurrentUser": terminal.EntityNameColor(cmd.config.Username())})) 69 70 state := "STOPPED" 71 updatedApp, apiErr := cmd.appRepo.Update(app.Guid, models.AppParams{State: &state}) 72 if apiErr != nil { 73 err = errors.New(apiErr.Error()) 74 cmd.ui.Failed(apiErr.Error()) 75 return 76 } 77 78 cmd.ui.Ok() 79 return 80 } 81 82 func (cmd *Stop) Run(c *cli.Context) { 83 app := cmd.appReq.GetApplication() 84 if app.State == "stopped" { 85 cmd.ui.Say(terminal.WarningColor(T("App ") + app.Name + T(" is already stopped"))) 86 } else { 87 cmd.ApplicationStop(app, cmd.config.OrganizationFields().Name, cmd.config.SpaceFields().Name) 88 } 89 }