diff options
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; } |