github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/commands/application/files.go (about)

     1  package application
     2  
     3  import (
     4  	"github.com/cloudfoundry/cli/cf/api/app_files"
     5  	"github.com/cloudfoundry/cli/cf/command_metadata"
     6  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
     7  	"github.com/cloudfoundry/cli/cf/flag_helpers"
     8  	. "github.com/cloudfoundry/cli/cf/i18n"
     9  	"github.com/cloudfoundry/cli/cf/requirements"
    10  	"github.com/cloudfoundry/cli/cf/terminal"
    11  	"github.com/codegangsta/cli"
    12  )
    13  
    14  type Files struct {
    15  	ui           terminal.UI
    16  	config       core_config.Reader
    17  	appFilesRepo app_files.AppFilesRepository
    18  	appReq       requirements.ApplicationRequirement
    19  }
    20  
    21  func NewFiles(ui terminal.UI, config core_config.Reader, appFilesRepo app_files.AppFilesRepository) (cmd *Files) {
    22  	cmd = new(Files)
    23  	cmd.ui = ui
    24  	cmd.config = config
    25  	cmd.appFilesRepo = appFilesRepo
    26  	return
    27  }
    28  
    29  func (cmd *Files) Metadata() command_metadata.CommandMetadata {
    30  	return command_metadata.CommandMetadata{
    31  		Name:        "files",
    32  		ShortName:   "f",
    33  		Description: T("Print out a list of files in a directory or the contents of a specific file"),
    34  		Usage:       T("CF_NAME files APP_NAME [PATH] [-i INSTANCE]"),
    35  		Flags: []cli.Flag{
    36  			flag_helpers.NewIntFlag("i", T("Instance")),
    37  		},
    38  	}
    39  }
    40  
    41  func (cmd *Files) GetRequirements(requirementsFactory requirements.Factory, c *cli.Context) (reqs []requirements.Requirement, err error) {
    42  	if len(c.Args()) < 1 {
    43  		cmd.ui.FailWithUsage(c)
    44  	}
    45  
    46  	cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0])
    47  
    48  	reqs = []requirements.Requirement{
    49  		requirementsFactory.NewLoginRequirement(),
    50  		requirementsFactory.NewTargetedSpaceRequirement(),
    51  		cmd.appReq,
    52  	}
    53  	return
    54  }
    55  
    56  func (cmd *Files) Run(c *cli.Context) {
    57  	app := cmd.appReq.GetApplication()
    58  
    59  	var instance int
    60  	if c.IsSet("i") {
    61  		instance = c.Int("i")
    62  		if instance < 0 {
    63  			cmd.ui.Failed(T("Invalid instance: {{.Instance}}\nInstance must be a positive integer",
    64  				map[string]interface{}{
    65  					"Instance": instance,
    66  				}))
    67  		}
    68  		if instance >= app.InstanceCount {
    69  			cmd.ui.Failed(T("Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}",
    70  				map[string]interface{}{
    71  					"Instance":      instance,
    72  					"InstanceCount": app.InstanceCount,
    73  				}))
    74  		}
    75  	}
    76  
    77  	cmd.ui.Say(T("Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...",
    78  		map[string]interface{}{
    79  			"AppName":   terminal.EntityNameColor(app.Name),
    80  			"OrgName":   terminal.EntityNameColor(cmd.config.OrganizationFields().Name),
    81  			"SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name),
    82  			"Username":  terminal.EntityNameColor(cmd.config.Username())}))
    83  
    84  	path := "/"
    85  	if len(c.Args()) > 1 {
    86  		path = c.Args()[1]
    87  	}
    88  
    89  	list, apiErr := cmd.appFilesRepo.ListFiles(app.Guid, instance, path)
    90  	if apiErr != nil {
    91  		cmd.ui.Failed(apiErr.Error())
    92  		return
    93  	}
    94  
    95  	cmd.ui.Ok()
    96  	cmd.ui.Say("")
    97  
    98  	if list == "" {
    99  		cmd.ui.Say("No files found")
   100  	} else {
   101  		cmd.ui.Say("%s", list)
   102  	}
   103  }