public abstract class AbstractBasePlace extends Place {
private static final Logger logger = Logger.getLogger(AbstractBasePlace.class.getName());
private static final String VALIDATE_TOKENS_MESSAGE_PREFIX = "Missing token(s): ";
private String url;
private Map<String, String> params = new HashMap<String, String>();
/**
*
* @param token
* will be parsed to extract the parameters passed as part of url
*/
protected AbstractBasePlace(String... tokens) {
if (tokens.length % 2 != 0) {
logger.warning("Invalid arguments received!"
+ " Must be name,value,name,value ... Ignoring arguments!");
return;
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < tokens.length; i++) {
final String paramName = tokens[i++];
final String paramValue = tokens[i];
// build params map
params.put(paramName, paramValue);
// build url
stringBuilder.append(paramName + "=" + paramValue + "&");
}
url = stringBuilder.toString();
}
protected AbstractBasePlace(String url) {
if (url == null || url.isEmpty()) {
logger.warning("Url empty, no-op");
return;
}
this.url = url;
List<String> list = Arrays.asList(url.split("&"));
if (list == null || list.size() < 1) {
logger.warning("Token empty, no-op");
return;
}
for (String listItem : list) {
List<String> nvPair = Arrays.asList(listItem.split("="));
if (nvPair == null || nvPair.size() != 2) {
logger.warning("Invalid paramters");
continue;
}
params.put(nvPair.get(0), nvPair.get(1));
}
}
/**
* Checks whether 'this' is constructed with the required parameters. The
* list of required params must be passed as argument.
*
* @param requiredLiterals
*/
protected void validate(String... paramNames) {
StringBuffer message = new StringBuffer(VALIDATE_TOKENS_MESSAGE_PREFIX);
for (String name : paramNames) {
if (!params.containsKey(name))
message.append(name + " ");
}
// if something is added to the string show
if (!message.toString().equals(VALIDATE_TOKENS_MESSAGE_PREFIX)) {
logger.warning(message.toString());
// Status.failure(message.toString());
}
}
public String getUrl() {
return url;
}
public String getParameter(String name) {
return params.get(name);
}
public boolean hasParameter(String name) {
return params.containsKey(name);
}
}
All your places can extend this class and you can use 2 constructors depending upon the context:
- Use this if you are constructing the place, to be used with placecontroller.
- Use this for constructing place within PlaceTokenizer.
And when ever you want a param, just call place.hasParam() and place.getParam()
Hope this helps.