github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/cf/commandregistry/dependency.go (about) 1 package commandregistry 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "time" 8 9 "path/filepath" 10 11 "github.com/liamawhite/cli-with-i18n/cf/actors" 12 "github.com/liamawhite/cli-with-i18n/cf/actors/brokerbuilder" 13 "github.com/liamawhite/cli-with-i18n/cf/actors/planbuilder" 14 "github.com/liamawhite/cli-with-i18n/cf/actors/pluginrepo" 15 "github.com/liamawhite/cli-with-i18n/cf/actors/servicebuilder" 16 "github.com/liamawhite/cli-with-i18n/cf/api" 17 "github.com/liamawhite/cli-with-i18n/cf/appfiles" 18 "github.com/liamawhite/cli-with-i18n/cf/configuration" 19 "github.com/liamawhite/cli-with-i18n/cf/configuration/confighelpers" 20 "github.com/liamawhite/cli-with-i18n/cf/configuration/coreconfig" 21 "github.com/liamawhite/cli-with-i18n/cf/configuration/pluginconfig" 22 "github.com/liamawhite/cli-with-i18n/cf/manifest" 23 "github.com/liamawhite/cli-with-i18n/cf/net" 24 "github.com/liamawhite/cli-with-i18n/cf/terminal" 25 "github.com/liamawhite/cli-with-i18n/cf/trace" 26 "github.com/liamawhite/cli-with-i18n/plugin/models" 27 "github.com/liamawhite/cli-with-i18n/util" 28 "github.com/liamawhite/cli-with-i18n/util/words/generator" 29 ) 30 31 type Dependency struct { 32 UI terminal.UI 33 Config coreconfig.Repository 34 RepoLocator api.RepositoryLocator 35 PluginConfig pluginconfig.PluginConfiguration 36 ManifestRepo manifest.Repository 37 AppManifest manifest.App 38 Gateways map[string]net.Gateway 39 TeePrinter *terminal.TeePrinter 40 PluginRepo pluginrepo.PluginRepo 41 PluginModels *PluginModels 42 ServiceBuilder servicebuilder.ServiceBuilder 43 BrokerBuilder brokerbuilder.Builder 44 PlanBuilder planbuilder.PlanBuilder 45 ServiceHandler actors.ServiceActor 46 ServicePlanHandler actors.ServicePlanActor 47 WordGenerator generator.WordGenerator 48 AppZipper appfiles.Zipper 49 AppFiles appfiles.AppFiles 50 PushActor actors.PushActor 51 RouteActor actors.RouteActor 52 ChecksumUtil util.Sha1Checksum 53 WildcardDependency interface{} //use for injecting fakes 54 Logger trace.Printer 55 } 56 57 type PluginModels struct { 58 Application *plugin_models.GetAppModel 59 AppsSummary *[]plugin_models.GetAppsModel 60 Organizations *[]plugin_models.GetOrgs_Model 61 Organization *plugin_models.GetOrg_Model 62 Spaces *[]plugin_models.GetSpaces_Model 63 Space *plugin_models.GetSpace_Model 64 OrgUsers *[]plugin_models.GetOrgUsers_Model 65 SpaceUsers *[]plugin_models.GetSpaceUsers_Model 66 Services *[]plugin_models.GetServices_Model 67 Service *plugin_models.GetService_Model 68 OauthToken *plugin_models.GetOauthToken_Model 69 } 70 71 func NewDependency(writer io.Writer, logger trace.Printer, envDialTimeout string) Dependency { 72 deps := Dependency{} 73 deps.TeePrinter = terminal.NewTeePrinter(writer) 74 deps.UI = terminal.NewUI(os.Stdin, writer, deps.TeePrinter, logger) 75 76 errorHandler := func(err error) { 77 if err != nil { 78 deps.UI.Failed(fmt.Sprintf("Config error: %s", err)) 79 } 80 } 81 82 configPath, err := confighelpers.DefaultFilePath() 83 if err != nil { 84 errorHandler(err) 85 } 86 deps.Config = coreconfig.NewRepositoryFromFilepath(configPath, errorHandler) 87 88 deps.ManifestRepo = manifest.NewDiskRepository() 89 deps.AppManifest = manifest.NewGenerator() 90 91 pluginPath := filepath.Join(confighelpers.PluginRepoDir(), ".cf", "plugins") 92 deps.PluginConfig = pluginconfig.NewPluginConfig( 93 errorHandler, 94 configuration.NewDiskPersistor(filepath.Join(pluginPath, "config.json")), 95 pluginPath, 96 ) 97 98 terminal.UserAskedForColors = deps.Config.ColorEnabled() 99 terminal.InitColorSupport() 100 101 deps.Gateways = map[string]net.Gateway{ 102 "cloud-controller": net.NewCloudControllerGateway(deps.Config, time.Now, deps.UI, logger, envDialTimeout), 103 "uaa": net.NewUAAGateway(deps.Config, deps.UI, logger, envDialTimeout), 104 "routing-api": net.NewRoutingAPIGateway(deps.Config, time.Now, deps.UI, logger, envDialTimeout), 105 } 106 deps.RepoLocator = api.NewRepositoryLocator(deps.Config, deps.Gateways, logger, envDialTimeout) 107 108 deps.PluginModels = &PluginModels{Application: nil} 109 110 deps.PlanBuilder = planbuilder.NewBuilder( 111 deps.RepoLocator.GetServicePlanRepository(), 112 deps.RepoLocator.GetServicePlanVisibilityRepository(), 113 deps.RepoLocator.GetOrganizationRepository(), 114 ) 115 116 deps.ServiceBuilder = servicebuilder.NewBuilder( 117 deps.RepoLocator.GetServiceRepository(), 118 deps.PlanBuilder, 119 ) 120 121 deps.BrokerBuilder = brokerbuilder.NewBuilder( 122 deps.RepoLocator.GetServiceBrokerRepository(), 123 deps.ServiceBuilder, 124 ) 125 126 deps.PluginRepo = pluginrepo.NewPluginRepo() 127 128 deps.ServiceHandler = actors.NewServiceHandler( 129 deps.RepoLocator.GetOrganizationRepository(), 130 deps.BrokerBuilder, 131 deps.ServiceBuilder, 132 ) 133 134 deps.ServicePlanHandler = actors.NewServicePlanHandler( 135 deps.RepoLocator.GetServicePlanRepository(), 136 deps.RepoLocator.GetServicePlanVisibilityRepository(), 137 deps.RepoLocator.GetOrganizationRepository(), 138 deps.PlanBuilder, 139 deps.ServiceBuilder, 140 ) 141 142 deps.WordGenerator = generator.NewWordGenerator() 143 144 deps.AppZipper = appfiles.ApplicationZipper{} 145 deps.AppFiles = appfiles.ApplicationFiles{} 146 147 deps.RouteActor = actors.NewRouteActor(deps.UI, deps.RepoLocator.GetRouteRepository(), deps.RepoLocator.GetDomainRepository()) 148 deps.PushActor = actors.NewPushActor(deps.RepoLocator.GetApplicationBitsRepository(), deps.AppZipper, deps.AppFiles, deps.RouteActor) 149 150 deps.ChecksumUtil = util.NewSha1Checksum("") 151 152 deps.Logger = logger 153 154 return deps 155 }