aboutsummaryrefslogtreecommitdiffstats
path: root/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java
diff options
context:
space:
mode:
authorFiete Ostkamp <Fiete.Ostkamp@telekom.de>2022-10-05 09:55:45 +0200
committerFiete Ostkamp <Fiete.Ostkamp@telekom.de>2022-10-05 09:55:45 +0200
commite632cf8afa27bdedf8b2044c430cd604ab7d4987 (patch)
tree85cf35932109fd858e09f4bf1a0a5d0724057697 /aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java
parent20ea11d8067c57fe47d9bdc64663b8cc8a5742ca (diff)
Run the formatter for the traversal service
When building the traversal service with mvn install, the spotless and formatter plugins are invoked to verify the formatting. This results in 40000 lines of format violations that are printed out to the console. By invoking mvn formatter:format spotless:apply process-sources this number can be reduced to 2000 lines of format violations. Issue-ID: AAI-3543 Signed-off-by: Fiete Ostkamp <Fiete.Ostkamp@telekom.de> Change-Id: Id0011b3e0a626369c79fd0656cd44455347b7fde
Diffstat (limited to 'aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java')
-rw-r--r--aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java429
1 files changed, 214 insertions, 215 deletions
diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java b/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java
index fefd2dc..2b6bbb9 100644
--- a/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java
+++ b/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java
@@ -8,7 +8,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * 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,
@@ -22,7 +22,17 @@ package org.onap.aai.rest;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
+
import io.micrometer.core.annotation.Timed;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.*;
+import javax.ws.rs.core.*;
+import javax.ws.rs.core.Response.Status;
+
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.janusgraph.core.SchemaViolationException;
import org.onap.aai.concurrent.AaiCallable;
@@ -51,222 +61,211 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.*;
-import javax.ws.rs.core.*;
-import javax.ws.rs.core.Response.Status;
-import java.util.*;
-import java.util.stream.Collectors;
-
@Path("{version: v[1-9][0-9]*|latest}/dsl")
@Timed
public class DslConsumer extends TraversalConsumer {
- private HttpEntry traversalUriHttpEntry;
-
- private QueryProcessorType processorType = QueryProcessorType.LOCAL_GROOVY;
-
- private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumer.class);
-
- private DslQueryProcessor dslQueryProcessor;
-
- private SchemaVersions schemaVersions;
-
- private String basePath;
-
- private GremlinServerSingleton gremlinServerSingleton;
- private final QueryVersion DEFAULT_VERSION = QueryVersion.V1;
- private QueryVersion dslApiVersion = DEFAULT_VERSION;
-
- private XmlFormatTransformer xmlFormatTransformer;
-
- @Autowired
- public DslConsumer(HttpEntry traversalUriHttpEntry, DslQueryProcessor dslQueryProcessor,
- SchemaVersions schemaVersions, GremlinServerSingleton gremlinServerSingleton,
- XmlFormatTransformer xmlFormatTransformer,
- @Value("${schema.uri.base.path}") String basePath) {
- this.traversalUriHttpEntry = traversalUriHttpEntry;
- this.dslQueryProcessor = dslQueryProcessor;
- this.schemaVersions = schemaVersions;
- this.gremlinServerSingleton = gremlinServerSingleton;
- this.xmlFormatTransformer = xmlFormatTransformer;
- this.basePath = basePath;
- }
-
- @PUT
- @Consumes({ MediaType.APPLICATION_JSON })
- @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
- public Response executeQuery(String content,
- @PathParam("version") String versionParam,
- @DefaultValue("graphson") @QueryParam("format") String queryFormat,
- @DefaultValue("no_op") @QueryParam("subgraph") String subgraph,
- @DefaultValue("all") @QueryParam("validate") String validate,
- @Context HttpHeaders headers,
- @Context HttpServletRequest req,
- @Context UriInfo info,
- @DefaultValue("-1") @QueryParam("resultIndex") String resultIndex,
- @DefaultValue("-1") @QueryParam("resultSize") String resultSize) {
- Set<String> roles = this.getRoles(req.getUserPrincipal());
-
- return runner(TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_ENABLED,
- TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_APP,
- TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_LIMIT,
- headers,
- info,
- HttpMethod.PUT,
- new AaiCallable() {
- @Override
- public Response process() throws Exception {
- return (processExecuteQuery(content, req, versionParam, queryFormat, subgraph, validate, headers, info,
- resultIndex, resultSize, roles));
- }
- }
- );
- }
-
- public Response processExecuteQuery(String content, HttpServletRequest req, String versionParam, String queryFormat, String subgraph,
- String validate, HttpHeaders headers, UriInfo info, String resultIndex,
- String resultSize, Set<String> roles) {
-
- String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId");
- String dslOverride = headers.getRequestHeaders().getFirst("X-DslOverride");
-
- Optional<String> dslApiVersionHeader = Optional.ofNullable(headers.getRequestHeaders().getFirst("X-DslApiVersion"));
- if (dslApiVersionHeader.isPresent()) {
- try {
- dslApiVersion = QueryVersion.valueOf(dslApiVersionHeader.get());
- } catch (IllegalArgumentException e) {
- LOGGER.debug("Defaulting DSL Api Version to "+DEFAULT_VERSION);
- }
- }
-
- Response response;
- SchemaVersion version = new SchemaVersion(versionParam);
-
- TransactionalGraphEngine dbEngine = null;
- try {
- String serverBase = req.getRequestURL().toString().replaceAll("/(v[0-9]+|latest)/.*", "/");
- traversalUriHttpEntry.setHttpEntryProperties(version, serverBase);
- traversalUriHttpEntry.setPaginationParameters(resultIndex, resultSize);
- dbEngine = traversalUriHttpEntry.getDbEngine();
- JsonObject input = new JsonParser().parse(content).getAsJsonObject();
- JsonElement dslElement = input.get("dsl");
- String dsl = "";
- if (dslElement != null) {
- dsl = dslElement.getAsString();
- }
-
-
- boolean isDslOverride = dslOverride != null && !AAIConfig.get(TraversalConstants.DSL_OVERRIDE).equals("false")
- && dslOverride.equals(AAIConfig.get(TraversalConstants.DSL_OVERRIDE));
-
- if(isDslOverride) {
- dslQueryProcessor.setStartNodeValidationFlag(false);
- }
-
- dslQueryProcessor.setValidationRules(validate);
-
- Format format = Format.getFormat(queryFormat);
-
- if(isAggregate(format)){
- dslQueryProcessor.setAggregate(true);
- }
-
- if(isHistory(format)){
- validateHistoryParams(format, info.getQueryParameters());
- }
-
- GraphTraversalSource traversalSource = getTraversalSource(dbEngine, format, info, roles);
-
- GenericQueryProcessor processor = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton)
- .queryFrom(dsl, "dsl").queryProcessor(dslQueryProcessor).version(dslApiVersion).processWith(processorType)
- .format(format).uriParams(info.getQueryParameters()).traversalSource(isHistory(format), traversalSource).create();
-
- SubGraphStyle subGraphStyle = SubGraphStyle.valueOf(subgraph);
- List<Object> vertTemp = processor.execute(subGraphStyle);
-
-
- // Dedup if duplicate objects are returned in each array in the aggregate format scenario.
- List<Object> vertTempDedupedObjectList = dedupObjectInAggregateFormatResult(vertTemp);
-
- List <Object> vertices;
- if (isAggregate(format)){
- vertices = traversalUriHttpEntry.getPaginatedVertexListForAggregateFormat(vertTempDedupedObjectList);
- } else {
- vertices = traversalUriHttpEntry.getPaginatedVertexList(vertTemp);
- }
-
- DBSerializer serializer = new DBSerializer(version, dbEngine, ModelType.MOXY, sourceOfTruth);
- FormatFactory ff = new FormatFactory(traversalUriHttpEntry.getLoader(), serializer, schemaVersions,
- this.basePath, serverBase);
-
- MultivaluedMap<String, String> mvm = new MultivaluedHashMap<>();
- mvm.putAll(info.getQueryParameters());
- if (isHistory(format)) {
- mvm.putSingle("startTs", Long.toString(getStartTime(format, mvm)));
- mvm.putSingle("endTs", Long.toString(getEndTime(mvm)));
- }
- Formatter formatter = ff.get(format, mvm);
-
- final Map<String, List<String>> propertiesMap = processor.getPropertiesMap();
- String result = "";
- if (propertiesMap != null && !propertiesMap.isEmpty()){
- result = formatter.output(vertices, propertiesMap).toString();
- }
- else {
- result = formatter.output(vertices).toString();
- }
-
- String acceptType = headers.getHeaderString("Accept");
-
- if(acceptType == null){
- acceptType = MediaType.APPLICATION_JSON;
- }
-
- if(MediaType.APPLICATION_XML_TYPE.isCompatible(MediaType.valueOf(acceptType))){
- result = xmlFormatTransformer.transform(result);
- }
-
- if(traversalUriHttpEntry.isPaginated()){
- response = Response.status(Status.OK)
- .type(acceptType)
- .header("total-results", traversalUriHttpEntry.getTotalVertices())
- .header("total-pages", traversalUriHttpEntry.getTotalPaginationBuckets())
- .entity(result)
- .build();
- }else {
- response = Response.status(Status.OK)
- .type(acceptType)
- .entity(result).build();
- }
-
- } catch (AAIException e) {
- response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, e);
- } catch (SchemaViolationException sve) {
- AAIException ex = new AAIException("AAI_4020", sve);
- response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, ex);
- } catch (Exception e) {
- AAIException ex = new AAIException("AAI_4000", e);
- response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, ex);
- } finally {
- if (dbEngine != null) {
- dbEngine.rollback();
- }
-
- }
-
- return response;
- }
-
- private List<Object> dedupObjectInAggregateFormatResult(List<Object> vertTemp) {
- List<Object> vertTempDedupedObjectList = new ArrayList<Object>();
- Iterator<Object> itr = vertTemp.listIterator();
- while (itr.hasNext()){
- Object o = itr.next();
- if (o instanceof ArrayList) {
- vertTempDedupedObjectList.add(((ArrayList) o).stream().distinct().collect(Collectors.toList()));
- }
- }
- return vertTempDedupedObjectList;
- }
+ private HttpEntry traversalUriHttpEntry;
+
+ private QueryProcessorType processorType = QueryProcessorType.LOCAL_GROOVY;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumer.class);
+
+ private DslQueryProcessor dslQueryProcessor;
+
+ private SchemaVersions schemaVersions;
+
+ private String basePath;
+
+ private GremlinServerSingleton gremlinServerSingleton;
+ private final QueryVersion DEFAULT_VERSION = QueryVersion.V1;
+ private QueryVersion dslApiVersion = DEFAULT_VERSION;
+
+ private XmlFormatTransformer xmlFormatTransformer;
+
+ @Autowired
+ public DslConsumer(HttpEntry traversalUriHttpEntry, DslQueryProcessor dslQueryProcessor,
+ SchemaVersions schemaVersions, GremlinServerSingleton gremlinServerSingleton,
+ XmlFormatTransformer xmlFormatTransformer,
+ @Value("${schema.uri.base.path}") String basePath) {
+ this.traversalUriHttpEntry = traversalUriHttpEntry;
+ this.dslQueryProcessor = dslQueryProcessor;
+ this.schemaVersions = schemaVersions;
+ this.gremlinServerSingleton = gremlinServerSingleton;
+ this.xmlFormatTransformer = xmlFormatTransformer;
+ this.basePath = basePath;
+ }
+
+ @PUT
+ @Consumes({MediaType.APPLICATION_JSON})
+ @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+ public Response executeQuery(String content, @PathParam("version") String versionParam,
+ @DefaultValue("graphson") @QueryParam("format") String queryFormat,
+ @DefaultValue("no_op") @QueryParam("subgraph") String subgraph,
+ @DefaultValue("all") @QueryParam("validate") String validate, @Context HttpHeaders headers,
+ @Context HttpServletRequest req, @Context UriInfo info,
+ @DefaultValue("-1") @QueryParam("resultIndex") String resultIndex,
+ @DefaultValue("-1") @QueryParam("resultSize") String resultSize) {
+ Set<String> roles = this.getRoles(req.getUserPrincipal());
+
+ return runner(TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_ENABLED,
+ TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_APP,
+ TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_LIMIT, headers, info, HttpMethod.PUT,
+ new AaiCallable() {
+ @Override
+ public Response process() throws Exception {
+ return (processExecuteQuery(content, req, versionParam, queryFormat, subgraph,
+ validate, headers, info, resultIndex, resultSize, roles));
+ }
+ });
+ }
+
+ public Response processExecuteQuery(String content, HttpServletRequest req, String versionParam,
+ String queryFormat, String subgraph, String validate, HttpHeaders headers, UriInfo info,
+ String resultIndex, String resultSize, Set<String> roles) {
+
+ String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId");
+ String dslOverride = headers.getRequestHeaders().getFirst("X-DslOverride");
+
+ Optional<String> dslApiVersionHeader =
+ Optional.ofNullable(headers.getRequestHeaders().getFirst("X-DslApiVersion"));
+ if (dslApiVersionHeader.isPresent()) {
+ try {
+ dslApiVersion = QueryVersion.valueOf(dslApiVersionHeader.get());
+ } catch (IllegalArgumentException e) {
+ LOGGER.debug("Defaulting DSL Api Version to " + DEFAULT_VERSION);
+ }
+ }
+
+ Response response;
+ SchemaVersion version = new SchemaVersion(versionParam);
+
+ TransactionalGraphEngine dbEngine = null;
+ try {
+ String serverBase =
+ req.getRequestURL().toString().replaceAll("/(v[0-9]+|latest)/.*", "/");
+ traversalUriHttpEntry.setHttpEntryProperties(version, serverBase);
+ traversalUriHttpEntry.setPaginationParameters(resultIndex, resultSize);
+ dbEngine = traversalUriHttpEntry.getDbEngine();
+ JsonObject input = new JsonParser().parse(content).getAsJsonObject();
+ JsonElement dslElement = input.get("dsl");
+ String dsl = "";
+ if (dslElement != null) {
+ dsl = dslElement.getAsString();
+ }
+
+ boolean isDslOverride = dslOverride != null
+ && !AAIConfig.get(TraversalConstants.DSL_OVERRIDE).equals("false")
+ && dslOverride.equals(AAIConfig.get(TraversalConstants.DSL_OVERRIDE));
+
+ if (isDslOverride) {
+ dslQueryProcessor.setStartNodeValidationFlag(false);
+ }
+
+ dslQueryProcessor.setValidationRules(validate);
+
+ Format format = Format.getFormat(queryFormat);
+
+ if (isAggregate(format)) {
+ dslQueryProcessor.setAggregate(true);
+ }
+
+ if (isHistory(format)) {
+ validateHistoryParams(format, info.getQueryParameters());
+ }
+
+ GraphTraversalSource traversalSource =
+ getTraversalSource(dbEngine, format, info, roles);
+
+ GenericQueryProcessor processor =
+ new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton)
+ .queryFrom(dsl, "dsl").queryProcessor(dslQueryProcessor).version(dslApiVersion)
+ .processWith(processorType).format(format).uriParams(info.getQueryParameters())
+ .traversalSource(isHistory(format), traversalSource).create();
+
+ SubGraphStyle subGraphStyle = SubGraphStyle.valueOf(subgraph);
+ List<Object> vertTemp = processor.execute(subGraphStyle);
+
+ // Dedup if duplicate objects are returned in each array in the aggregate format
+ // scenario.
+ List<Object> vertTempDedupedObjectList = dedupObjectInAggregateFormatResult(vertTemp);
+
+ List<Object> vertices;
+ if (isAggregate(format)) {
+ vertices = traversalUriHttpEntry
+ .getPaginatedVertexListForAggregateFormat(vertTempDedupedObjectList);
+ } else {
+ vertices = traversalUriHttpEntry.getPaginatedVertexList(vertTemp);
+ }
+
+ DBSerializer serializer =
+ new DBSerializer(version, dbEngine, ModelType.MOXY, sourceOfTruth);
+ FormatFactory ff = new FormatFactory(traversalUriHttpEntry.getLoader(), serializer,
+ schemaVersions, this.basePath, serverBase);
+
+ MultivaluedMap<String, String> mvm = new MultivaluedHashMap<>();
+ mvm.putAll(info.getQueryParameters());
+ if (isHistory(format)) {
+ mvm.putSingle("startTs", Long.toString(getStartTime(format, mvm)));
+ mvm.putSingle("endTs", Long.toString(getEndTime(mvm)));
+ }
+ Formatter formatter = ff.get(format, mvm);
+
+ final Map<String, List<String>> propertiesMap = processor.getPropertiesMap();
+ String result = "";
+ if (propertiesMap != null && !propertiesMap.isEmpty()) {
+ result = formatter.output(vertices, propertiesMap).toString();
+ } else {
+ result = formatter.output(vertices).toString();
+ }
+
+ String acceptType = headers.getHeaderString("Accept");
+
+ if (acceptType == null) {
+ acceptType = MediaType.APPLICATION_JSON;
+ }
+
+ if (MediaType.APPLICATION_XML_TYPE.isCompatible(MediaType.valueOf(acceptType))) {
+ result = xmlFormatTransformer.transform(result);
+ }
+
+ if (traversalUriHttpEntry.isPaginated()) {
+ response = Response.status(Status.OK).type(acceptType)
+ .header("total-results", traversalUriHttpEntry.getTotalVertices())
+ .header("total-pages", traversalUriHttpEntry.getTotalPaginationBuckets())
+ .entity(result).build();
+ } else {
+ response = Response.status(Status.OK).type(acceptType).entity(result).build();
+ }
+
+ } catch (AAIException e) {
+ response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, e);
+ } catch (SchemaViolationException sve) {
+ AAIException ex = new AAIException("AAI_4020", sve);
+ response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, ex);
+ } catch (Exception e) {
+ AAIException ex = new AAIException("AAI_4000", e);
+ response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, ex);
+ } finally {
+ if (dbEngine != null) {
+ dbEngine.rollback();
+ }
+
+ }
+
+ return response;
+ }
+
+ private List<Object> dedupObjectInAggregateFormatResult(List<Object> vertTemp) {
+ List<Object> vertTempDedupedObjectList = new ArrayList<Object>();
+ Iterator<Object> itr = vertTemp.listIterator();
+ while (itr.hasNext()) {
+ Object o = itr.next();
+ if (o instanceof ArrayList) {
+ vertTempDedupedObjectList
+ .add(((ArrayList) o).stream().distinct().collect(Collectors.toList()));
+ }
+ }
+ return vertTempDedupedObjectList;
+ }
}