On 7 Jun 2007, at 10:41, Stian Soiland wrote:

Do I have to re-parse the template myself? I guess looking for {([^}]+)} with regular expressions should be enough, but I wanted to check with the list first.

I ended up with this simplified version (feel free to use):

        /**
         * Find URI Template variable names according to
         * http://bitworking.org/projects/URI-Templates/
         *
         * @param template The URI template to inspect
         * @return An ordered set of the URI template variable names
         */
public static LinkedHashSet<String> uriTemplateVariables(String template) {
                LinkedHashSet<String> variableNames = new 
LinkedHashSet<String>();
                Pattern variablePattern = Pattern.compile("\\{([^{}]+)\\}");
                Matcher matcher = variablePattern.matcher(template);
                while (matcher.find()) {
                        String variableName = matcher.group(1);
                        variableNames.add(variableName);
                }
                return variableNames;
        }

        @Test
        public void uriTemplateVariables() {
String template = "http://example.com/user/{user}/fish/{fish}? {gene}={1337}&user={user}"; LinkedHashSet<String> vars = RestWorker.uriTemplateVariables (template);
                String[] expectedVars = {"user", "fish", "gene", "1337"};
                assertEquals(expectedVars.length, vars.size());
                int i=0;
                for (String var : vars) {
                        assertEquals(expectedVars[i++], var);
                }
        }

        @Test
        public void illegalTemplate() {
                String template = 
"http://example.com/{{{user}}/fis}h/{{x}}/{}}";;
LinkedHashSet<String> vars = RestWorker.uriTemplateVariables (template);
                String[] expectedVars = {"user", "x"};
                assertEquals(expectedVars.length, vars.size());
                int i=0;
                for (String var : vars) {
                        assertEquals(expectedVars[i++], var);
                }
        }


However this doesn't do any checking for illegal characters etc.

--
Stian Soiland, myGrid team
School of Computer Science
The University of Manchester
http://www.cs.man.ac.uk/~ssoiland/

Reply via email to