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()]);
}
}