Thierry,
This works great, thank you very, very much! I now have fully dynamic behaviors. Can I suggest that you make this a standard attribute? Regardless, this works for me. Cliff Binstock Coyote Reporting _____ From: Thierry Boileau [mailto:[EMAIL PROTECTED] Sent: Tuesday, October 21, 2008 12:26 AM To: discuss@restlet.tigris.org Subject: Re: uriPattern exactness Hi Cliff, as a workaround, you can derive the Router class and override the "getNext" method. It will give you access to the route, and then the matched pattern: Router router = new Router(getContext()) { @Override public Restlet getNext(Request request, Response response) { Restlet result = super.getNext(request, response); if (result instanceof Route) { Route route = (Route) result; request.getAttributes().put("pattern", route.getTemplate().getPattern()); } return result; } }; By doing so, you're able to update the request and include the pattern as an attribute. Best regards, Thierry Boileau -- Restlet ~ Core developer ~ http://www.restlet.org <http://www.restlet.org/> Noelios Technologies ~ Co-founder ~ http://www.noelios.com <http://www.noelios.com/> Jérôme, I thought of another reason why it would be *really nice* to know the matching URI pattern: I would like to be able to dynamically determine how to handle a resource request from a configuration. To simplify my actual use case, suppose for example that I implemented a default resource, and the default resource could look at, say, an external XML configuration file to determine which class to really call (dynamically). This external configuration might look like: <entry> <matching-uri-pattern>/foo/{foos}/bar</matching-uri-pattern> <invoke>com.coyotereporting.foo.Bar</invoke> </entry> Right now, I can see how to use the above to dynamically define *resources* once on startup, but not how to "abstract" this one level to have the default resource call different handlers on the fly. So, if I can add to the long term request list: 1) Get back the original URI (e.g., /foo/{foos}/bar) 2) Get back the "as-matched" URI (e.g., /foo/myFoo/bar). Note that #1 above (original URI Pattern), would enable a very flexible default handler. Cliff Binstock Coyote Reporting -----Original Message----- From: Jerome Louvel [mailto:[EMAIL PROTECTED] Sent: Friday, October 17, 2008 4:02 AM To: discuss@restlet.tigris.org Subject: RE: uriPattern exactness Hi Cliff, In combination with MODE_EQUALS, you could also add a variable for your extensions like: "/foos/{foo}/bar.{ext}". That could reduce the number of alternative routes you would have to attach. Best regards, Jerome Louvel -- Restlet ~ Founder and Lead developer ~ http://www.restlet.org Noelios Technologies ~ Co-founder ~ http://www.noelios.com -----Message d'origine----- De : Cliff Binstock [mailto:[EMAIL PROTECTED] Envoye : vendredi 17 octobre 2008 01:28 A : discuss@restlet.tigris.org Objet : RE: uriPattern exactness Aron, Thanks, I didn't realize this was here. This would potentially work, and I may end up using it. Frankly, I want to be able to "have my cake and eat it too". An exact match using this construct would work, but would also force me to itemize every possible variation of a path via router.attach(). I was hoping to do some "fuzzy" enforcement in a base "Resource" class. Cliff Binstock Coyote Reporting -----Original Message----- From: Aron Roberts [mailto:[EMAIL PROTECTED] Sent: Thursday, October 16, 2008 11:37 AM To: discuss@restlet.tigris.org Subject: RE: uriPattern exactness In the message "Re: uriPattern exactness", dated 2008-10-16, Cliff Binstock wrote: P.S. What is worse (maybe very confusing) is that this might match too: /foo/myFoo/bar/baz/bletch/fred.xml Again, I would like to forcefully ensure that this doesn't end up matching. From memory - by default, the mode for matching incoming URIs to your URI templates is 'starts with' rather than 'equals'. As Jerome wrote back in February 2008: In some cases, you might want to change this default mode, and this is easy to do via the "defaultMatchingMode" property on Router, or by modifying the "matchingMode" property of the template associated with the route created by the Router.attach() methods. For the modes, you can use the Template.MODE_EQUALS or Template.MODE_STARTS_WITH constants." Here's one example of the latter: router.getTemplate().setMatchingMode(Template.MODE_EQUALS) Hope this is germane to your needs. Aron