aboutsummaryrefslogtreecommitdiffstats
path: root/aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java')
-rw-r--r--aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java536
1 files changed, 246 insertions, 290 deletions
diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java
index f61e342..8c97c0a 100644
--- a/aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java
+++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java
@@ -22,7 +22,6 @@ package org.onap.aai.rest.search;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
-
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -35,7 +34,6 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
-
import org.onap.aai.dbgraphmap.SearchGraph;
import org.onap.aai.dbmap.DBConnectionType;
import org.onap.aai.exceptions.AAIException;
@@ -54,304 +52,262 @@ import org.onap.aai.serialization.engines.TransactionalGraphEngine;
import org.onap.aai.serialization.queryformats.utils.UrlBuilder;
import org.onap.aai.setup.SchemaVersion;
import org.onap.aai.setup.SchemaVersions;
-import org.onap.aai.util.AAIConstants;
+import org.onap.aai.util.GenericQueryBuilder;
+import org.onap.aai.util.NodesQueryBuilder;
import org.onap.aai.util.TraversalConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.onap.aai.concurrent.AaiCallable;
-
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import org.springframework.beans.factory.annotation.Value;
/**
- * Implements the search subdomain in the REST API. All API calls must include
- * X-FromAppId and X-TransactionId in the header.
+ * Implements the search subdomain in the REST API. All API calls must include X-FromAppId and
+ * X-TransactionId in the header.
*/
@Path("/{version: v[1-9][0-9]*|latest}/search")
public class SearchProvider extends RESTAPI {
- private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(SearchProvider.class);
-
- public static final String GENERIC_QUERY = "/generic-query";
-
- public static final String NODES_QUERY = "/nodes-query";
-
- public static final String TARGET_ENTITY = "DB";
-
- private SearchGraph searchGraph;
-
- private LoaderFactory loaderFactory;
-
- private SchemaVersions schemaVersions;
-
- private String basePath;
-
- @Autowired
- public SearchProvider(
- LoaderFactory loaderFactory,
- SearchGraph searchGraph,
- SchemaVersions schemaVersions,
- @Value("${schema.uri.base.path}") String basePath
- ){
- this.loaderFactory = loaderFactory;
- this.searchGraph = searchGraph;
- this.schemaVersions = schemaVersions;
- this.basePath = basePath;
- }
-
- /**
- * Gets the generic query response.
- *
- * @param headers the headers
- * @param req the req
- * @param startNodeType the start node type
- * @param startNodeKeyParams the start node key params
- * @param includeNodeTypes the include node types
- * @param depth the depth
- * @return the generic query response
- */
- /* ---------------- Start Generic Query --------------------- */
- @GET
- @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
- @Path(GENERIC_QUERY)
- public Response getGenericQueryResponse(@Context HttpHeaders headers,
- @Context HttpServletRequest req,
- @QueryParam("start-node-type") final String startNodeType,
- @QueryParam("key") final List<String> startNodeKeyParams,
- @QueryParam("include") final List<String> includeNodeTypes,
- @QueryParam("depth") final int depth,
- @PathParam("version")String versionParam,
- @Context UriInfo info
- ) {
- return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED,
- TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP,
- TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT,
- headers,
- info,
- HttpMethod.GET,
- new AaiCallable<Response>() {
- @Override
- public Response process() {
- return processGenericQueryResponse(headers, req, startNodeType, startNodeKeyParams, includeNodeTypes, depth, versionParam);
- }
- }
- );
- }
-
- public Response processGenericQueryResponse(@Context HttpHeaders headers,
- @Context HttpServletRequest req,
- @QueryParam("start-node-type") final String startNodeType,
- @QueryParam("key") final List<String> startNodeKeyParams,
- @QueryParam("include") final List<String> includeNodeTypes,
- @QueryParam("depth") final int depth,
- @PathParam("version")String versionParam
- ) {
-
- String methodName = "getGenericQueryResponse";
- AAIException ex = null;
- Response searchResult = null;
- String fromAppId = null;
- String transId = null;
- String rqstTm = genDate();
- ArrayList<String> templateVars = new ArrayList<String>();
- double dbTimeMsecs = 0;
- try {
- LoggingContext.save();
- LoggingContext.targetEntity(TARGET_ENTITY);
- LoggingContext.targetServiceName(methodName);
-
- fromAppId = getFromAppId(headers);
- transId = getTransId(headers);
- String realTime = headers.getRequestHeaders().getFirst("Real-Time");
- //only consider header value for search
- DBConnectionType type = this.determineConnectionType("force-cache", realTime);
-
- final SchemaVersion version = new SchemaVersion(versionParam);
-
- final ModelType factoryType = ModelType.MOXY;
- Loader loader = loaderFactory.createLoaderForVersion(factoryType, version);
- TransactionalGraphEngine dbEngine = new JanusGraphDBEngine(
- QueryStyle.TRAVERSAL,
- type,
- loader);
- DBSerializer dbSerializer = new DBSerializer(version, dbEngine, factoryType, fromAppId);
- UrlBuilder urlBuilder = new UrlBuilder(version, dbSerializer, schemaVersions, this.basePath);
- LoggingContext.startTime();
- StopWatch.conditionalStart();
- searchResult = searchGraph.runGenericQuery(
- headers,
- startNodeType,
- startNodeKeyParams,
- includeNodeTypes,
- depth,
- dbEngine,
- loader,
- urlBuilder
-
- );
- dbTimeMsecs += StopWatch.stopIfStarted();
-
- LoggingContext.successStatusFields();
- LoggingContext.elapsedTime((long)dbTimeMsecs,TimeUnit.MILLISECONDS);
-
- LOGGER.info ("Completed");
- LoggingContext.restoreIfPossible();
- LoggingContext.successStatusFields();
-
- String respTm = genDate();
-
- } catch (AAIException e) {
- LoggingContext.restoreIfPossible();
- // send error response
- ex = e;
- templateVars.add("GET Search");
- templateVars.add("getGenericQueryResponse");
- searchResult = Response
- .status(e.getErrorObject().getHTTPResponseCode())
- .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars))
- .build();
- } catch (Exception e) {
- LoggingContext.restoreIfPossible();
- // send error response
- ex = new AAIException("AAI_4000", e);
- templateVars.add("GET Search");
- templateVars.add("getGenericQueryResponse");
- searchResult = Response
- .status(Status.INTERNAL_SERVER_ERROR)
- .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars))
- .build();
- } finally {
- // log success or failure
- if (ex != null){
- ErrorLogHelper.logException(ex);
- }
- }
-
- return searchResult;
- }
-
- /* ---------------- End Generic Query --------------------- */
-
- /**
- * Gets the nodes query response.
- *
- * @param headers the headers
- * @param req the req
- * @param searchNodeType the search node type
- * @param edgeFilterList the edge filter list
- * @param filterList the filter list
- * @return the nodes query response
- */
- /* ---------------- Start Nodes Query --------------------- */
- @GET
- @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
- @Path(NODES_QUERY)
- public Response getNodesQueryResponse(@Context HttpHeaders headers,
- @Context HttpServletRequest req,
- @QueryParam("search-node-type") final String searchNodeType,
- @QueryParam("edge-filter") final List<String> edgeFilterList,
- @QueryParam("filter") final List<String> filterList,
- @PathParam("version")String versionParam,
- @Context UriInfo info)
-
- {
- return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED,
- TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP,
- TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT,
- headers,
- info,
- HttpMethod.GET,
- new AaiCallable<Response>() {
- @Override
- public Response process() {
- return processNodesQueryResponse(headers, req, searchNodeType, edgeFilterList, filterList, versionParam);
- }
- }
- );
- }
- public Response processNodesQueryResponse(@Context HttpHeaders headers,
- @Context HttpServletRequest req,
- @QueryParam("search-node-type") final String searchNodeType,
- @QueryParam("edge-filter") final List<String> edgeFilterList,
- @QueryParam("filter") final List<String> filterList,
- @PathParam("version")String versionParam) {
- String methodName = "getNodesQueryResponse";
- AAIException ex = null;
- Response searchResult = null;
- String fromAppId = null;
- String transId = null;
- String rqstTm = genDate();
- ArrayList<String> templateVars = new ArrayList<String>();
- double dbTimeMsecs = 0;
- try {
- LoggingContext.save();
- LoggingContext.targetEntity(TARGET_ENTITY);
- LoggingContext.targetServiceName(methodName);
-
- fromAppId = getFromAppId(headers);
- transId = getTransId(headers);
- String realTime = headers.getRequestHeaders().getFirst("Real-Time");
- //only consider header value for search
- DBConnectionType type = this.determineConnectionType("force-cache", realTime);
-
- final SchemaVersion version = new SchemaVersion(versionParam);
-
- final ModelType factoryType = ModelType.MOXY;
- Loader loader = loaderFactory.createLoaderForVersion(factoryType, version);
- TransactionalGraphEngine dbEngine = new JanusGraphDBEngine(
- QueryStyle.TRAVERSAL,
- type,
- loader);
- DBSerializer dbSerializer = new DBSerializer(version, dbEngine, factoryType, fromAppId);
- UrlBuilder urlBuilder = new UrlBuilder(version, dbSerializer, schemaVersions, this.basePath);
-
- LoggingContext.startTime();
- StopWatch.conditionalStart();
- searchResult = searchGraph.runNodesQuery(headers,
- searchNodeType,
- edgeFilterList,
- filterList,
- dbEngine,
- loader,
- urlBuilder);
- dbTimeMsecs += StopWatch.stopIfStarted();
- LoggingContext.elapsedTime((long)dbTimeMsecs,TimeUnit.MILLISECONDS);
- LoggingContext.successStatusFields();
- LOGGER.info ("Completed");
-
- LoggingContext.restoreIfPossible();
- LoggingContext.successStatusFields();
-
- String respTm = genDate();
- } catch (AAIException e) {
- LoggingContext.restoreIfPossible();
- // send error response
- ex = e;
- templateVars.add("GET Search");
- templateVars.add("getNodesQueryResponse");
- searchResult = Response
- .status(e.getErrorObject().getHTTPResponseCode())
- .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars))
- .build();
- } catch (Exception e) {
- LoggingContext.restoreIfPossible();
- // send error response
- ex = new AAIException("AAI_4000", e);
- templateVars.add("GET Search");
- templateVars.add("getNodesQueryResponse");
- searchResult = Response
- .status(Status.INTERNAL_SERVER_ERROR)
- .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars))
- .build();
- } finally {
- // log success or failure
- if (ex != null){
- ErrorLogHelper.logException(ex);
- }
- }
- return searchResult;
- }
-
-
-
+ private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(SearchProvider.class);
+
+ public static final String GENERIC_QUERY = "/generic-query";
+
+ public static final String NODES_QUERY = "/nodes-query";
+
+ public static final String TARGET_ENTITY = "DB";
+
+ private SearchGraph searchGraph;
+
+ private LoaderFactory loaderFactory;
+
+ private SchemaVersions schemaVersions;
+
+ private String basePath;
+
+ @Autowired
+ public SearchProvider(LoaderFactory loaderFactory, SearchGraph searchGraph, SchemaVersions schemaVersions,
+ @Value("${schema.uri.base.path}") String basePath) {
+ this.loaderFactory = loaderFactory;
+ this.searchGraph = searchGraph;
+ this.schemaVersions = schemaVersions;
+ this.basePath = basePath;
+ }
+
+ /**
+ * Gets the generic query response.
+ *
+ * @param headers the headers
+ * @param req the req
+ * @param startNodeType the start node type
+ * @param startNodeKeyParams the start node key params
+ * @param includeNodeTypes the include node types
+ * @param depth the depth
+ * @return the generic query response
+ */
+ /* ---------------- Start Generic Query --------------------- */
+ @GET
+ @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+ @Path(GENERIC_QUERY)
+ public Response getGenericQueryResponse(@Context HttpHeaders headers, @Context HttpServletRequest req,
+ @QueryParam("start-node-type") final String startNodeType,
+ @QueryParam("key") final List<String> startNodeKeyParams,
+ @QueryParam("include") final List<String> includeNodeTypes, @QueryParam("depth") final int depth,
+ @PathParam("version") String versionParam, @Context UriInfo info) {
+ return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP,
+ TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET,
+ new AaiCallable<Response>() {
+ @Override
+ public Response process() {
+ return processGenericQueryResponse(headers, req, startNodeType, startNodeKeyParams,
+ includeNodeTypes, depth, versionParam);
+ }
+ });
+ }
+
+ public Response processGenericQueryResponse(@Context HttpHeaders headers, @Context HttpServletRequest req,
+ @QueryParam("start-node-type") final String startNodeType,
+ @QueryParam("key") final List<String> startNodeKeyParams,
+ @QueryParam("include") final List<String> includeNodeTypes, @QueryParam("depth") final int depth,
+ @PathParam("version") String versionParam) {
+
+ String methodName = "getGenericQueryResponse";
+ AAIException ex = null;
+ Response searchResult = null;
+ String fromAppId = null;
+ String transId = null;
+ String rqstTm = genDate();
+ ArrayList<String> templateVars = new ArrayList<String>();
+ double dbTimeMsecs = 0;
+ try {
+ LoggingContext.save();
+ LoggingContext.targetEntity(TARGET_ENTITY);
+ LoggingContext.targetServiceName(methodName);
+
+ fromAppId = getFromAppId(headers);
+ transId = getTransId(headers);
+ String realTime = headers.getRequestHeaders().getFirst("Real-Time");
+ // only consider header value for search
+ DBConnectionType type = this.determineConnectionType("force-cache", realTime);
+
+ final SchemaVersion version = new SchemaVersion(versionParam);
+
+ final ModelType factoryType = ModelType.MOXY;
+ Loader loader = loaderFactory.createLoaderForVersion(factoryType, version);
+ TransactionalGraphEngine dbEngine = new JanusGraphDBEngine(QueryStyle.TRAVERSAL, type, loader);
+ DBSerializer dbSerializer = new DBSerializer(version, dbEngine, factoryType, fromAppId);
+ UrlBuilder urlBuilder = new UrlBuilder(version, dbSerializer, schemaVersions, this.basePath);
+ LoggingContext.startTime();
+ StopWatch.conditionalStart();
+ searchResult = searchGraph
+ .runGenericQuery(new GenericQueryBuilder().setHeaders(headers).setStartNodeType(startNodeType)
+ .setStartNodeKeyParams(startNodeKeyParams).setIncludeNodeTypes(includeNodeTypes)
+ .setDepth(depth).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder));
+ dbTimeMsecs += StopWatch.stopIfStarted();
+
+ LoggingContext.successStatusFields();
+ LoggingContext.elapsedTime((long) dbTimeMsecs, TimeUnit.MILLISECONDS);
+
+ LOGGER.info("Completed");
+ LoggingContext.restoreIfPossible();
+ LoggingContext.successStatusFields();
+
+ String respTm = genDate();
+
+ } catch (AAIException e) {
+ LoggingContext.restoreIfPossible();
+ // send error response
+ ex = e;
+ templateVars.add("GET Search");
+ templateVars.add("getGenericQueryResponse");
+ searchResult = Response.status(e.getErrorObject().getHTTPResponseCode())
+ .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars))
+ .build();
+ } catch (Exception e) {
+ LoggingContext.restoreIfPossible();
+ // send error response
+ ex = new AAIException("AAI_4000", e);
+ templateVars.add("GET Search");
+ templateVars.add("getGenericQueryResponse");
+ searchResult = Response.status(Status.INTERNAL_SERVER_ERROR)
+ .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars))
+ .build();
+ } finally {
+ // log success or failure
+ if (ex != null) {
+ ErrorLogHelper.logException(ex);
+ }
+ }
+
+ return searchResult;
+ }
+
+ /* ---------------- End Generic Query --------------------- */
+
+ /**
+ * Gets the nodes query response.
+ *
+ * @param headers the headers
+ * @param req the req
+ * @param searchNodeType the search node type
+ * @param edgeFilterList the edge filter list
+ * @param filterList the filter list
+ * @return the nodes query response
+ */
+ /* ---------------- Start Nodes Query --------------------- */
+ @GET
+ @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+ @Path(NODES_QUERY)
+ public Response getNodesQueryResponse(@Context HttpHeaders headers, @Context HttpServletRequest req,
+ @QueryParam("search-node-type") final String searchNodeType,
+ @QueryParam("edge-filter") final List<String> edgeFilterList,
+ @QueryParam("filter") final List<String> filterList, @PathParam("version") String versionParam,
+ @Context UriInfo info)
+
+ {
+ return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP,
+ TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET,
+ new AaiCallable<Response>() {
+ @Override
+ public Response process() {
+ return processNodesQueryResponse(headers, req, searchNodeType, edgeFilterList, filterList,
+ versionParam);
+ }
+ });
+ }
+
+ public Response processNodesQueryResponse(@Context HttpHeaders headers, @Context HttpServletRequest req,
+ @QueryParam("search-node-type") final String searchNodeType,
+ @QueryParam("edge-filter") final List<String> edgeFilterList,
+ @QueryParam("filter") final List<String> filterList, @PathParam("version") String versionParam) {
+ String methodName = "getNodesQueryResponse";
+ AAIException ex = null;
+ Response searchResult = null;
+ String fromAppId = null;
+ String transId = null;
+ String rqstTm = genDate();
+ ArrayList<String> templateVars = new ArrayList<String>();
+ double dbTimeMsecs = 0;
+ try {
+ LoggingContext.save();
+ LoggingContext.targetEntity(TARGET_ENTITY);
+ LoggingContext.targetServiceName(methodName);
+
+ fromAppId = getFromAppId(headers);
+ transId = getTransId(headers);
+ String realTime = headers.getRequestHeaders().getFirst("Real-Time");
+ // only consider header value for search
+ DBConnectionType type = this.determineConnectionType("force-cache", realTime);
+
+ final SchemaVersion version = new SchemaVersion(versionParam);
+
+ final ModelType factoryType = ModelType.MOXY;
+ Loader loader = loaderFactory.createLoaderForVersion(factoryType, version);
+ TransactionalGraphEngine dbEngine = new JanusGraphDBEngine(QueryStyle.TRAVERSAL, type, loader);
+ DBSerializer dbSerializer = new DBSerializer(version, dbEngine, factoryType, fromAppId);
+ UrlBuilder urlBuilder = new UrlBuilder(version, dbSerializer, schemaVersions, this.basePath);
+
+ LoggingContext.startTime();
+ StopWatch.conditionalStart();
+ searchResult = searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(headers)
+ .setTargetNodeType(searchNodeType).setEdgeFilterParams(edgeFilterList).setFilterParams(filterList)
+ .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder));
+
+ dbTimeMsecs += StopWatch.stopIfStarted();
+ LoggingContext.elapsedTime((long) dbTimeMsecs, TimeUnit.MILLISECONDS);
+ LoggingContext.successStatusFields();
+ LOGGER.info("Completed");
+
+ LoggingContext.restoreIfPossible();
+ LoggingContext.successStatusFields();
+
+ String respTm = genDate();
+ } catch (AAIException e) {
+ LoggingContext.restoreIfPossible();
+ // send error response
+ ex = e;
+ templateVars.add("GET Search");
+ templateVars.add("getNodesQueryResponse");
+ searchResult = Response.status(e.getErrorObject().getHTTPResponseCode())
+ .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars))
+ .build();
+ } catch (Exception e) {
+ LoggingContext.restoreIfPossible();
+ // send error response
+ ex = new AAIException("AAI_4000", e);
+ templateVars.add("GET Search");
+ templateVars.add("getNodesQueryResponse");
+ searchResult = Response.status(Status.INTERNAL_SERVER_ERROR)
+ .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars))
+ .build();
+ } finally {
+ // log success or failure
+ if (ex != null) {
+ ErrorLogHelper.logException(ex);
+ }
+ }
+ return searchResult;
+ }
+
+
+
}