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 }