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

     1  package broker_builder
     2  
     3  import (
     4  	"github.com/cloudfoundry/cli/cf/actors/service_builder"
     5  	"github.com/cloudfoundry/cli/cf/api"
     6  	"github.com/cloudfoundry/cli/cf/models"
     7  )
     8  
     9  type BrokerBuilder interface {
    10  	AttachBrokersToServices([]models.ServiceOffering) ([]models.ServiceBroker, error)
    11  	AttachSpecificBrokerToServices(string, []models.ServiceOffering) (models.ServiceBroker, error)
    12  	GetAllServiceBrokers() ([]models.ServiceBroker, error)
    13  	GetBrokerWithAllServices(brokerName string) (models.ServiceBroker, error)
    14  	GetBrokerWithSpecifiedService(serviceName string) (models.ServiceBroker, error)
    15  }
    16  
    17  type Builder struct {
    18  	brokerRepo     api.ServiceBrokerRepository
    19  	serviceBuilder service_builder.ServiceBuilder
    20  }
    21  
    22  func NewBuilder(broker api.ServiceBrokerRepository, serviceBuilder service_builder.ServiceBuilder) Builder {
    23  	return Builder{
    24  		brokerRepo:     broker,
    25  		serviceBuilder: serviceBuilder,
    26  	}
    27  }
    28  
    29  func (builder Builder) AttachBrokersToServices(services []models.ServiceOffering) ([]models.ServiceBroker, error) {
    30  	var brokers []models.ServiceBroker
    31  	brokersMap := make(map[string]models.ServiceBroker)
    32  
    33  	for _, service := range services {
    34  		if service.BrokerGuid == "" {
    35  			continue
    36  		}
    37  
    38  		if broker, ok := brokersMap[service.BrokerGuid]; ok {
    39  			broker.Services = append(broker.Services, service)
    40  			brokersMap[broker.Guid] = broker
    41  		} else {
    42  			broker, err := builder.brokerRepo.FindByGuid(service.BrokerGuid)
    43  			if err != nil {
    44  				return nil, err
    45  			}
    46  			broker.Services = append(broker.Services, service)
    47  			brokersMap[service.BrokerGuid] = broker
    48  		}
    49  	}
    50  
    51  	for _, broker := range brokersMap {
    52  		brokers = append(brokers, broker)
    53  	}
    54  
    55  	return brokers, nil
    56  }
    57  
    58  func (builder Builder) AttachSpecificBrokerToServices(brokerName string, services []models.ServiceOffering) (models.ServiceBroker, error) {
    59  	broker, err := builder.brokerRepo.FindByName(brokerName)
    60  	if err != nil {
    61  		return models.ServiceBroker{}, err
    62  	}
    63  
    64  	for _, service := range services {
    65  		if service.BrokerGuid == broker.Guid {
    66  			broker.Services = append(broker.Services, service)
    67  		}
    68  	}
    69  
    70  	return broker, nil
    71  }
    72  
    73  func (builder Builder) GetAllServiceBrokers() ([]models.ServiceBroker, error) {
    74  	brokers := []models.ServiceBroker{}
    75  	var err error
    76  	var services models.ServiceOfferings
    77  
    78  	err = builder.brokerRepo.ListServiceBrokers(func(broker models.ServiceBroker) bool {
    79  		brokers = append(brokers, broker)
    80  		return true
    81  	})
    82  
    83  	for index, broker := range brokers {
    84  		services, err = builder.serviceBuilder.GetServicesForBroker(broker.Guid)
    85  		if err != nil {
    86  			return nil, err
    87  		}
    88  
    89  		brokers[index].Services = services
    90  	}
    91  	return brokers, err
    92  }
    93  
    94  func (builder Builder) GetBrokerWithAllServices(brokerName string) (models.ServiceBroker, error) {
    95  	broker, err := builder.brokerRepo.FindByName(brokerName)
    96  	if err != nil {
    97  		return models.ServiceBroker{}, err
    98  	}
    99  	services, err := builder.serviceBuilder.GetServicesForBroker(broker.Guid)
   100  	if err != nil {
   101  		return models.ServiceBroker{}, err
   102  	}
   103  	broker.Services = services
   104  
   105  	return broker, nil
   106  }
   107  
   108  func (builder Builder) GetBrokerWithSpecifiedService(serviceName string) (models.ServiceBroker, error) {
   109  	service, err := builder.serviceBuilder.GetServiceByNameWithPlansWithOrgNames(serviceName)
   110  	if err != nil {
   111  		return models.ServiceBroker{}, err
   112  	}
   113  	brokers, err := builder.AttachBrokersToServices([]models.ServiceOffering{service})
   114  	if err != nil || len(brokers) == 0 {
   115  		return models.ServiceBroker{}, err
   116  	}
   117  	return brokers[0], err
   118  }