Continue to separate AAIClient into GraphInventory 83/78883/2
authorBenjamin, Max (mb388a) <mb388a@us.att.com>
Wed, 20 Feb 2019 21:53:01 +0000 (16:53 -0500)
committerBenjamin, Max (mb388a) <mb388a@us.att.com>
Wed, 20 Feb 2019 22:24:33 +0000 (17:24 -0500)
added narad specific relationship implementation
add mapper to narad rest client
wrapper now returns correct relationships type
equals now longer only works on AAIUris

Change-Id: I12325f76ae08659ffe744a56f5e6b6d54196b054
Issue-ID: SO-1541
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
common/src/main/java/org/onap/so/client/aai/AAIRestClient.java
common/src/main/java/org/onap/so/client/aai/entities/AAIResultWrapper.java
common/src/main/java/org/onap/so/client/aai/entities/Relationships.java
common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryRestClient.java [new file with mode: 0644]
common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryRelationships.java [new file with mode: 0644]
common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java
common/src/main/java/org/onap/so/client/graphinventory/entities/uri/SimpleUri.java

index a265119..30d1b04 100644 (file)
@@ -27,20 +27,17 @@ import java.util.Optional;
 import javax.ws.rs.core.Response;
 
 import org.onap.so.client.ResponseExceptionMapper;
-import org.onap.so.client.RestClientSSL;
 import org.onap.so.client.graphinventory.GraphInventoryPatchConverter;
+import org.onap.so.client.graphinventory.GraphInventoryRestClient;
 import org.onap.so.client.policy.CommonObjectMapperProvider;
 import org.onap.so.utils.TargetEntity;
 
