github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/route/create_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/models" 9 "github.com/cloudfoundry/cli/cf/requirements" 10 "github.com/cloudfoundry/cli/cf/terminal" 11 "github.com/cloudfoundry/cli/flags" 12 "github.com/cloudfoundry/cli/flags/flag" 13 ) 14 15 type RouteCreator interface { 16 CreateRoute(hostName string, domain models.DomainFields, space models.SpaceFields) (route models.Route, apiErr error) 17 } 18 19 type CreateRoute struct { 20 ui terminal.UI 21 config core_config.Reader 22 routeRepo api.RouteRepository 23 spaceReq requirements.SpaceRequirement 24 domainReq requirements.DomainRequirement 25 } 26 27 func init() { 28 command_registry.Register(&CreateRoute{}) 29 } 30 31 func (cmd *CreateRoute) MetaData() command_registry.CommandMetadata { 32 fs := make(map[string]flags.FlagSet) 33 fs["n"] = &cliFlags.StringFlag{Name: "n", Usage: T("Hostname")} 34 35 return command_registry.CommandMetadata{ 36 Name: "create-route", 37 Description: T("Create a url route in a space for later use"), 38 Usage: T("CF_NAME create-route SPACE DOMAIN [-n HOSTNAME]"), 39 Flags: fs, 40 } 41 } 42 43 func (cmd *CreateRoute) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { 44 if len(fc.Args()) != 2 { 45 cmd.ui.Failed(T("Incorrect Usage. Requires SPACE and DOMAIN as arguments\n\n") + command_registry.Commands.CommandUsage("create-route")) 46 } 47 48 domainName := fc.Args()[1] 49 50 cmd.spaceReq = requirementsFactory.NewSpaceRequirement(fc.Args()[0]) 51 cmd.domainReq = requirementsFactory.NewDomainRequirement(domainName) 52 53 reqs = []requirements.Requirement{ 54 requirementsFactory.NewLoginRequirement(), 55 requirementsFactory.NewTargetedOrgRequirement(), 56 cmd.spaceReq, 57 cmd.domainReq, 58 } 59 return 60 } 61 62 func (cmd *CreateRoute) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 63 cmd.ui = deps.Ui 64 cmd.config = deps.Config 65 cmd.routeRepo = deps.RepoLocator.GetRouteRepository() 66 return cmd 67 } 68 69 func (cmd *CreateRoute) Execute(c flags.FlagContext) { 70 hostName := c.String("n") 71 space := cmd.spaceReq.GetSpace() 72 domain := cmd.domainReq.GetDomain() 73 74 _, apiErr := cmd.CreateRoute(hostName, domain, space.SpaceFields) 75 if apiErr != nil { 76 cmd.ui.Failed(apiErr.Error()) 77 return 78 } 79 } 80 81 func (cmd *CreateRoute) CreateRoute(hostName string, domain models.DomainFields, space models.SpaceFields) (route models.Route, apiErr error) { 82 cmd.ui.Say(T("Creating route {{.Hostname}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", 83 map[string]interface{}{ 84 "Hostname": terminal.EntityNameColor(domain.UrlForHost(hostName)), 85 "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), 86 "SpaceName": terminal.EntityNameColor(space.Name), 87 "Username": terminal.EntityNameColor(cmd.config.Username())})) 88 89 route, apiErr = cmd.routeRepo.CreateInSpace(hostName, domain.Guid, space.Guid) 90 if apiErr != nil { 91 var findApiResponse error 92 route, findApiResponse = cmd.routeRepo.FindByHostAndDomain(hostName, domain) 93 94 if findApiResponse != nil || 95 route.Space.Guid != space.Guid || 96 route.Domain.Guid != domain.Guid { 97 return 98 } 99 100 apiErr = nil 101 cmd.ui.Ok() 102 cmd.ui.Warn(T("Route {{.URL}} already exists", 103 map[string]interface{}{"URL": route.URL()})) 104 return 105 } 106 107 cmd.ui.Ok() 108 return 109 }