in src/main/java/org/apache/sling/discovery/impl/TopologyWebConsolePlugin.java [390:485]
private void listOutgoingTopologyConnectors(final PrintWriter pw) {
boolean odd = false;
pw.println("<div class=\"ui-widget-header ui-corner-top buttonGroup\" style=\"height: 15px;\">");
pw.println("<span style=\"float: left; margin-left: 1em;\">Outgoing topology connectors</span>");
pw.println("</div>");
pw.println("<table class=\"adapters nicetable ui-widget tablesorter\">");
pw.println("<thead>");
pw.println("<tr>");
pw.println("<th class=\"header ui-widget-header\">Connector url</th>");
pw.println("<th class=\"header ui-widget-header\">Connected to slingId</th>");
pw.println("<th class=\"header ui-widget-header\">Connector status</th>");
pw.println("<th class=\"header ui-widget-header\">Last heartbeat </th>");
pw.println("<th class=\"header ui-widget-header\">Next heartbeat </th>");
pw.println("<th class=\"header ui-widget-header\">Request encoding </th>");
pw.println("<th class=\"header ui-widget-header\">Response encoding </th>");
// pw.println("<th class=\"header ui-widget-header\">Fallback connector urls</th>");
pw.println("</tr>");
pw.println("</thead>");
pw.println("<tbody>");
Collection<TopologyConnectorClientInformation> outgoingConnections = connectorRegistry
.listOutgoingConnectors();
for (Iterator<TopologyConnectorClientInformation> it = outgoingConnections
.iterator(); it.hasNext();) {
TopologyConnectorClientInformation topologyConnectorClient = it
.next();
final String oddEven = odd ? "odd" : "even";
odd = !odd;
final String remoteSlingId = topologyConnectorClient.getRemoteSlingId();
final boolean isConnected = topologyConnectorClient.isConnected() && remoteSlingId != null;
final boolean autoStopped = topologyConnectorClient.isAutoStopped();
final boolean representsLoop = topologyConnectorClient.representsLoop();
if (isConnected || autoStopped || representsLoop) {
pw.println("<tr class=\"" + oddEven + " ui-state-default\">");
} else {
pw.println("<tr class=\"" + oddEven + " ui-state-error\">");
}
pw.println("<td>"
+ topologyConnectorClient.getConnectorUrl().toString()
+ "</td>");
if (autoStopped) {
pw.println("<td><b>auto-stopped</b></td>");
pw.println("<td><b>auto-stopped due to local-loop</b></td>");
} else if (isConnected && !representsLoop) {
pw.println("<td>" + remoteSlingId + "</td>");
pw.println("<td>ok, in use</td>");
} else if (representsLoop) {
pw.println("<td>" + remoteSlingId + "</td>");
pw.println("<td>ok, unused (loop or duplicate): standby</td>");
} else {
final int statusCode = topologyConnectorClient.getStatusCode();
final String statusDetails = topologyConnectorClient.getStatusDetails();
final String tooltipText;
switch(statusCode) {
case HttpServletResponse.SC_UNAUTHORIZED:
tooltipText = HttpServletResponse.SC_UNAUTHORIZED +
": possible setup issue of discovery.impl on target instance, or wrong URL";
break;
case HttpServletResponse.SC_NOT_FOUND:
tooltipText = HttpServletResponse.SC_NOT_FOUND +
": possible white list rejection by target instance";
break;
case -1:
tooltipText = "-1: check error log. possible connection refused.";
break;
default:
tooltipText = null;
}
final String tooltip = tooltipText==null ? "" : (" title=\""+tooltipText+"\"");
pw.println("<td><b>not connected</b></td>");
pw.println("<td"+tooltip+"><b>not ok (HTTP Status-Code: "+statusCode+", "+statusDetails+")</b></td>");
}
pw.println("<td>"+beautifiedTimeDiff(topologyConnectorClient.getLastPingSent())+"</td>");
pw.println("<td>"+beautifiedDueTime(topologyConnectorClient.getNextPingDue())+"</td>");
pw.println("<td>"+topologyConnectorClient.getLastRequestEncoding()+"</td>");
pw.println("<td>"+topologyConnectorClient.getLastResponseEncoding()+"</td>");
// //TODO fallback urls are not yet implemented!
// String fallbackConnectorUrls;
// List<String> urls = topologyConnectorClient
// .listFallbackConnectorUrls();
// if (urls == null || urls.size() == 0) {
// fallbackConnectorUrls = "n/a";
// } else {
// fallbackConnectorUrls = "";
// for (Iterator<String> it2 = urls.iterator(); it2.hasNext();) {
// String aFallbackConnectorUrl = it2.next();
// fallbackConnectorUrls = fallbackConnectorUrls
// + aFallbackConnectorUrl + "<br/>";
// }
// }
// pw.println("<td>" + fallbackConnectorUrls + "</td>");
}
pw.println("</tbody>");
pw.println("</table>");
}