-public class AAIRestClient extends RestClientSSL {
+public class AAIRestClient extends GraphInventoryRestClient {
 
        private final AAIProperties aaiProperties;
-       private static final AAICommonObjectMapperProvider standardProvider = new AAICommonObjectMapperProvider();
 
-       private final GraphInventoryPatchConverter patchConverter = new GraphInventoryPatchConverter();
-       
        protected AAIRestClient(AAIProperties props, URI uri) {
-               super(props, Optional.of(uri));
+               super(props, uri);
                this.aaiProperties = props;
        }
 
@@ -67,27 +64,8 @@ public class AAIRestClient extends RestClientSSL {
                return Optional.of(new AAIClientResponseExceptionMapper());
        }
        
-       @Override
-       protected CommonObjectMapperProvider getCommonObjectMapperProvider() {
-               return standardProvider;
-       }
-
-       @Override
-       public Response patch(Object obj) {
-               return super.patch(convertToPatchFormat(obj));
-       }
-
-       @Override
-       public <T> T patch(Object obj, Class<T> resultClass) {
-               return super.patch(convertToPatchFormat(obj), resultClass);
-       }
-       
        protected GraphInventoryPatchConverter getPatchConverter() {
                return this.patchConverter;
        }
-       
-       protected String convertToPatchFormat(Object obj) {
-               return getPatchConverter().convertPatchFormat(obj);
-       }
 
 }
index 9b3f98b..5ce81ce 100644 (file)
@@ -26,7 +26,7 @@ import org.onap.so.client.graphinventory.entities.GraphInventoryResultWrapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class AAIResultWrapper extends GraphInventoryResultWrapper implements Serializable {
+public class AAIResultWrapper extends GraphInventoryResultWrapper<Relationships> implements Serializable {
 
        private static final long serialVersionUID = 5895841925807816737L;
        private final static transient Logger logger = LoggerFactory.getLogger(AAIResultWrapper.class);
@@ -38,4 +38,9 @@ public class AAIResultWrapper extends GraphInventoryResultWrapper implements Ser
        public AAIResultWrapper(Object aaiObject) {
                super(aaiObject, logger);
        }
+
+       @Override
+       protected Relationships createRelationships(String json) {
+               return new Relationships(json);
+       }
 }
index e907bc9..61a2f4b 100644 (file)
 
 package org.onap.so.client.aai.entities;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.function.Predicate;
 
 import javax.ws.rs.core.UriBuilder;
 
-import org.onap.so.client.aai.AAICommonObjectMapperProvider;
 import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.AAIResourcesClient;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.client.graphinventory.GraphInventoryObjectName;
-import org.onap.so.jsonpath.JsonPathUtil;
+import org.onap.so.client.graphinventory.entities.GraphInventoryRelationships;
 
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.CaseFormat;
+public class Relationships extends GraphInventoryRelationships<AAIResultWrapper, AAIResourceUri, AAIObjectType>{
 
-public class Relationships {
-
-       private final ObjectMapper mapper;
-       private Map<String, Object> map;
-       private final String jsonBody;
        public Relationships(String json) {
-               this.jsonBody = json;
-               this.mapper = new AAICommonObjectMapperProvider().getMapper();
-               try {
-                       this.map = mapper.readValue(json, new TypeReference<Map<String, Object>>() {});
-               } catch (IOException e) {
-                       this.map = new HashMap<>();
-               }
-       }
-       
-       public List<AAIResultWrapper> getByType(GraphInventoryObjectName type) {
-               
-               return this.getAll(Optional.of(type));
-       }
-       
-       public List<AAIResultWrapper> getAll() {
-               
-               return this.getAll(Optional.empty());
-       }
-       
-       
-       public List<String> getRelatedLinks() {
-               return this.getRelatedLinks(Optional.empty());
-       }
-       
-       public List<String> getRelatedLinks(GraphInventoryObjectName type) {
-               return this.getRelatedLinks(Optional.of(type));
+               super(json);
        }
        
+       @Deprecated
+       /**
+        * Use getRelatedUris instead
+        * @return
+        */
        public List<AAIResourceUri> getRelatedAAIUris() {
-               return this.getRelatedAAIUris(x -> true);
+               return this.getRelatedUris();
        }
        
+       @Deprecated
+       /**
+        * Use getRelatedUris instead
+        * @return
+        */
        public List<AAIResourceUri> getRelatedAAIUris(GraphInventoryObjectName type) {
-               return this.getRelatedAAIUris(x -> type.typeName().equals(x));
-       }
-       protected List<AAIResourceUri> getRelatedAAIUris(Predicate<String> p) {
-               List<AAIResourceUri> result = new ArrayList<>();
-               if (map.containsKey("relationship")) {
-                       List<Map<String, Object>> relationships = (List<Map<String, Object>>)map.get("relationship");
-                       for (Map<String, Object> relationship : relationships) {
-                               final String relatedTo = (String)relationship.get("related-to");
-                               if (p.test(relatedTo)) {
-                                       AAIObjectType type;
-                                       type = AAIObjectType.fromTypeName(relatedTo);
-                                       final String relatedLink = (String)relationship.get("related-link");
-                                       
-                                       result.add(AAIUriFactory.createResourceFromExistingURI(type, UriBuilder.fromPath(relatedLink).build()));
-                               }
-                       }
-               }
-               return result;
+               return this.getRelatedUris(type);
        }
        
        
-       
-       protected List<AAIResultWrapper> getAll(final Optional<GraphInventoryObjectName> type) {
-               List<AAIResourceUri> relatedLinks;
-               if (type.isPresent()) {
-                       relatedLinks = this.getRelatedAAIUris(type.get());
-               } else {
-                       relatedLinks = this.getRelatedAAIUris();
-               }
-               ArrayList<AAIResultWrapper> result = new ArrayList<>();
-               for (AAIResourceUri link : relatedLinks) {
-                       result.add(this.get(link));
-               }
-               return result;
-       }
-       
        protected AAIResultWrapper get(AAIResourceUri uri) {
                return new AAIResourcesClient().get(uri);
                
        }
-       
-       protected List<String> getRelatedLinks(Optional<GraphInventoryObjectName> type) {
-               String matcher = "";
-               if (type.isPresent()) {
-                       matcher = "[?(@.related-to=='" + type.get() + "')]";
-               }
-               return JsonPathUtil.getInstance().locateResultList(this.jsonBody, String.format("$.relationship%s.related-link", matcher));
+
+       @Override
+       protected AAIResourceUri createUri(AAIObjectType type, String relatedLink) {
+               
+               return AAIUriFactory.createResourceFromExistingURI(type, UriBuilder.fromPath(relatedLink).build());
        }
-       
-       public String getJson() {
-               return this.jsonBody;
+
+       @Override
+       protected AAIObjectType fromTypeName(String name) {
+               return AAIObjectType.fromTypeName(name);
        }
 }
diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryRestClient.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryRestClient.java
new file mode 100644 (file)
index 0000000..10c0663
--- /dev/null
@@ -0,0 +1,77 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * 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
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.client.graphinventory;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.Optional;
+
+import javax.ws.rs.core.Response;
+
+import org.onap.so.client.ResponseExceptionMapper;
+import org.onap.so.client.RestClientSSL;
+import org.onap.so.client.RestProperties;
+import org.onap.so.client.policy.CommonObjectMapperProvider;
+import org.onap.so.utils.TargetEntity;
+
+public abstract class GraphInventoryRestClient extends RestClientSSL {
+
+       protected static final GraphInventoryCommonObjectMapperProvider standardProvider = new GraphInventoryCommonObjectMapperProvider();
+
+       protected final GraphInventoryPatchConverter patchConverter = new GraphInventoryPatchConverter();
+       
+       protected GraphInventoryRestClient(RestProperties props, URI uri) {
+               super(props, Optional.of(uri));
+       }
+
+       @Override
+    public abstract TargetEntity getTargetEntity();
+
+       @Override
+       protected abstract void initializeHeaderMap(Map<String, String> headerMap);
+
+       @Override
+       protected abstract Optional<ResponseExceptionMapper> addResponseExceptionMapper();
+       
+       @Override
+       protected CommonObjectMapperProvider getCommonObjectMapperProvider() {
+               return standardProvider;
+       }
+
+       @Override
+       public Response patch(Object obj) {
+               return super.patch(convertToPatchFormat(obj));
+       }
+
+       @Override
+       public <T> T patch(Object obj, Class<T> resultClass) {
+               return super.patch(convertToPatchFormat(obj), resultClass);
+       }
+       
+       protected GraphInventoryPatchConverter getPatchConverter() {
+               return this.patchConverter;
+       }
+       
+       protected String convertToPatchFormat(Object obj) {
+               return getPatchConverter().convertPatchFormat(obj);
+       }
+
+}
diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryRelationships.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryRelationships.java
new file mode 100644 (file)
index 0000000..759fad7
--- /dev/null
@@ -0,0 +1,137 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * 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
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.client.graphinventory.entities;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Predicate;
+
+import org.onap.so.client.aai.AAICommonObjectMapperProvider;
+import org.onap.so.client.aai.AAIObjectType;
+import org.onap.so.client.aai.entities.AAIResultWrapper;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+import org.onap.so.client.graphinventory.GraphInventoryObjectName;
+import org.onap.so.client.graphinventory.GraphInventoryObjectType;
+import org.onap.so.client.graphinventory.entities.uri.GraphInventoryResourceUri;
+import org.onap.so.jsonpath.JsonPathUtil;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public abstract class GraphInventoryRelationships<Wrapper extends GraphInventoryResultWrapper, Uri extends GraphInventoryResourceUri, Type extends GraphInventoryObjectType> {
+
+       protected final ObjectMapper mapper;
+       protected Map<String, Object> map;
+       protected final String jsonBody;
+       
+       public GraphInventoryRelationships(String json) {
+               this.jsonBody = json;
+               this.mapper = new GraphInventoryCommonObjectMapperProvider().getMapper();
+               try {
+                       this.map = mapper.readValue(json, new TypeReference<Map<String, Object>>() {});
+               } catch (IOException e) {
+                       this.map = new HashMap<>();
+               }
+       }
+       
+       public List<Wrapper> getByType(GraphInventoryObjectName type) {
+               
+               return this.getAll(Optional.of(type));
+       }
+       
+       public List<Wrapper> getAll() {
+               
+               return this.getAll(Optional.empty());
+       }
+       
+       
+       public List<String> getRelatedLinks() {
+               return this.getRelatedLinks(Optional.empty());
+       }
+       
+       public List<String> getRelatedLinks(GraphInventoryObjectName type) {
+               return this.getRelatedLinks(Optional.of(type));
+       }
+       
+       public List<Uri> getRelatedUris() {
+               return this.getRelatedUris(x -> true);
+       }
+       
+       public List<Uri> getRelatedUris(GraphInventoryObjectName type) {
+               return this.getRelatedUris(x -> type.typeName().equals(x));
+       }
+       protected List<Uri> getRelatedUris(Predicate<String> p) {
+               List<Uri> result = new ArrayList<>();
+               if (map.containsKey("relationship")) {
+                       List<Map<String, Object>> relationships = (List<Map<String, Object>>)map.get("relationship");
+                       for (Map<String, Object> relationship : relationships) {
+                               final String relatedTo = (String)relationship.get("related-to");
+                               if (p.test(relatedTo)) {
+                                       Type type;
+                                       type = fromTypeName(relatedTo);
+                                       final String relatedLink = (String)relationship.get("related-link");
+                                       
+                                       result.add(createUri(type, relatedLink));
+                               }
+                       }
+               }
+               return result;
+       }
+       
+       
+       
+       protected List<Wrapper> getAll(final Optional<GraphInventoryObjectName> type) {
+               List<Uri> relatedLinks;
+               if (type.isPresent()) {
+                       relatedLinks = this.getRelatedUris(type.get());
+               } else {
+                       relatedLinks = this.getRelatedUris();
+               }
+               ArrayList<Wrapper> result = new ArrayList<>();
+               for (Uri link : relatedLinks) {
+                       result.add(this.get(link));
+               }
+               return result;
+       }
+       
+       protected abstract Wrapper get(Uri uri);
+       
+       protected abstract Uri createUri(Type type, String relatedLink);
+       
+       protected abstract Type fromTypeName(String name);
+       
+       protected List<String> getRelatedLinks(Optional<GraphInventoryObjectName> type) {
+               String matcher = "";
+               if (type.isPresent()) {
+                       matcher = "[?(@.related-to=='" + type.get() + "')]";
+               }
+               return JsonPathUtil.getInstance().locateResultList(this.jsonBody, String.format("$.relationship%s.related-link", matcher));
+       }
+       
+       public String getJson() {
+               return this.jsonBody;
+       }
+}
index 2f71358..c5651c0 100644 (file)
@@ -28,17 +28,15 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 
-import org.onap.so.client.aai.AAICommonObjectMapperProvider;
-import org.onap.so.client.aai.entities.Relationships;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
 import org.onap.so.jsonpath.JsonPathUtil;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-public class GraphInventoryResultWrapper implements Serializable {
+public abstract class GraphInventoryResultWrapper<R extends GraphInventoryRelationships<?, ?, ?>> implements Serializable {
 
        private static final long serialVersionUID = 5895841925807816727L;
        protected final String jsonBody;
@@ -47,12 +45,12 @@ public class GraphInventoryResultWrapper implements Serializable {
        
        protected GraphInventoryResultWrapper(String json, Logger logger) {
                this.jsonBody = json;
-               this.mapper = new AAICommonObjectMapperProvider().getMapper();
+               this.mapper = new GraphInventoryCommonObjectMapperProvider().getMapper();
                this.logger = logger;
        }
        
        protected GraphInventoryResultWrapper(Object aaiObject, Logger logger) {
-               this.mapper = new AAICommonObjectMapperProvider().getMapper();
+               this.mapper = new GraphInventoryCommonObjectMapperProvider().getMapper();
                this.jsonBody = mapObjectToString(aaiObject);
                this.logger = logger;
        }
@@ -65,18 +63,19 @@ public class GraphInventoryResultWrapper implements Serializable {
                        return "{}";
                }
        }
-       public Optional<Relationships> getRelationships() {
+       public Optional<R> getRelationships() {
                final String path = "$.relationship-list";
                if (isEmpty()) {
                        return Optional.empty();
                }
                Optional<String> result = JsonPathUtil.getInstance().locateResult(jsonBody, path);
                if (result.isPresent()) {
-                       return Optional.of(new Relationships(result.get()));
+                       return Optional.of(createRelationships(result.get()));
                } else {
                        return Optional.empty();
                }
        }
+       protected abstract R createRelationships(String json);
        
        public String getJson() {
                if(jsonBody == null) {
index dc4179a..1b88441 100644 (file)
@@ -33,7 +33,6 @@ import java.util.Set;
 import javax.ws.rs.core.UriBuilder;
 
 import org.apache.commons.lang3.builder.HashCodeBuilder;
-import org.onap.so.client.aai.entities.uri.AAIUri;
 import org.onap.so.client.graphinventory.Format;
 import org.onap.so.client.graphinventory.GraphInventoryObjectPlurals;
 import org.onap.so.client.graphinventory.GraphInventoryObjectType;
@@ -212,8 +211,8 @@ public class SimpleUri implements GraphInventoryResourceUri, Serializable {
        
        @Override
        public boolean equals(Object o) {
-               if (o instanceof AAIUri) {
-                       return this.build().equals(((AAIUri)o).build());
+               if (o instanceof GraphInventoryUri) {
+                       return this.build().equals(((GraphInventoryUri)o).build());
                }
                return false;
        }