github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/cf/requirements/factory.go (about)

     1  package requirements
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/cf/api"
     5  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
     6  	"github.com/blang/semver"
     7  )
     8  
     9  //go:generate counterfeiter . Factory
    10  
    11  type Factory interface {
    12  	NewApplicationRequirement(name string) ApplicationRequirement
    13  	NewDEAApplicationRequirement(name string) DEAApplicationRequirement
    14  	NewServiceInstanceRequirement(name string) ServiceInstanceRequirement
    15  	NewLoginRequirement() Requirement
    16  	NewSpaceRequirement(name string) SpaceRequirement
    17  	NewTargetedSpaceRequirement() Requirement
    18  	NewTargetedOrgRequirement() TargetedOrgRequirement
    19  	NewOrganizationRequirement(name string) OrganizationRequirement
    20  	NewDomainRequirement(name string) DomainRequirement
    21  	NewUserRequirement(username string, wantGUID bool) UserRequirement
    22  	NewBuildpackRequirement(buildpack, stack string) BuildpackRequirement
    23  	NewAPIEndpointRequirement() Requirement
    24  	NewMinAPIVersionRequirement(commandName string, requiredVersion semver.Version) Requirement
    25  	NewMaxAPIVersionRequirement(commandName string, maximumVersion semver.Version) Requirement
    26  	NewUnsupportedLegacyFlagRequirement(flags ...string) Requirement
    27  	NewUsageRequirement(Usable, string, func() bool) Requirement
    28  	NewNumberArguments([]string, ...string) Requirement
    29  }
    30  
    31  type apiRequirementFactory struct {
    32  	config      coreconfig.ReadWriter
    33  	repoLocator api.RepositoryLocator
    34  }
    35  
    36  func NewFactory(config coreconfig.ReadWriter, repoLocator api.RepositoryLocator) (factory apiRequirementFactory) {
    37  	return apiRequirementFactory{config, repoLocator}
    38  }
    39  
    40  func (f apiRequirementFactory) NewApplicationRequirement(name string) ApplicationRequirement {
    41  	return NewApplicationRequirement(
    42  		name,
    43  		f.repoLocator.GetApplicationRepository(),
    44  	)
    45  }
    46  
    47  func (f apiRequirementFactory) NewDEAApplicationRequirement(name string) DEAApplicationRequirement {
    48  	return NewDEAApplicationRequirement(
    49  		name,
    50  		f.repoLocator.GetApplicationRepository(),
    51  	)
    52  }
    53  
    54  func (f apiRequirementFactory) NewServiceInstanceRequirement(name string) ServiceInstanceRequirement {
    55  	return NewServiceInstanceRequirement(
    56  		name,
    57  		f.repoLocator.GetServiceRepository(),
    58  	)
    59  }
    60  
    61  func (f apiRequirementFactory) NewLoginRequirement() Requirement {
    62  	return NewLoginRequirement(
    63  		f.config,
    64  	)
    65  }
    66  
    67  func (f apiRequirementFactory) NewSpaceRequirement(name string) SpaceRequirement {
    68  	return NewSpaceRequirement(
    69  		name,
    70  		f.repoLocator.GetSpaceRepository(),
    71  	)
    72  }
    73  
    74  func (f apiRequirementFactory) NewTargetedSpaceRequirement() Requirement {
    75  	return NewTargetedSpaceRequirement(
    76  		f.config,
    77  	)
    78  }
    79  
    80  func (f apiRequirementFactory) NewTargetedOrgRequirement() TargetedOrgRequirement {
    81  	return NewTargetedOrgRequirement(
    82  		f.config,
    83  	)
    84  }
    85  
    86  func (f apiRequirementFactory) NewOrganizationRequirement(name string) OrganizationRequirement {
    87  	return NewOrganizationRequirement(
    88  		name,
    89  		f.repoLocator.GetOrganizationRepository(),
    90  	)
    91  }
    92  
    93  func (f apiRequirementFactory) NewDomainRequirement(name string) DomainRequirement {
    94  	return NewDomainRequirement(
    95  		name,
    96  		f.config,
    97  		f.repoLocator.GetDomainRepository(),
    98  	)
    99  }
   100  
   101  func (f apiRequirementFactory) NewUserRequirement(username string, wantGUID bool) UserRequirement {
   102  	return NewUserRequirement(
   103  		username,
   104  		f.repoLocator.GetUserRepository(),
   105  		wantGUID,
   106  	)
   107  }
   108  
   109  func (f apiRequirementFactory) NewBuildpackRequirement(buildpack, stack string) BuildpackRequirement {
   110  	return NewBuildpackRequirement(
   111  		buildpack,
   112  		stack,
   113  		f.repoLocator.GetBuildpackRepository(),
   114  	)
   115  }
   116  
   117  func (f apiRequirementFactory) NewAPIEndpointRequirement() Requirement {
   118  	return NewAPIEndpointRequirement(
   119  		f.config,
   120  	)
   121  }
   122  
   123  func (f apiRequirementFactory) NewMinAPIVersionRequirement(commandName string, requiredVersion semver.Version) Requirement {
   124  	r := NewMinAPIVersionRequirement(
   125  		f.config,
   126  		commandName,
   127  		requiredVersion,
   128  	)
   129  
   130  	refresher := coreconfig.APIConfigRefresher{
   131  		Endpoint:     f.config.APIEndpoint(),
   132  		EndpointRepo: f.repoLocator.GetEndpointRepository(),
   133  		Config:       f.config,
   134  	}
   135  
   136  	return NewConfigRefreshingRequirement(r, refresher)
   137  }
   138  
   139  func (f apiRequirementFactory) NewMaxAPIVersionRequirement(commandName string, maximumVersion semver.Version) Requirement {
   140  	return NewMaxAPIVersionRequirement(
   141  		f.config,
   142  		commandName,
   143  		maximumVersion,
   144  	)
   145  }
   146  
   147  func (f apiRequirementFactory) NewUnsupportedLegacyFlagRequirement(flags ...string) Requirement {
   148  	return NewUnsupportedLegacyFlagRequirement(flags)
   149  }
   150  
   151  func (f apiRequirementFactory) NewUsageRequirement(cmd Usable, errorMessage string, pred func() bool) Requirement {
   152  	return NewUsageRequirement(cmd, errorMessage, pred)
   153  }
   154  
   155  func (f apiRequirementFactory) NewNumberArguments(passedArgs []string, expectedArgs ...string) Requirement {
   156  	return NewNumberArguments(passedArgs, expectedArgs)
   157  }