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  }