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  }