/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.server.router.handlers;
import java.util.stream.Collectors;
import io.undertow.server.HttpHandler;
import io.undertow.server.HttpServerExchange;
import io.undertow.util.HeaderValues;
import io.undertow.util.Headers;
import org.kie.server.router.KieServerRouterConstants;
public class KieServerInfoHandler implements HttpHandler {
private static final String JAXB_RESPONSE = "<response type=\"SUCCESS\" msg=\"Kie Server info\">\n"+
"<kie-server-info>\n"+
"<capabilities>KieServer</capabilities>\n"+
"<capabilities>BRM</capabilities>\n"+
"<capabilities>BPM</capabilities>\n"+
"<capabilities>CaseMgmt</capabilities>\n"+
"<capabilities>BPM-UI</capabilities>\n"+
"<capabilities>BRP</capabilities>\n"+
"<location>\n"+
getLocationUrl() + "\n"+
"</location>\n"+
"<messages/>\n"+
"<name>KIE Server Router</name>\n"+
"<id>kie-server-router</id>\n"+
"<version>LATEST</version>\n"+
"</kie-server-info>\n"+
"</response>";
private static final String JSON_RESPONSE = "{\n"+
" \"type\" : \"SUCCESS\",\n"+
" \"msg\" : \"Kie Server info\",\n"+
" \"result\" : {\n"+
" \"kie-server-info\" : {\n"+
" \"version\" : \"LATEST\",\n"+
" \"name\" : \"KIE Server Router\",\n"+
" \"location\" : \"" + getLocationUrl() + "\",\n"+
" \"capabilities\" : [ \"KieServer\", \"BRM\", \"BPM\", \"CaseMgmt\", \"BPM-UI\", \"BRP\" ],\n"+
" \"id\" : \"kie-server-router\"\n"+
" }\n"+
" }\n"+
"}";
private static final String XSTREAM_RESPONSE = "<org.kie.server.api.model.ServiceResponse>"+
"<type>SUCCESS</type>\n"+
"<msg>Kie Server info</msg>\n"+
"<result class=\"kie-server-info\">\n"+
"<serverId>kie-server-router</serverId>\n"+
"<version>LATEST</version>\n"+
"<name>KIE Server Router</name>\n"+
"<location>\n"+
getLocationUrl() + "\n"+
"</location>\n"+
"<capabilities>\n"+
"<string>KieServer</string>\n"+
"<string>BRM</string>\n"+
"<string>BPM</string>\n"+
"<string>CaseMgmt</string>\n"+
"<string>BPM-UI</string>\n"+
"<string>BRP</string>\n"+
"</capabilities>\n"+
"</result>\n"+
"</org.kie.server.api.model.ServiceResponse>";
@Override
public void handleRequest(HttpServerExchange exchange) throws Exception {
HeaderValues accept = exchange.getRequestHeaders().get(Headers.ACCEPT);
HeaderValues kieContentType = exchange.getRequestHeaders().get("X-KIE-ContentType");
String acceptRequest = "";
if (accept != null) {
acceptRequest = accept.stream().collect(Collectors.joining(","));
}
String kieContentTypeRequest = "";
if (kieContentType != null) {
kieContentTypeRequest = kieContentType.stream().collect(Collectors.joining(","));
}
String response = JAXB_RESPONSE;
String contentTypeResponse = "application/xml";
if (acceptRequest.toLowerCase().contains("json") || kieContentTypeRequest.toLowerCase().contains("json")) {
response = JSON_RESPONSE;
contentTypeResponse = "application/json";
} else if (kieContentTypeRequest.toLowerCase().contains("xstream")) {
response = XSTREAM_RESPONSE;
contentTypeResponse = "application/xml";
}
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, contentTypeResponse);
exchange.getResponseHeaders().put(Headers.CONTENT_LENGTH, response.getBytes("UTF-8").length);
exchange.getResponseSender().send(response);
}
public static String getLocationUrl() {
String externalUrl = System.getProperty(KieServerRouterConstants.ROUTER_EXTERNAL_URL);
if(externalUrl == null) {
StringBuilder sb = new StringBuilder();
sb.append("http://");
sb.append(System.getProperty(KieServerRouterConstants.ROUTER_HOST, "localhost"));
sb.append(":");
sb.append(System.getProperty(KieServerRouterConstants.ROUTER_PORT, "9000"));
externalUrl = sb.toString();
}
return externalUrl;
}
}