Moving Historical Queries to spring boot
[aai/data-router.git] / src / main / java / org / onap / aai / datarouter / query / ChampRouter.java
index a120f89..7e63869 100644 (file)
 package org.onap.aai.datarouter.query;
 
 import java.security.InvalidParameterException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
-import org.apache.camel.Exchange;
-import org.onap.aai.rest.RestClientEndpoint;
+import javax.annotation.PostConstruct;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response.Status;
+
+import org.eclipse.jetty.util.security.Password;
 import org.onap.aai.cl.api.Logger;
 import org.onap.aai.cl.eelf.LoggerFactory;
+import org.onap.aai.datarouter.exception.DataRouterException;
+import org.onap.aai.datarouter.util.DataRouterConstants;
+import org.onap.aai.restclient.client.OperationResult;
+import org.onap.aai.restclient.client.RestClient;
+import org.onap.aai.restclient.rest.HttpUtil;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
 
-public class ChampRouter extends QueryRouter {
+@Component
+@Qualifier("champ")
+public class ChampRouter implements QueryRouter {
   Logger logger = LoggerFactory.getInstance().getLogger(ChampRouter.class.getName());
 
   private String champBaseURL;
+
+  private RestClient restClient ;
   
+  public ChampRouter(){}
+
+  public ChampRouter(String champBaseURL, RestClientConfig config) {   
+    this.champBaseURL = champBaseURL;
+    this.restClient = new RestClient().validateServerHostname(false).validateServerCertChain(true)
+        .clientCertFile(config.getCertPath())
+        .clientCertPassword(Password.deobfuscate(config.getCertPassword()))
+        .trustStore(config.getTrustStorePath())
+        .connectTimeoutMs(config.getConnectionTimeout())
+        .readTimeoutMs(config.getReadTimeout());
+    validate();
+  }
 
-  public ChampRouter(String champBaseURL) {
-    String baseURL = champBaseURL.endsWith("/") ? champBaseURL.substring(0, champBaseURL.length() - 1)
-        : champBaseURL;
-    if(checkRecursion(baseURL)){
-      logger.info(QueryMsgs.QUERY_INFO, "Invalid champBaseURL : Can't re-route back to DataRouter "+ champBaseURL);
-      throw new InvalidParameterException("Invalid champBaseURL : Can't re-route back to DataRouter "+ champBaseURL);
+  public void validate(){
+    String baseURL = champBaseURL.endsWith("/") ? champBaseURL.substring(0, champBaseURL.length() - 1) : champBaseURL;
+    if (baseURL.contains(DATA_ROUTER_PORT)) {
+      logger.info(QueryMsgs.QUERY_INFO, "Invalid champBaseURL : Can't re-route back to DataRouter " + champBaseURL);
+      throw new InvalidParameterException("Invalid champBaseURL : Can't re-route back to DataRouter " + champBaseURL);
     }
-    this.champBaseURL = baseURL;    
+    this.champBaseURL = baseURL;
   }
 
-  public void setQueryRequest(Exchange exchange) {
-    setMDC(exchange);
-    String path = exchange.getIn().getHeader(Exchange.HTTP_PATH, String.class);
-    String queryParams = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
-    String ecompUrl;
+  @Override
+  public String process(String urlContext, String queryParams, Map<String, List<String>> headers)
+      throws DataRouterException {
+    String champURL;
+    String response;
     if (queryParams != null && !queryParams.isEmpty()) {
-      ecompUrl = champBaseURL + path + "?" + queryParams;
+      champURL = champBaseURL + urlContext + "?" + queryParams;
     } else {
-      ecompUrl = champBaseURL + path;
+      champURL = champBaseURL + urlContext;
     }
 
-    logger.info(QueryMsgs.QUERY_INFO, "Routing request to Champ service URL: " + ecompUrl);
-    exchange.getIn().setHeader(RestClientEndpoint.IN_HEADER_URL, ecompUrl);
-    exchange.getIn().setHeader("X-FromAppId", SERVICE_NAME);
-    exchange.getIn().setHeader("X-TransactionId", getTxId(exchange));
+    logger.info(QueryMsgs.QUERY_INFO, "Routing request to Champ service URL: " + champURL);
 
-  }
+    headers = headers == null ? new HashMap<String, List<String>>() : headers;
+    headers.put("X-FromAppId", Arrays.asList(DataRouterConstants.DATA_ROUTER_SERVICE_NAME));
+    OperationResult result = restClient.get(champURL, headers, MediaType.APPLICATION_JSON_TYPE);
+
+    if (HttpUtil.isHttpResponseClassSuccess(result.getResultCode())) {
+      response = result.getResult();
+    } else {
+      logger.info(QueryMsgs.QUERY_ERROR,
+          "Error while calling Champ service URL: " + champURL + " failure cause: " + result.getFailureCause());
+      throw new DataRouterException(
+          "Error while calling Champ service URL: " + champURL + " failure cause: " + result.getFailureCause(),
+          Status.fromStatusCode(result.getResultCode()));
+    }
 
-  public void setQueryResponse(Exchange exchange) {
-    Integer httpResponseCode = exchange.getIn().getHeader(RestClientEndpoint.OUT_HEADER_RESPONSE_CODE, Integer.class);
-    // Object httpBody = exchange.getIn().getBody();
-    exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, httpResponseCode);
+    return response;
 
   }