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 }