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  }