in jbi/cluster/engine/src/main/java/org/apache/servicemix/jbi/cluster/engine/ClusterEngine.java [433:501]
protected String getSelector() {
if (selector == null) {
Set<String> interfaces = new HashSet<String>();
Set<String> services = new HashSet<String>();
Set<String> endpoints = new HashSet<String>();
for (ServiceEndpoint se : getAllEndpoints()) {
// This endpoint is not a JBI endpoint, so we don't need to filter it out
QName[] itfs = se.getInterfaces();
if (itfs != null) {
for (QName itf : itfs) {
interfaces.add(itf.toString());
}
}
services.add(se.getServiceName().toString());
endpoints.add("{" + se.getServiceName().toString() + "}" + se.getEndpointName());
}
StringBuilder selector = new StringBuilder();
if (!endpoints.isEmpty()) {
selector.append("(");
selector.append(JBI_MESSAGE).append(" = ").append(JBI_MESSAGE_IN).append(" AND (");
if (!interfaces.isEmpty()) {
selector.append(JBI_INTERFACE).append(" IN (");
boolean first = true;
for (String s : interfaces) {
if (!first) {
selector.append(", ");
} else {
first = false;
}
selector.append("'").append(s).append("'");
}
selector.append(")");
}
if (!interfaces.isEmpty()) {
selector.append(" OR ");
}
selector.append(JBI_SERVICE).append(" IN (");
boolean first = true;
for (String s : services) {
if (!first) {
selector.append(", ");
} else {
first = false;
}
selector.append("'").append(s).append("'");
}
selector.append(")");
selector.append(" OR ");
selector.append(JBI_ENDPOINT).append(" IN (");
first = true;
for (String s : endpoints) {
if (!first) {
selector.append(", ");
} else {
first = false;
}
selector.append("'").append(s).append("'");
}
selector.append(")");
selector.append(")");
selector.append(")");
selector.append(" OR ");
}
selector.append(PROPERTY_CLUSTER_NAME).append(" = '").append(name).append("'");
this.selector = selector.toString();
}
return this.selector;
}