| ---------- |
| Deployment (Once we know we need to create a new WAR). |
| ---------- |
| . Given global config |
| . Given gateway topology |
| . Create empty WebArchive |
| . Create empty WebAppDescriptor |
| . Invoke the Gateway deployment contributor |
| . Create empty ClusterConfig |
| . Find all ResourceConfigFactory services |
| . For each service in gateway topo |
| . Find and service's config factory |
| . Add created resources configs to gateway config |
| Q: How do they know to include as vs ss? |
| . Populate the deployment context with the above. |
| . Find all ClusterDeploymentContributor services |
| . Invoke each contributor |
| . |
| |
| |
| |
| If the query is empty, never include the ? in the expansion. |
| |
| Have every URL section support *, **, {*} and {**}. |
| Have Params include a source enum. |
| A {*} or {**} in an expansion template will only include params from the same "source.". |
| Have ** in the authority if there is only one apply to all four parts. |
| Rethink the way the "extra" was handled. |
| |
| The source/target below should create a complete copy of the URL. |
| {*}://{**}/{**}?{**}#{**} |
| {*}://{**}/{**}?{**}#{**} |
| Consider having the param name for the {**} shortcuts be things like |
| {scheme} {host}, {port}, {username}, {password}, {path}, {query}, {fragment} or shorter |
| {s} {hn} {pn} {un}, {pw}, {p}, {q}, {f} |
| These might be a good idea because they should be invalid to specify in the syntax because nested {}'s are allowed |
| to make parsing easier. |
| |
| Path |
| {path} |
| Match: {path=*} |
| Extract: {path=**} |
| {*} - same as * |
| {**} - same as ** |
| Query |
| {query} |
| Match: query={query=**} |
| Extract: query={query=**} |
| {*} |
| Match: *={*=*} |
| Extract: query={query=**} |
| {**} |
| Match: *={*=**} |
| Extract: *={*=**} |
| |
| --- Path param matching --- |
| 1. Path param required [1,1] |
| Pattern: /path/{param-name}/path |
| |
| 2. Path param optional [0,n] |
| Pattern: /path/{param-name*}/path |
| |
| 2. Path remainder optional [0,n] |
| Pattern: /path/{**} |
| |
| --- Query param matching |
| 1. Query param required [1,1] |
| Pattern: /path?name={param-name} |
| Template: /other-path?other-name={param-name*} |
| |
| 2. Query param optional [0..n] |
| Pattern: /path?name={param-name*} |
| Template: /other-path?other-name={param-name*} |
| |
| 3. Query param remainder [0..n] |
| Pattern: /path?{**} |
| |
| Notes |
| By default patterns are reluctantly matched |
| Query parameter ordering is not significant. |
| Path parameter ordering is a requirement for matching. |
| This should match anything /{**}?{**} |
| The should reproduce the input /{**}?{**} |
| Note: The **'s will only match what isn't specifically consumed. Therefore for query param matching they must always logically be last. |
| Note: For {**} path params remember that they are "reluctant". The value *** could be greedy. |
| |
| Extensions |
| Could use + to mean [1,n] |
| Could use ? to mean [0,1] |
| Could use additional * to mean greedy **, +*, ?*, [1,n]* |