github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/route/map_route.go (about) 1 package route 2 3 import ( 4 "github.com/cloudfoundry/cli/cf/api" 5 "github.com/cloudfoundry/cli/cf/command_registry" 6 "github.com/cloudfoundry/cli/cf/configuration/core_config" 7 . "github.com/cloudfoundry/cli/cf/i18n" 8 "github.com/cloudfoundry/cli/cf/requirements" 9 "github.com/cloudfoundry/cli/cf/terminal" 10 "github.com/cloudfoundry/cli/flags" 11 "github.com/cloudfoundry/cli/flags/flag" 12 ) 13 14 type MapRoute struct { 15 ui terminal.UI 16 config core_config.Reader 17 routeRepo api.RouteRepository 18 appReq requirements.ApplicationRequirement 19 domainReq requirements.DomainRequirement 20 routeCreator RouteCreator 21 } 22 23 func init() { 24 command_registry.Register(&MapRoute{}) 25 } 26 27 func (cmd *MapRoute) MetaData() command_registry.CommandMetadata { 28 fs := make(map[string]flags.FlagSet) 29 fs["n"] = &cliFlags.StringFlag{Name: "n", Usage: T("Hostname")} 30 31 return command_registry.CommandMetadata{ 32 Name: "map-route", 33 Description: T("Add a url route to an app"), 34 Usage: T("CF_NAME map-route APP_NAME DOMAIN [-n HOSTNAME]"), 35 Flags: fs, 36 } 37 } 38 39 func (cmd *MapRoute) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { 40 if len(fc.Args()) != 2 { 41 cmd.ui.Failed(T("Incorrect Usage. Requires APP and DOMAIN as arguments\n\n") + command_registry.Commands.CommandUsage("map-route")) 42 } 43 44 domainName := fc.Args()[1] 45 46 cmd.appReq = requirementsFactory.NewApplicationRequirement(fc.Args()[0]) 47 48 cmd.domainReq = requirementsFactory.NewDomainRequirement(domainName) 49 50 reqs = []requirements.Requirement{ 51 requirementsFactory.NewLoginRequirement(), 52 cmd.appReq, 53 cmd.domainReq, 54 } 55 return 56 } 57 58 func (cmd *MapRoute) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 59 cmd.ui = deps.Ui 60 cmd.config = deps.Config 61 cmd.routeRepo = deps.RepoLocator.GetRouteRepository() 62 63 //get create-route for dependency 64 createRoute := command_registry.Commands.FindCommand("create-route") 65 createRoute = createRoute.SetDependency(deps, false) 66 cmd.routeCreator = createRoute.(RouteCreator) 67 68 return cmd 69 } 70 71 func (cmd *MapRoute) Execute(c flags.FlagContext) { 72 hostName := c.String("n") 73 domain := cmd.domainReq.GetDomain() 74 app := cmd.appReq.GetApplication() 75 76 route, apiErr := cmd.routeCreator.CreateRoute(hostName, domain, cmd.config.SpaceFields()) 77 if apiErr != nil { 78 cmd.ui.Failed(T("Error resolving route:\n{{.Err}}", map[string]interface{}{"Err": apiErr.Error()})) 79 } 80 cmd.ui.Say(T("Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", 81 map[string]interface{}{ 82 "URL": terminal.EntityNameColor(route.URL()), 83 "AppName": terminal.EntityNameColor(app.Name), 84 "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), 85 "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), 86 "Username": terminal.EntityNameColor(cmd.config.Username())})) 87 88 apiErr = cmd.routeRepo.Bind(route.Guid, app.Guid) 89 if apiErr != nil { 90 cmd.ui.Failed(apiErr.Error()) 91 return 92 } 93 94 cmd.ui.Ok() 95 }