github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/plugin/rpc/call_command_registry.go (about)

     1  package rpc
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/cloudfoundry/cli/cf/command_registry"
     7  	"github.com/cloudfoundry/cli/cf/requirements"
     8  	"github.com/cloudfoundry/cli/flags"
     9  )
    10  
    11  type NonCodegangstaRunner interface {
    12  	Command([]string, command_registry.Dependency, bool) error
    13  }
    14  
    15  type nonCodegangstaRunner struct{}
    16  
    17  func NewNonCodegangstaRunner() NonCodegangstaRunner {
    18  	return &nonCodegangstaRunner{}
    19  }
    20  
    21  func (c *nonCodegangstaRunner) Command(args []string, deps command_registry.Dependency, pluginApiCall bool) error {
    22  	var err error
    23  
    24  	cmdRegistry := command_registry.Commands
    25  
    26  	if cmdRegistry.CommandExists(args[0]) {
    27  		fc := flags.NewFlagContext(cmdRegistry.FindCommand(args[0]).MetaData().Flags)
    28  		err = fc.Parse(args[1:]...)
    29  		if err != nil {
    30  			return err
    31  		}
    32  
    33  		cfCmd := cmdRegistry.FindCommand(args[0])
    34  		cfCmd = cfCmd.SetDependency(deps, pluginApiCall)
    35  
    36  		reqs, err := cfCmd.Requirements(requirements.NewFactory(deps.Ui, deps.Config, deps.RepoLocator), fc)
    37  		if err != nil {
    38  			return err
    39  		}
    40  
    41  		for _, r := range reqs {
    42  			if !r.Execute() {
    43  				return errors.New("Error in requirement")
    44  			}
    45  		}
    46  
    47  		cfCmd.Execute(fc)
    48  	}
    49  
    50  	return nil
    51  }