github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/commands/domain/domains.go (about) 1 package domain 2 3 import ( 4 "github.com/cloudfoundry/cli/cf/api" 5 "github.com/cloudfoundry/cli/cf/command_metadata" 6 "github.com/cloudfoundry/cli/cf/configuration/core_config" 7 . "github.com/cloudfoundry/cli/cf/i18n" 8 "github.com/cloudfoundry/cli/cf/models" 9 "github.com/cloudfoundry/cli/cf/requirements" 10 "github.com/cloudfoundry/cli/cf/terminal" 11 "github.com/codegangsta/cli" 12 ) 13 14 type ListDomains struct { 15 ui terminal.UI 16 config core_config.Reader 17 orgReq requirements.TargetedOrgRequirement 18 domainRepo api.DomainRepository 19 } 20 21 func NewListDomains(ui terminal.UI, config core_config.Reader, domainRepo api.DomainRepository) (cmd *ListDomains) { 22 cmd = new(ListDomains) 23 cmd.ui = ui 24 cmd.config = config 25 cmd.domainRepo = domainRepo 26 return 27 } 28 29 func (cmd *ListDomains) Metadata() command_metadata.CommandMetadata { 30 return command_metadata.CommandMetadata{ 31 Name: "domains", 32 Description: T("List domains in the target org"), 33 Usage: "CF_NAME domains", 34 } 35 } 36 37 func (cmd *ListDomains) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) { 38 if len(c.Args()) > 0 { 39 cmd.ui.FailWithUsage(c) 40 } 41 42 cmd.orgReq = requirementsFactory.NewTargetedOrgRequirement() 43 reqs = []requirements.Requirement{ 44 requirementsFactory.NewLoginRequirement(), 45 cmd.orgReq, 46 } 47 return 48 } 49 50 func (cmd *ListDomains) Run(c *cli.Context) { 51 org := cmd.orgReq.GetOrganizationFields() 52 53 cmd.ui.Say(T("Getting domains in org {{.OrgName}} as {{.Username}}...", 54 map[string]interface{}{ 55 "OrgName": terminal.EntityNameColor(org.Name), 56 "Username": terminal.EntityNameColor(cmd.config.Username())})) 57 58 domains := cmd.fetchAllDomains(org.Guid) 59 cmd.printDomainsTable(domains) 60 61 if len(domains) == 0 { 62 cmd.ui.Say(T("No domains found")) 63 } 64 } 65 66 func (cmd *ListDomains) fetchAllDomains(orgGuid string) (domains []models.DomainFields) { 67 apiErr := cmd.domainRepo.ListDomainsForOrg(orgGuid, func(domain models.DomainFields) bool { 68 domains = append(domains, domain) 69 return true 70 }) 71 if apiErr != nil { 72 cmd.ui.Failed(T("Failed fetching domains.\n{{.ApiErr}}", map[string]interface{}{"ApiErr": apiErr.Error()})) 73 } 74 return 75 } 76 77 func (cmd *ListDomains) printDomainsTable(domains []models.DomainFields) { 78 table := cmd.ui.Table([]string{T("name"), T("status")}) 79 80 for _, domain := range domains { 81 if domain.Shared { 82 table.Add(domain.Name, T("shared")) 83 } 84 } 85 86 for _, domain := range domains { 87 if !domain.Shared { 88 table.Add(domain.Name, T("owned")) 89 } 90 } 91 table.Print() 92 }