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  }