package com.hundsun.jresplus.web.url;
import com.hundsun.jresplus.common.util.StringUtil;
/**
*
* @author LeoHu copy by sagahl copy by fish
*
*/
public class MultiHostURLBroker extends URLBroker {
private MultiHostURLConfig config;
@Override
public QueryData setTarget(String target) {
return new MultiHostQueryData(target);
}
@Override
public void init(String contextPath) {
this.contextPath = contextPath;
}
@Override
public void setConfig(URLConfig config) {
if (config instanceof MultiHostURLConfig) {
this.config = (MultiHostURLConfig) config;
} else {
throw new IllegalArgumentException(
"MultiHostURLBroker only support MultiHostURLConfig");
}
}
public String toString() {
return this.getServer(0);
}
protected String getServer(int id) {
StringBuilder server = new StringBuilder();
server.append(config.getURL(id));
if (config.isFollowContextPath()) {
server.append(contextPath);
}
if (server.length() > 0 && server.charAt(server.length() - 1) == '/') {
server.deleteCharAt(server.length() - 1);
}
if (StringUtil.isNotBlank(config.getPath())) {
if (config.getPath().startsWith("/")) {
server.append(config.getPath());
} else {
server.append('/').append(config.getPath());
}
}
if (server.length() > 0 && server.charAt(server.length() - 1) == '/') {
server.deleteCharAt(server.length() - 1);
}
return server.toString();
}
/**
* @param target
* @return
*/
protected int getTargetHash(String target) {
return target.hashCode();
}
public class MultiHostQueryData extends QueryData {
public MultiHostQueryData() {
super();
}
public MultiHostQueryData(String target) {
if (target == null) {
return;
}
query = new StringBuilder();
query.append(MultiHostURLBroker.this
.getServer(getTargetHash(target)));
if (target.startsWith("/")) {
query.append(target);
} else {
query.append('/').append(target);
}
query.append('?');
}
}
}