Refactoring to use camel servlet with spring boot
[aai/data-router.git] / src / main / java / org / onap / aai / datarouter / query / ChampRouter.java
index 7e63869..a120f89 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 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.apache.camel.Exchange;
+import org.onap.aai.rest.RestClientEndpoint;
 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;
-
 
-@Component
-@Qualifier("champ")
-public class ChampRouter implements QueryRouter {
+public class ChampRouter extends 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 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);
+  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);
     }
-    this.champBaseURL = baseURL;
+    this.champBaseURL = baseURL;    
   }
 
-  @Override
-  public String process(String urlContext, String queryParams, Map<String, List<String>> headers)
-      throws DataRouterException {
-    String champURL;
-    String response;
+  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;
     if (queryParams != null && !queryParams.isEmpty()) {
-      champURL = champBaseURL + urlContext + "?" + queryParams;
+      ecompUrl = champBaseURL + path + "?" + queryParams;
     } else {
-      champURL = champBaseURL + urlContext;
+      ecompUrl = champBaseURL + path;
     }
 
-    logger.info(QueryMsgs.QUERY_INFO, "Routing request to Champ service URL: " + champURL);
+    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));
 
-    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()));
-    }
+  }
 
-    return response;
+  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);
 
   }