Enhancements for the aai-common library
[aai/aai-common.git] / aai-core / src / main / java / org / onap / aai / serialization / queryformats / IdURL.java
index c5cb925..c2c252a 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 class IdURL extends MultiFormatMapper {
 
     private final UrlBuilder urlBuilder;
@@ -46,6 +54,13 @@ public class IdURL extends MultiFormatMapper {
         this.loader = loader;
     }
 
+    public IdURL(Builder builder) throws AAIException {
+        this.urlBuilder = builder.getUrlBuilder();
+        this.parser = new JsonParser();
+        this.loader = builder.getLoader();
+        this.isTree = builder.isTree();
+    }
+
     @Override
     public int parallelThreshold() {
         return 2500;
@@ -69,4 +84,101 @@ public class IdURL 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 IdURL build() throws AAIException {
+            return new IdURL(this);
+        }
+    }
 }