github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/commands/target.go (about) 1 package commands 2 3 import ( 4 "github.com/cloudfoundry/cli/cf/api/organizations" 5 "github.com/cloudfoundry/cli/cf/api/spaces" 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/flag_helpers" 10 . "github.com/cloudfoundry/cli/cf/i18n" 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 Target struct { 18 ui terminal.UI 19 config core_config.ReadWriter 20 orgRepo organizations.OrganizationRepository 21 spaceRepo spaces.SpaceRepository 22 } 23 24 func NewTarget(ui terminal.UI, 25 config core_config.ReadWriter, 26 orgRepo organizations.OrganizationRepository, 27 spaceRepo spaces.SpaceRepository) (cmd Target) { 28 29 cmd.ui = ui 30 cmd.config = config 31 cmd.orgRepo = orgRepo 32 cmd.spaceRepo = spaceRepo 33 34 return 35 } 36 37 func (cmd Target) Metadata() command_metadata.CommandMetadata { 38 return command_metadata.CommandMetadata{ 39 Name: "target", 40 ShortName: "t", 41 Description: T("Set or view the targeted org or space"), 42 Usage: T("CF_NAME target [-o ORG] [-s SPACE]"), 43 Flags: []cli.Flag{ 44 flag_helpers.NewStringFlag("o", T("organization")), 45 flag_helpers.NewStringFlag("s", T("space")), 46 }, 47 } 48 } 49 50 func (cmd Target) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { 51 if len(c.Args()) != 0 { 52 err = errors.New(T("incorrect usage")) 53 cmd.ui.FailWithUsage(c) 54 return 55 } 56 57 reqs = append(reqs, requirementsFactory.NewApiEndpointRequirement()) 58 if c.String("o") != "" || c.String("s") != "" { 59 reqs = append(reqs, requirementsFactory.NewLoginRequirement()) 60 } 61 62 return 63 } 64 65 func (cmd Target) Run(c *cli.Context) { 66 orgName := c.String("o") 67 spaceName := c.String("s") 68 69 if orgName != "" { 70 err := cmd.setOrganization(orgName) 71 if err != nil { 72 cmd.ui.Failed(err.Error()) 73 } 74 } 75 76 if spaceName != "" { 77 err := cmd.setSpace(spaceName) 78 if err != nil { 79 cmd.ui.Failed(err.Error()) 80 } 81 } 82 83 cmd.ui.ShowConfiguration(cmd.config) 84 if !cmd.config.IsLoggedIn() { 85 cmd.ui.PanicQuietly() 86 } 87 return 88 } 89 90 func (cmd Target) setOrganization(orgName string) error { 91 // setting an org necessarily invalidates any space you had previously targeted 92 cmd.config.SetOrganizationFields(models.OrganizationFields{}) 93 cmd.config.SetSpaceFields(models.SpaceFields{}) 94 95 org, apiErr := cmd.orgRepo.FindByName(orgName) 96 if apiErr != nil { 97 return errors.NewWithFmt(T("Could not target org.\n{{.ApiErr}}", 98 map[string]interface{}{"ApiErr": apiErr.Error()})) 99 } 100 101 cmd.config.SetOrganizationFields(org.OrganizationFields) 102 return nil 103 } 104 105 func (cmd Target) setSpace(spaceName string) error { 106 cmd.config.SetSpaceFields(models.SpaceFields{}) 107 108 if !cmd.config.HasOrganization() { 109 return errors.New(T("An org must be targeted before targeting a space")) 110 } 111 112 space, apiErr := cmd.spaceRepo.FindByName(spaceName) 113 if apiErr != nil { 114 return errors.NewWithFmt(T("Unable to access space {{.SpaceName}}.\n{{.ApiErr}}", 115 map[string]interface{}{"SpaceName": spaceName, "ApiErr": apiErr.Error()})) 116 } 117 118 cmd.config.SetSpaceFields(space.SpaceFields) 119 return nil 120 }