github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/api/quotas/quotas.go (about)

     1  package quotas
     2  
     3  import (
     4  	"fmt"
     5  	"net/url"
     6  	"strings"
     7  
     8  	"github.com/cloudfoundry/cli/cf/api/resources"
     9  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
    10  	"github.com/cloudfoundry/cli/cf/errors"
    11  	"github.com/cloudfoundry/cli/cf/models"
    12  	"github.com/cloudfoundry/cli/cf/net"
    13  )
    14  
    15  type QuotaRepository interface {
    16  	FindAll() (quotas []models.QuotaFields, apiErr error)
    17  	FindByName(name string) (quota models.QuotaFields, apiErr error)
    18  
    19  	AssignQuotaToOrg(orgGuid, quotaGuid string) error
    20  
    21  	// CRUD ahoy
    22  	Create(quota models.QuotaFields) error
    23  	Update(quota models.QuotaFields) error
    24  	Delete(quotaGuid string) error
    25  }
    26  
    27  type CloudControllerQuotaRepository struct {
    28  	config  core_config.Reader
    29  	gateway net.Gateway
    30  }
    31  
    32  func NewCloudControllerQuotaRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerQuotaRepository) {
    33  	repo.config = config
    34  	repo.gateway = gateway
    35  	return
    36  }
    37  
    38  func (repo CloudControllerQuotaRepository) findAllWithPath(path string) ([]models.QuotaFields, error) {
    39  	var quotas []models.QuotaFields
    40  	apiErr := repo.gateway.ListPaginatedResources(
    41  		repo.config.ApiEndpoint(),
    42  		path,
    43  		resources.QuotaResource{},
    44  		func(resource interface{}) bool {
    45  			if qr, ok := resource.(resources.QuotaResource); ok {
    46  				quotas = append(quotas, qr.ToFields())
    47  			}
    48  			return true
    49  		})
    50  	return quotas, apiErr
    51  }
    52  
    53  func (repo CloudControllerQuotaRepository) FindAll() (quotas []models.QuotaFields, apiErr error) {
    54  	return repo.findAllWithPath("/v2/quota_definitions")
    55  }
    56  
    57  func (repo CloudControllerQuotaRepository) FindByName(name string) (quota models.QuotaFields, apiErr error) {
    58  	path := fmt.Sprintf("/v2/quota_definitions?q=%s", url.QueryEscape("name:"+name))
    59  	quotas, apiErr := repo.findAllWithPath(path)
    60  	if apiErr != nil {
    61  		return
    62  	}
    63  
    64  	if len(quotas) == 0 {
    65  		apiErr = errors.NewModelNotFoundError("Quota", name)
    66  		return
    67  	}
    68  
    69  	quota = quotas[0]
    70  	return
    71  }
    72  
    73  func (repo CloudControllerQuotaRepository) Create(quota models.QuotaFields) error {
    74  	return repo.gateway.CreateResourceFromStruct(repo.config.ApiEndpoint(), "/v2/quota_definitions", quota)
    75  }
    76  
    77  func (repo CloudControllerQuotaRepository) Update(quota models.QuotaFields) error {
    78  	path := fmt.Sprintf("/v2/quota_definitions/%s", quota.Guid)
    79  	return repo.gateway.UpdateResourceFromStruct(repo.config.ApiEndpoint(), path, quota)
    80  }
    81  
    82  func (repo CloudControllerQuotaRepository) AssignQuotaToOrg(orgGuid, quotaGuid string) (apiErr error) {
    83  	path := fmt.Sprintf("/v2/organizations/%s", orgGuid)
    84  	data := fmt.Sprintf(`{"quota_definition_guid":"%s"}`, quotaGuid)
    85  	return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, strings.NewReader(data))
    86  }
    87  
    88  func (repo CloudControllerQuotaRepository) Delete(quotaGuid string) (apiErr error) {
    89  	path := fmt.Sprintf("/v2/quota_definitions/%s", quotaGuid)
    90  	return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path)
    91  }