Enhancements for the aai-common library
[aai/aai-common.git] / aai-core / src / main / java / org / onap / aai / serialization / queryformats / PathedURL.java
index a99ba7f..417f73c 100644 (file)
@@ -23,6 +23,8 @@ package org.onap.aai.serialization.queryformats;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 
+import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -31,9 +33,15 @@ import org.onap.aai.exceptions.AAIException;
 import org.onap.aai.introspection.Introspector;
 import org.onap.aai.introspection.Loader;
 import org.onap.aai.introspection.exceptions.AAIUnknownObjectException;
+import org.onap.aai.serialization.db.DBSerializer;
 import org.onap.aai.serialization.queryformats.exceptions.AAIFormatVertexException;
+import org.onap.aai.serialization.queryformats.params.AsTree;
+import org.onap.aai.serialization.queryformats.params.Depth;
+import org.onap.aai.serialization.queryformats.params.NodesOnly;
 import org.onap.aai.serialization.queryformats.utils.UrlBuilder;
 
+import javax.ws.rs.core.MultivaluedMap;
+
 public final class PathedURL extends MultiFormatMapper {
 
     private final UrlBuilder urlBuilder;
@@ -47,6 +55,13 @@ public final class PathedURL extends MultiFormatMapper {
         this.loader = loader;
     }
 
+    public PathedURL(Builder builder) {
+        this.urlBuilder = builder.getUrlBuilder();
+        this.parser = new JsonParser();
+        this.loader = builder.getLoader();
+        this.isTree = builder.isTree();
+    }
+
     @Override
     public int parallelThreshold() {
         return 20;
@@ -79,4 +94,101 @@ public final class PathedURL extends MultiFormatMapper {
 
     }
 
+    @Override
+    protected Optional<JsonObject> getJsonFromVertex(Vertex input, Map<String, List<String>> properties) throws AAIFormatVertexException {
+        return Optional.empty();
+    }
+
+    public static class Builder implements NodesOnly<Builder>, Depth<Builder>, AsTree<Builder> {
+
+        private final Loader loader;
+        private final DBSerializer serializer;
+        private final UrlBuilder urlBuilder;
+        private boolean includeUrl = false;
+        private boolean nodesOnly = false;
+        private int depth = 1;
+        private MultivaluedMap<String, String> params;
+        private boolean tree = false;
+
+        public Builder(Loader loader, DBSerializer serializer, UrlBuilder urlBuilder) {
+            this.loader = loader;
+            this.serializer = serializer;
+            this.urlBuilder = urlBuilder;
+        }
+
+        public Builder(Loader loader, DBSerializer serializer, UrlBuilder urlBuilder, MultivaluedMap<String, String> params) {
+            this.loader = loader;
+            this.serializer = serializer;
+            this.urlBuilder = urlBuilder;
+            this.params = params;
+        }
+
+        protected Loader getLoader() {
+            return this.loader;
+        }
+
+        protected DBSerializer getSerializer() {
+            return this.serializer;
+        }
+
+        protected UrlBuilder getUrlBuilder() {
+            return this.urlBuilder;
+        }
+
+        protected MultivaluedMap<String, String> getParams() { return this.params; }
+
+        public boolean isSkipRelatedTo() {
+            if (params != null) {
+                boolean isSkipRelatedTo = true;
+                if (params.containsKey("skip-related-to")) {
+                    String skipRelatedTo = params.getFirst("skip-related-to");
+                    isSkipRelatedTo = !(skipRelatedTo != null && skipRelatedTo.equals("false"));
+                } else {
+                    // if skip-related-to param is missing, then default it to false;
+                    isSkipRelatedTo = false;
+                }
+                return isSkipRelatedTo;
+            }
+            return true;
+        }
+
+        protected boolean isTree() { return this.tree; }
+
+        public Builder isTree(Boolean tree) {
+            this.tree = tree;
+            return this;
+        }
+
+        public Builder includeUrl() {
+            this.includeUrl = true;
+            return this;
+        }
+
+        public Builder nodesOnly(Boolean nodesOnly) {
+            this.nodesOnly = nodesOnly;
+            return this;
+        }
+
+        public boolean isNodesOnly() {
+            return this.nodesOnly;
+        }
+
+        public Builder depth(Integer depth) {
+            this.depth = depth;
+            return this;
+        }
+
+        public int getDepth() {
+            return this.depth;
+        }
+
+        public boolean isIncludeUrl() {
+            return this.includeUrl;
+        }
+
+        public PathedURL build() throws AAIException {
+            return new PathedURL(this);
+        }
+    }
+
 }