diff options
author | Benjamin, Max (mb388a) <mb388a@us.att.com> | 2019-02-20 16:53:01 -0500 |
---|---|---|
committer | Benjamin, Max (mb388a) <mb388a@us.att.com> | 2019-02-20 17:24:33 -0500 |
commit | c0c6449fef2aed05eda93b462bf9b8939151b9aa (patch) | |
tree | d0791c4f46e95c4f15864959420ecce69060d281 /common/src/main | |
parent | 860edae04456562fd7cf249968cd54b30b1f7f12 (diff) |
Continue to separate AAIClient into GraphInventory
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>
Diffstat (limited to 'common/src/main')
7 files changed, 256 insertions, 123 deletions
diff --git a/common/src/main/java/org/onap/so/client/aai/AAIRestClient.java b/common/src/main/java/org/onap/so/client/aai/AAIRestClient.java index a2651195ee..30d1b040e2 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIRestClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAIRestClient.java @@ -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); - } } diff --git a/common/src/main/java/org/onap/so/client/aai/entities/AAIResultWrapper.java b/common/src/main/java/org/onap/so/client/aai/entities/AAIResultWrapper.java index 9b3f98baa4..5ce81ce879 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/AAIResultWrapper.java +++ b/common/src/main/java/org/onap/so/client/aai/entities/AAIResultWrapper.java @@ -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); + } } diff --git a/common/src/main/java/org/onap/so/client/aai/entities/Relationships.java b/common/src/main/java/org/onap/so/client/aai/entities/Relationships.java index e907bc97d7..61a2f4b8fa 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/Relationships.java +++ b/common/src/main/java/org/onap/so/client/aai/entities/Relationships.java @@ -20,117 +20,55 @@ 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 index 0000000000..10c06634dc --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryRestClient.java @@ -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 index 0000000000..759fad7e54 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryRelationships.java @@ -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; + } +} diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java index 2f71358f04..c5651c0d26 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/GraphInventoryResultWrapper.java @@ -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) { diff --git a/common/src/main/java/org/onap/so/client/graphinventory/entities/uri/SimpleUri.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/uri/SimpleUri.java index dc4179a86f..1b8844116a 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/entities/uri/SimpleUri.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/uri/SimpleUri.java @@ -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; } |