github.com/jasonkeene/cli@v6.14.1-0.20160816203908-ca5715166dfb+incompatible/cf/requirements/factory.go (about)

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