package com.quantum.wizards; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.StringTokenizer; /** *

This class takes a URL pattern and creates a full URL. A URL pattern might look * like this: jdbc:postgresql://{hostname}:{port}/{dbname}, and the * properties should include "hostname", "port" and "dbname". * * @author BC Holmes */ public class URLBuilder { public static String createURL(String urlPattern, Map properties) { StringBuffer buffer = new StringBuffer(); boolean isVariable = false; String variableName = null; for (StringTokenizer tokenizer = new StringTokenizer(urlPattern, "{}", true); tokenizer.hasMoreTokens(); ) { String token = tokenizer.nextToken(); if ("{".equals(token) && !isVariable) { isVariable = true; } else if (isVariable && "}".equals(token) && variableName != null) { if (!properties.containsKey(variableName)) { buffer.append("{"); buffer.append(variableName); buffer.append("}"); } else { buffer.append(properties.get(variableName)); } isVariable = false; } else if (isVariable) { variableName = token; } else { buffer.append(token); } } return buffer.toString(); } public static String[] getVariableNames(String urlPattern) { List list = new ArrayList(); if (urlPattern != null) { boolean isVariable = false; String variableName = null; for (StringTokenizer tokenizer = new StringTokenizer(urlPattern, "{}", true); tokenizer.hasMoreTokens(); ) { String token = tokenizer.nextToken(); if ("{".equals(token) && !isVariable) { isVariable = true; } else if (isVariable && "}".equals(token) && variableName != null) { list.add(variableName); isVariable = false; } else if (isVariable) { variableName = token; } } } return (String[]) list.toArray(new String[list.size()]); } }