-
Notifications
You must be signed in to change notification settings - Fork 0
/
dependency.go
141 lines (120 loc) · 4.67 KB
/
dependency.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package command_registry
import (
"fmt"
"os"
"time"
"github.com/cloudfoundry/cli/cf/actors"
"github.com/cloudfoundry/cli/cf/actors/broker_builder"
"github.com/cloudfoundry/cli/cf/actors/plan_builder"
"github.com/cloudfoundry/cli/cf/actors/plugin_repo"
"github.com/cloudfoundry/cli/cf/actors/service_builder"
"github.com/cloudfoundry/cli/cf/api"
"github.com/cloudfoundry/cli/cf/app_files"
"github.com/cloudfoundry/cli/cf/configuration/config_helpers"
"github.com/cloudfoundry/cli/cf/configuration/core_config"
"github.com/cloudfoundry/cli/cf/configuration/plugin_config"
"github.com/cloudfoundry/cli/cf/i18n/detection"
"github.com/cloudfoundry/cli/cf/manifest"
"github.com/cloudfoundry/cli/cf/net"
"github.com/cloudfoundry/cli/cf/terminal"
"github.com/cloudfoundry/cli/cf/trace"
"github.com/cloudfoundry/cli/plugin/models"
"github.com/cloudfoundry/cli/utils"
"github.com/cloudfoundry/cli/words/generator"
)
type Dependency struct {
Ui terminal.UI
Config core_config.Repository
RepoLocator api.RepositoryLocator
Detector detection.Detector
PluginConfig plugin_config.PluginConfiguration
ManifestRepo manifest.ManifestRepository
AppManifest manifest.AppManifest
Gateways map[string]net.Gateway
TeePrinter *terminal.TeePrinter
PluginRepo plugin_repo.PluginRepo
PluginModels *pluginModels
ServiceBuilder service_builder.ServiceBuilder
BrokerBuilder broker_builder.Builder
PlanBuilder plan_builder.PlanBuilder
ServiceHandler actors.ServiceActor
ServicePlanHandler actors.ServicePlanActor
WordGenerator generator.WordGenerator
AppZipper app_files.Zipper
AppFiles app_files.AppFiles
PushActor actors.PushActor
ChecksumUtil utils.Sha1Checksum
}
type pluginModels struct {
Application *plugin_models.GetAppModel
AppsSummary *[]plugin_models.GetAppsModel
Organizations *[]plugin_models.GetOrgs_Model
Organization *plugin_models.GetOrg_Model
Spaces *[]plugin_models.GetSpaces_Model
Space *plugin_models.GetSpace_Model
OrgUsers *[]plugin_models.GetOrgUsers_Model
SpaceUsers *[]plugin_models.GetSpaceUsers_Model
Services *[]plugin_models.GetServices_Model
Service *plugin_models.GetService_Model
}
func NewDependency() Dependency {
deps := Dependency{}
deps.TeePrinter = terminal.NewTeePrinter()
deps.Ui = terminal.NewUI(os.Stdin, deps.TeePrinter)
deps.ManifestRepo = manifest.NewManifestDiskRepository()
deps.AppManifest = manifest.NewGenerator()
errorHandler := func(err error) {
if err != nil {
deps.Ui.Failed(fmt.Sprintf("Config error: %s", err))
}
}
deps.Config = core_config.NewRepositoryFromFilepath(config_helpers.DefaultFilePath(), errorHandler)
deps.PluginConfig = plugin_config.NewPluginConfig(errorHandler)
deps.Detector = &detection.JibberJabberDetector{}
terminal.UserAskedForColors = deps.Config.ColorEnabled()
terminal.InitColorSupport()
if os.Getenv("CF_TRACE") != "" {
trace.Logger = trace.NewLogger(os.Getenv("CF_TRACE"))
} else {
trace.Logger = trace.NewLogger(deps.Config.Trace())
}
deps.Gateways = map[string]net.Gateway{
"auth": net.NewUAAGateway(deps.Config, deps.Ui),
"cloud-controller": net.NewCloudControllerGateway(deps.Config, time.Now, deps.Ui),
"uaa": net.NewUAAGateway(deps.Config, deps.Ui),
}
deps.RepoLocator = api.NewRepositoryLocator(deps.Config, deps.Gateways)
deps.PluginModels = &pluginModels{Application: nil}
deps.PlanBuilder = plan_builder.NewBuilder(
deps.RepoLocator.GetServicePlanRepository(),
deps.RepoLocator.GetServicePlanVisibilityRepository(),
deps.RepoLocator.GetOrganizationRepository(),
)
deps.ServiceBuilder = service_builder.NewBuilder(
deps.RepoLocator.GetServiceRepository(),
deps.PlanBuilder,
)
deps.BrokerBuilder = broker_builder.NewBuilder(
deps.RepoLocator.GetServiceBrokerRepository(),
deps.ServiceBuilder,
)
deps.PluginRepo = plugin_repo.NewPluginRepo()
deps.ServiceHandler = actors.NewServiceHandler(
deps.RepoLocator.GetOrganizationRepository(),
deps.BrokerBuilder,
deps.ServiceBuilder,
)
deps.ServicePlanHandler = actors.NewServicePlanHandler(
deps.RepoLocator.GetServicePlanRepository(),
deps.RepoLocator.GetServicePlanVisibilityRepository(),
deps.RepoLocator.GetOrganizationRepository(),
deps.PlanBuilder,
deps.ServiceBuilder,
)
deps.WordGenerator = generator.NewWordGenerator()
deps.AppZipper = app_files.ApplicationZipper{}
deps.AppFiles = app_files.ApplicationFiles{}
deps.PushActor = actors.NewPushActor(deps.RepoLocator.GetApplicationBitsRepository(), deps.AppZipper, deps.AppFiles)
deps.ChecksumUtil = utils.NewSha1Checksum("")
return deps
}