github.com/cloudfoundry/cli@v7.1.0+incompatible/cf/actors/services.go (about)

     1  package actors
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/cf/actors/brokerbuilder"
     5  	"code.cloudfoundry.org/cli/cf/actors/servicebuilder"
     6  	"code.cloudfoundry.org/cli/cf/api/organizations"
     7  	"code.cloudfoundry.org/cli/cf/models"
     8  )
     9  
    10  //go:generate counterfeiter . ServiceActor
    11  
    12  type ServiceActor interface {
    13  	FilterBrokers(brokerFlag string, serviceFlag string, orgFlag string) ([]models.ServiceBroker, error)
    14  }
    15  
    16  type ServiceHandler struct {
    17  	orgRepo        organizations.OrganizationRepository
    18  	brokerBuilder  brokerbuilder.BrokerBuilder
    19  	serviceBuilder servicebuilder.ServiceBuilder
    20  }
    21  
    22  func NewServiceHandler(org organizations.OrganizationRepository, brokerBuilder brokerbuilder.BrokerBuilder, serviceBuilder servicebuilder.ServiceBuilder) ServiceHandler {
    23  	return ServiceHandler{
    24  		orgRepo:        org,
    25  		brokerBuilder:  brokerBuilder,
    26  		serviceBuilder: serviceBuilder,
    27  	}
    28  }
    29  
    30  func (actor ServiceHandler) FilterBrokers(brokerFlag string, serviceFlag string, orgFlag string) ([]models.ServiceBroker, error) {
    31  	if orgFlag == "" {
    32  		return actor.getServiceBrokers(brokerFlag, serviceFlag)
    33  	}
    34  	_, err := actor.orgRepo.FindByName(orgFlag)
    35  	if err != nil {
    36  		return nil, err
    37  	}
    38  	return actor.buildBrokersVisibleFromOrg(brokerFlag, serviceFlag, orgFlag)
    39  }
    40  
    41  func (actor ServiceHandler) getServiceBrokers(brokerName string, serviceName string) ([]models.ServiceBroker, error) {
    42  	if serviceName != "" {
    43  		broker, err := actor.brokerBuilder.GetBrokerWithSpecifiedService(serviceName)
    44  		if err != nil {
    45  			return nil, err
    46  		}
    47  
    48  		if brokerName != "" {
    49  			if broker.Name != brokerName {
    50  				return nil, nil
    51  			}
    52  		}
    53  		return []models.ServiceBroker{broker}, nil
    54  	}
    55  
    56  	if brokerName != "" && serviceName == "" {
    57  		broker, err := actor.brokerBuilder.GetBrokerWithAllServices(brokerName)
    58  		if err != nil {
    59  			return nil, err
    60  		}
    61  		return []models.ServiceBroker{broker}, nil
    62  	}
    63  
    64  	return actor.brokerBuilder.GetAllServiceBrokers()
    65  }
    66  
    67  func (actor ServiceHandler) buildBrokersVisibleFromOrg(brokerFlag string, serviceFlag string, orgFlag string) ([]models.ServiceBroker, error) {
    68  	if serviceFlag != "" && brokerFlag != "" {
    69  		service, err := actor.serviceBuilder.GetServiceVisibleToOrg(serviceFlag, orgFlag)
    70  		if err != nil {
    71  			return nil, err
    72  		}
    73  		broker, err := actor.brokerBuilder.AttachSpecificBrokerToServices(brokerFlag, []models.ServiceOffering{service})
    74  		if err != nil {
    75  			return nil, err
    76  		}
    77  		return []models.ServiceBroker{broker}, nil
    78  	}
    79  
    80  	if serviceFlag != "" && brokerFlag == "" {
    81  		service, err := actor.serviceBuilder.GetServiceVisibleToOrg(serviceFlag, orgFlag)
    82  		if err != nil {
    83  			return nil, err
    84  		}
    85  		return actor.brokerBuilder.AttachBrokersToServices([]models.ServiceOffering{service})
    86  	}
    87  
    88  	if serviceFlag == "" && brokerFlag != "" {
    89  		services, err := actor.serviceBuilder.GetServicesVisibleToOrg(orgFlag)
    90  		if err != nil {
    91  			return nil, err
    92  		}
    93  		broker, err := actor.brokerBuilder.AttachSpecificBrokerToServices(brokerFlag, services)
    94  		if err != nil {
    95  			return nil, err
    96  		}
    97  		return []models.ServiceBroker{broker}, nil
    98  	}
    99  
   100  	if serviceFlag == "" && brokerFlag == "" {
   101  		services, err := actor.serviceBuilder.GetServicesVisibleToOrg(orgFlag)
   102  		if err != nil {
   103  			return nil, err
   104  		}
   105  		return actor.brokerBuilder.AttachBrokersToServices(services)
   106  	}
   107  
   108  	return nil, nil
   109  }