diff options
Diffstat (limited to 'common/src/main/java')
32 files changed, 722 insertions, 884 deletions
diff --git a/common/src/main/java/org/onap/so/client/aai/AAIClient.java b/common/src/main/java/org/onap/so/client/aai/AAIClient.java index be553420ac..21bbc51f89 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAIClient.java @@ -27,20 +27,24 @@ import javax.ws.rs.core.UriBuilder; import org.onap.so.client.RestClient; import org.onap.so.client.graphinventory.GraphInventoryClient; +import org.onap.so.client.graphinventory.GraphInventoryVersion; import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; import org.onap.so.client.graphinventory.exceptions.GraphInventoryUriComputationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class AAIClient extends GraphInventoryClient { +public class AAIClient extends GraphInventoryClient { private static final String AAI_ROOT = "/aai"; protected static Logger logger = LoggerFactory.getLogger(AAIClient.class); protected AAIVersion version; - public AAIClient() { + protected AAIClient() { + super(AAIProperties.class); + } + + protected AAIClient(AAIVersion version) { super(AAIProperties.class); } - @Override protected URI constructPath(GraphInventoryUri uri) { @@ -48,7 +52,7 @@ public abstract class AAIClient extends GraphInventoryClient { } @Override - protected RestClient createClient(GraphInventoryUri uri) { + public RestClient createClient(GraphInventoryUri uri) { try { return new AAIRestClient(getRestProperties(), constructPath(uri)); } catch (GraphInventoryUriComputationException | NotFoundException e) { @@ -57,11 +61,18 @@ public abstract class AAIClient extends GraphInventoryClient { } } - protected AAIVersion getVersion() { + @Override + public AAIVersion getVersion() { if (version == null) { return this.<AAIProperties>getRestProperties().getDefaultVersion(); } else { return this.version; } } + + + @Override + public String getGraphDBName() { + return "A&AI"; + } } diff --git a/common/src/main/java/org/onap/so/client/aai/AAIDSLQueryClient.java b/common/src/main/java/org/onap/so/client/aai/AAIDSLQueryClient.java new file mode 100644 index 0000000000..4cee4f3df7 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/aai/AAIDSLQueryClient.java @@ -0,0 +1,43 @@ +/*- + * ============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.aai; + +import org.onap.so.client.aai.entities.uri.AAIUriFactory; +import org.onap.so.client.graphinventory.GraphInventoryQueryClient; +import org.onap.so.client.graphinventory.entities.DSLQuery; +import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; + +public class AAIDSLQueryClient extends GraphInventoryQueryClient<AAIDSLQueryClient, DSLQuery> { + + public AAIDSLQueryClient() { + super(new AAIClient()); + } + + public AAIDSLQueryClient(AAIVersion version) { + super(new AAIClient(version)); + } + + @Override + protected GraphInventoryUri getQueryUri() { + return AAIUriFactory.createResourceUri(AAIObjectType.DSL); + } + +} diff --git a/common/src/main/java/org/onap/so/client/aai/AAIObjectType.java b/common/src/main/java/org/onap/so/client/aai/AAIObjectType.java index 14d7f43911..21e36cde6c 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIObjectType.java +++ b/common/src/main/java/org/onap/so/client/aai/AAIObjectType.java @@ -26,8 +26,7 @@ import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.Set; - -import javax.annotation.Priority; +import java.util.regex.Pattern; import org.onap.aai.annotations.Metadata; import org.onap.aai.domain.yang.AggregateRoute; @@ -61,6 +60,7 @@ import org.onap.aai.domain.yang.RouteTableReference; import org.onap.aai.domain.yang.ServiceInstance; import org.onap.aai.domain.yang.ServiceSubscription; import org.onap.aai.domain.yang.SpPartner; +import org.onap.aai.domain.yang.SriovPf; import org.onap.aai.domain.yang.Subnet; import org.onap.aai.domain.yang.Tenant; import org.onap.aai.domain.yang.TunnelXconnect; @@ -119,6 +119,7 @@ public class AAIObjectType implements GraphInventoryObjectType, Serializable { public static final AAIObjectType MODEL_VER = new AAIObjectType(AAINamespaceConstants.SERVICE_DESIGN_AND_CREATION + "/models/model/{model-invariant-id}", ModelVer.class); public static final AAIObjectType TUNNEL_XCONNECT = new AAIObjectType(AAIObjectType.ALLOTTED_RESOURCE.uriTemplate(), TunnelXconnect.class); public static final AAIObjectType P_INTERFACE = new AAIObjectType(AAIObjectType.PSERVER.uriTemplate(), PInterface.class); + public static final AAIObjectType SRIOV_PF = new AAIObjectType(AAIObjectType.P_INTERFACE.uriTemplate(), SriovPf.class); public static final AAIObjectType PHYSICAL_LINK = new AAIObjectType(AAINamespaceConstants.NETWORK, PhysicalLink.class); public static final AAIObjectType INSTANCE_GROUP = new AAIObjectType(AAINamespaceConstants.NETWORK, InstanceGroup.class); public static final AAIObjectType COLLECTION = new AAIObjectType(AAINamespaceConstants.NETWORK, Collection.class); @@ -218,6 +219,6 @@ public class AAIObjectType implements GraphInventoryObjectType, Serializable { } protected String removeParentUri(Class<?> aaiObjectClass, String parentUri) { - return aaiObjectClass.getAnnotation(Metadata.class).uriTemplate().replace(parentUri, ""); + return aaiObjectClass.getAnnotation(Metadata.class).uriTemplate().replaceFirst(Pattern.quote(parentUri), ""); } } diff --git a/common/src/main/java/org/onap/so/client/aai/AAIQueryClient.java b/common/src/main/java/org/onap/so/client/aai/AAIQueryClient.java index 184b4e5251..66d5d1f5cb 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIQueryClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAIQueryClient.java @@ -20,64 +20,29 @@ package org.onap.so.client.aai; -import java.util.Optional; - -import org.onap.so.client.RestClient; import org.onap.so.client.aai.entities.CustomQuery; import org.onap.so.client.aai.entities.uri.AAIUriFactory; -import org.onap.so.client.graphinventory.Format; +import org.onap.so.client.graphinventory.GraphInventoryQueryClient; import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; -public class AAIQueryClient extends AAIClient { +public class AAIQueryClient extends GraphInventoryQueryClient<AAIQueryClient, CustomQuery> { - private Optional<String> depth = Optional.empty(); - private boolean nodesOnly = false; - private Optional<AAISubgraphType> subgraph = Optional.empty(); - public AAIQueryClient() { - super(); + super(new AAIClient()); } public AAIQueryClient(AAIVersion version) { - super(); - this.version = version; - } - - public String query(Format format, CustomQuery query) { - return this.createClient(AAIUriFactory.createResourceUri(AAIObjectType.CUSTOM_QUERY).queryParam("format", format.toString())) - .put(query, String.class); - } - - public AAIQueryClient depth (String depth) { - this.depth = Optional.of(depth); - return this; + super(new AAIClient(version)); } - public AAIQueryClient nodesOnly() { - this.nodesOnly = true; - return this; - } - public AAIQueryClient subgraph(AAISubgraphType type){ - - subgraph = Optional.of(type); - return this; + @Override + protected GraphInventoryUri getQueryUri() { + return AAIUriFactory.createResourceUri(AAIObjectType.CUSTOM_QUERY); } - protected GraphInventoryUri setupQueryParams(GraphInventoryUri uri) { - GraphInventoryUri clone = uri.clone(); - if (this.depth.isPresent()) { - clone.queryParam("depth", depth.get()); - } - if (this.nodesOnly) { - clone.queryParam("nodesOnly", ""); - } - if (this.subgraph.isPresent()) { - clone.queryParam("subgraph", this.subgraph.get().toString()); - } - return clone; - } @Override - protected RestClient createClient(GraphInventoryUri uri) { - return super.createClient(setupQueryParams(uri)); + protected GraphInventoryUri setupQueryParams(GraphInventoryUri uri) { + return super.setupQueryParams(uri); } + } diff --git a/common/src/main/java/org/onap/so/client/aai/AAIResourcesClient.java b/common/src/main/java/org/onap/so/client/aai/AAIResourcesClient.java index 288ac9bc7f..ee1736feeb 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIResourcesClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAIResourcesClient.java @@ -20,291 +20,58 @@ package org.onap.so.client.aai; -import java.lang.reflect.InvocationTargetException; -import java.util.Map; import java.util.Optional; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.core.GenericType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; - import org.onap.aai.domain.yang.Relationship; -import org.onap.so.client.RestClient; -import org.onap.so.client.RestProperties; import org.onap.so.client.aai.entities.AAIEdgeLabel; import org.onap.so.client.aai.entities.AAIResultWrapper; import org.onap.so.client.aai.entities.uri.AAIResourceUri; -import org.onap.so.client.aai.entities.uri.AAIUri; import org.onap.so.client.graphinventory.GraphInventoryResourcesClient; -import org.onap.so.client.graphinventory.entities.uri.Depth; +import org.onap.so.client.graphinventory.entities.GraphInventoryEdgeLabel; +import org.onap.so.client.graphinventory.entities.uri.GraphInventoryResourceUri; -public class AAIResourcesClient extends AAIClient implements GraphInventoryResourcesClient<AAIResourcesClient, AAIResourceUri, AAIEdgeLabel, AAIResultWrapper, AAITransactionalClient, AAISingleTransactionClient> { - - public AAIResourcesClient() { - super(); - } - - public AAIResourcesClient(AAIVersion version) { - super(); - this.version = version; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#create(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) - */ - @Override - public void create(AAIResourceUri uri, Object obj) { - RestClient aaiRC = this.createClient(uri); - aaiRC.put(obj); - return; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#createEmpty(org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public void createEmpty(AAIResourceUri uri) { - RestClient aaiRC = this.createClient(uri); - aaiRC.put(""); - return; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#exists(org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public boolean exists(AAIResourceUri uri) { - AAIUri forceMinimal = this.addParams(Optional.of(Depth.ZERO), true, uri); - try { - RestClient aaiRC = this.createClient(forceMinimal); - - return aaiRC.get().getStatus() == Status.OK.getStatusCode(); - } catch (NotFoundException e) { - return false; - } - } +public class AAIResourcesClient extends GraphInventoryResourcesClient<AAIResourcesClient, AAIResourceUri, AAIEdgeLabel, AAIResultWrapper, AAITransactionalClient, AAISingleTransactionClient> { - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public void connect(AAIResourceUri uriA, AAIResourceUri uriB) { - AAIResourceUri uriAClone = uriA.clone(); - RestClient aaiRC = this.createClient(uriAClone.relationshipAPI()); - aaiRC.put(this.buildRelationship(uriB)); - return; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.AAIEdgeLabel) - */ - @Override - public void connect(AAIResourceUri uriA, AAIResourceUri uriB, AAIEdgeLabel label) { - AAIResourceUri uriAClone = uriA.clone(); - RestClient aaiRC = this.createClient(uriAClone.relationshipAPI()); - aaiRC.put(this.buildRelationship(uriB, label)); - return; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#disconnect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public void disconnect(AAIResourceUri uriA, AAIResourceUri uriB) { - AAIResourceUri uriAClone = uriA.clone(); - RestClient aaiRC = this.createClient(uriAClone.relationshipAPI()); - aaiRC.delete(this.buildRelationship(uriB)); - return; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#delete(org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public void delete(AAIResourceUri uri) { - AAIResourceUri clone = uri.clone(); - RestClient aaiRC = this.createClient(clone); - Map<String, Object> result = aaiRC.get(new GenericType<Map<String, Object>>(){}) - .orElseThrow(() -> new NotFoundException(clone.build() + " does not exist in A&AI")); - String resourceVersion = (String) result.get("resource-version"); - aaiRC = this.createClient(clone.resourceVersion(resourceVersion)); - aaiRC.delete(); - return; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#update(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) - */ - @Override - public void update(AAIResourceUri uri, Object obj) { - RestClient aaiRC = this.createClient(uri); - aaiRC.patch(obj); - return; - } + private AAIClient aaiClient; - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#get(java.lang.Class, org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public <T> Optional<T> get(Class<T> clazz, AAIResourceUri uri) { - try { - return this.createClient(uri).get(clazz); - } catch (NotFoundException e) { - if (this.getRestProperties().mapNotFoundToEmpty()) { - return Optional.empty(); - } else { - throw e; - } - } - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#getFullResponse(org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public Response getFullResponse(AAIResourceUri uri) { - try { - return this.createClient(uri).get(); - } catch (NotFoundException e) { - if (this.getRestProperties().mapNotFoundToEmpty()) { - return e.getResponse(); - } else { - throw e; - } - } + public AAIResourcesClient() { + super(new AAIClient()); + aaiClient = (AAIClient) super.client; } - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#get(javax.ws.rs.core.GenericType, org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public <T> Optional<T> get(GenericType<T> resultClass, AAIResourceUri uri) { - try { - return this.createClient(uri).get(resultClass); - } catch (NotFoundException e) { - if (this.getRestProperties().mapNotFoundToEmpty()) { - return Optional.empty(); - } else { - throw e; - } - } + public AAIResourcesClient(AAIVersion version) { + super(new AAIClient(version)); + aaiClient = (AAIClient) super.client; } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#get(org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ + @Override - public AAIResultWrapper get(AAIResourceUri uri) { - String json; - try { - json = this.createClient(uri).get(String.class).orElse(null); - } catch (NotFoundException e) { - if (this.getRestProperties().mapNotFoundToEmpty()) { - json = null; - } else { - throw e; - } - } + public AAIResultWrapper createWrapper(String json) { return new AAIResultWrapper(json); } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#get(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Class) - */ - @Override - public AAIResultWrapper get(AAIResourceUri uri, Class<? extends RuntimeException> c) { - String json; - try { - json = this.createClient(uri).get(String.class) - .orElseThrow(() -> createException(c, uri.build() + " not found in A&AI", Optional.empty())); - } catch (NotFoundException e) { - throw createException(c, "could not construct uri for use with A&AI", Optional.of(e)); - } - return new AAIResultWrapper(json); - } - - private RuntimeException createException(Class<? extends RuntimeException> c, String message, Optional<Throwable> t) { - RuntimeException e; - try { - if (t.isPresent()) { - e = c.getConstructor(String.class, Throwable.class).newInstance(message, t.get()); - } else { - e = c.getConstructor(String.class).newInstance(message); - } - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException - | NoSuchMethodException | SecurityException e1) { - throw new IllegalArgumentException("could not create instance for " + c.getName()); - } - - return e; - } - - protected Relationship buildRelationship(AAIResourceUri uri) { - return buildRelationship(uri, Optional.empty()); - } - - protected Relationship buildRelationship(AAIResourceUri uri, AAIEdgeLabel label) { - return buildRelationship(uri, Optional.of(label)); - } - protected Relationship buildRelationship(AAIResourceUri uri, Optional<AAIEdgeLabel> label) { - final Relationship result = new Relationship(); - result.setRelatedLink(uri.build().toString()); - if (label.isPresent()) { - result.setRelationshipLabel(label.get().toString()); - } - return result; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#createIfNotExists(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.Optional) - */ @Override - public AAIResourcesClient createIfNotExists(AAIResourceUri uri, Optional<Object> obj) { - if(!this.exists(uri)){ - if (obj.isPresent()) { - this.create(uri, obj.get()); - } else { - this.createEmpty(uri); - } - - } - return this; + public AAITransactionalClient beginTransaction() { + return new AAITransactionalClient(this, aaiClient); } - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#beginTransaction() - */ @Override - public AAITransactionalClient beginTransaction() { - return new AAITransactionalClient(this.getVersion()); + public AAISingleTransactionClient beginSingleTransaction() { + return new AAISingleTransactionClient(this, aaiClient); } - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#beginSingleTransaction() - */ @Override - public AAISingleTransactionClient beginSingleTransaction() { - return new AAISingleTransactionClient(this.getVersion()); + protected Relationship buildRelationship(GraphInventoryResourceUri uri) { + return super.buildRelationship(uri, Optional.empty()); } - private AAIUri addParams(Optional<Depth> depth, boolean nodesOnly, AAIUri uri) { - AAIUri clone = uri.clone(); - if (depth.isPresent()) { - clone.depth(depth.get()); - } - if (nodesOnly) { - clone.nodesOnly(nodesOnly); - } - - return clone; + @Override + protected Relationship buildRelationship(GraphInventoryResourceUri uri, GraphInventoryEdgeLabel label) { + return super.buildRelationship(uri, Optional.of(label)); } - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryResourcesClient#getRestProperties() - */ + @Override - public <T extends RestProperties> T getRestProperties() { - return super.getRestProperties(); + protected Relationship buildRelationship(GraphInventoryResourceUri uri, Optional<GraphInventoryEdgeLabel> label) { + return super.buildRelationship(uri, label); } + } diff --git a/common/src/main/java/org/onap/so/client/aai/AAISingleTransactionClient.java b/common/src/main/java/org/onap/so/client/aai/AAISingleTransactionClient.java index ba65ac3f15..ee15e10e01 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAISingleTransactionClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAISingleTransactionClient.java @@ -22,170 +22,45 @@ package org.onap.so.client.aai; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.Optional; -import javax.ws.rs.NotFoundException; import javax.ws.rs.core.GenericType; -import org.onap.aai.domain.yang.Relationship; import org.onap.so.client.RestClient; import org.onap.so.client.aai.entities.AAIEdgeLabel; import org.onap.so.client.aai.entities.AAIError; -import org.onap.so.client.aai.entities.bulkprocess.Transactions; import org.onap.so.client.aai.entities.singletransaction.OperationBodyRequest; import org.onap.so.client.aai.entities.singletransaction.OperationBodyResponse; import org.onap.so.client.aai.entities.singletransaction.SingleTransactionRequest; import org.onap.so.client.aai.entities.singletransaction.SingleTransactionResponse; import org.onap.so.client.aai.entities.uri.AAIResourceUri; -import org.onap.so.client.aai.entities.uri.AAIUri; import org.onap.so.client.aai.entities.uri.AAIUriFactory; import org.onap.so.client.graphinventory.GraphInventoryPatchConverter; -import org.onap.so.client.graphinventory.GraphInventorySingleTransactionClient; +import org.onap.so.client.graphinventory.GraphInventoryTransactionClient; import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed; -import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Joiner; -public class AAISingleTransactionClient extends AAIClient implements GraphInventorySingleTransactionClient<AAISingleTransactionClient, AAIResourceUri, AAIEdgeLabel> { +public class AAISingleTransactionClient extends GraphInventoryTransactionClient<AAISingleTransactionClient, AAIResourceUri, AAIEdgeLabel> { private final SingleTransactionRequest request; - private final AAIVersion version; - private int actionCount = 0; - - private final GraphInventoryPatchConverter patchConverter = new GraphInventoryPatchConverter(); - - protected AAISingleTransactionClient(AAIVersion version) { + private AAIResourcesClient resourcesClient; + private AAIClient aaiClient; + protected AAISingleTransactionClient(AAIResourcesClient resourcesClient, AAIClient aaiClient) { super(); - this.version = version; + this.resourcesClient = resourcesClient; + this.aaiClient = aaiClient; this.request = new SingleTransactionRequest(); } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionClient#create(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) - */ - @Override - public AAISingleTransactionClient create(AAIResourceUri uri, Object obj) { - request.getOperations().add(new OperationBodyRequest().withAction("put").withUri(uri.build().toString()).withBody(obj)); - incrementActionAmount(); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionClient#createEmpty(org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public AAISingleTransactionClient createEmpty(AAIResourceUri uri) { - request.getOperations().add(new OperationBodyRequest().withAction("put").withUri(uri.build().toString()).withBody(new HashMap<String, String>())); - incrementActionAmount(); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public AAISingleTransactionClient connect(AAIResourceUri uriA, AAIResourceUri uriB) { - AAIResourceUri uriAClone = uriA.clone(); - request.getOperations().add(new OperationBodyRequest().withAction("put").withUri(uriAClone.relationshipAPI().build().toString()).withBody(this.buildRelationship(uriB))); - incrementActionAmount(); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List) - */ - @Override - public AAISingleTransactionClient connect(AAIResourceUri uriA, List<AAIResourceUri> uris) { - for (AAIResourceUri uri : uris) { - this.connect(uriA, uri); - } - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.AAIEdgeLabel) - */ - @Override - public AAISingleTransactionClient connect(AAIResourceUri uriA, AAIResourceUri uriB, AAIEdgeLabel label) { - AAIResourceUri uriAClone = uriA.clone(); - RestClient aaiRC = this.createClient(uriAClone.relationshipAPI()); - aaiRC.put(this.buildRelationship(uriB, label)); - return this; - } /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List, org.onap.so.client.aai.entities.AAIEdgeLabel) - */ - @Override - public AAISingleTransactionClient connect(AAIResourceUri uriA, List<AAIResourceUri> uris, AAIEdgeLabel label) { - for (AAIResourceUri uri : uris) { - this.connect(uriA, uri, label); - } - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionClient#disconnect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public AAISingleTransactionClient disconnect(AAIResourceUri uriA, AAIResourceUri uriB) { - AAIResourceUri uriAClone = uriA.clone(); - request.getOperations().add(new OperationBodyRequest().withAction("delete").withUri(uriAClone.relationshipAPI().build().toString()).withBody(this.buildRelationship(uriB))); - incrementActionAmount(); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionClient#disconnect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List) - */ - @Override - public AAISingleTransactionClient disconnect(AAIResourceUri uriA, List<AAIResourceUri> uris) { - for (AAIResourceUri uri : uris) { - this.disconnect(uriA, uri); - } - return this; - } - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionClient#delete(org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public AAISingleTransactionClient delete(AAIResourceUri uri) { - AAIResourcesClient client = new AAIResourcesClient(); - AAIResourceUri clone = uri.clone(); - Map<String, Object> result = client.get(new GenericType<Map<String, Object>>(){}, clone) - .orElseThrow(() -> new NotFoundException(clone.build() + " does not exist in A&AI")); - String resourceVersion = (String) result.get("resource-version"); - request.getOperations().add(new OperationBodyRequest().withAction("delete").withUri(clone.resourceVersion(resourceVersion).build().toString()).withBody("")); - incrementActionAmount(); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionClient#update(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) - */ - @Override - public AAISingleTransactionClient update(AAIResourceUri uri, Object obj) { - - final String payload = getPatchConverter().convertPatchFormat(obj); - request.getOperations().add(new OperationBodyRequest().withAction("patch").withUri(uri.build().toString()).withBody(payload)); - incrementActionAmount(); - return this; - } - - private void incrementActionAmount() { - actionCount++; - } - /* (non-Javadoc) * @see org.onap.so.client.aai.GraphInventoryTransactionClient#execute() */ @Override public void execute() throws BulkProcessFailed { - RestClient client = this.createClient(AAIUriFactory.createResourceUri(AAIObjectType.SINGLE_TRANSACTION)); + RestClient client = aaiClient.createClient(AAIUriFactory.createResourceUri(AAIObjectType.SINGLE_TRANSACTION)); try { SingleTransactionResponse response = client.post(this.request, SingleTransactionResponse.class); if (response != null) { @@ -227,32 +102,43 @@ public class AAISingleTransactionClient extends AAIClient implements GraphInvent return Optional.empty(); } } + - private Relationship buildRelationship(AAIResourceUri uri) { - return buildRelationship(uri, Optional.empty()); + protected SingleTransactionRequest getRequest() { + return this.request; } - - private Relationship buildRelationship(AAIResourceUri uri, AAIEdgeLabel label) { - return buildRelationship(uri, Optional.of(label)); + + @Override + public void put(String uri, Object body) { + request.getOperations().add(new OperationBodyRequest().withAction("put").withUri(uri).withBody(body)); } - private Relationship buildRelationship(AAIResourceUri uri, Optional<AAIEdgeLabel> label) { - final Relationship result = new Relationship(); - result.setRelatedLink(uri.build().toString()); - if (label.isPresent()) { - result.setRelationshipLabel(label.toString()); - } - return result; + + @Override + public void delete(String uri, Object body) { + request.getOperations().add(new OperationBodyRequest().withAction("delete").withUri(uri).withBody(body)); + } + + @Override + public void patch(String uri, Object body) { + request.getOperations().add(new OperationBodyRequest().withAction("patch").withUri(uri).withBody(body)); } @Override - protected AAIVersion getVersion() { - return this.version; + protected <T> Optional<T> get(GenericType<T> genericType, AAIResourceUri clone) { + return resourcesClient.get(genericType, clone); } - protected SingleTransactionRequest getRequest() { - return this.request; + @Override + protected boolean exists(AAIResourceUri uri) { + return resourcesClient.exists(uri); } + @Override + protected String getGraphDBName() { + return aaiClient.getGraphDBName(); + } + + @Override protected GraphInventoryPatchConverter getPatchConverter() { return this.patchConverter; } diff --git a/common/src/main/java/org/onap/so/client/aai/AAITransactionalClient.java b/common/src/main/java/org/onap/so/client/aai/AAITransactionalClient.java index dd4cb2f591..474ae89ff9 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAITransactionalClient.java +++ b/common/src/main/java/org/onap/so/client/aai/AAITransactionalClient.java @@ -22,13 +22,11 @@ package org.onap.so.client.aai; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; -import javax.ws.rs.NotFoundException; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.Response; @@ -42,7 +40,7 @@ import org.onap.so.client.aai.entities.bulkprocess.Transactions; import org.onap.so.client.aai.entities.uri.AAIResourceUri; import org.onap.so.client.aai.entities.uri.AAIUriFactory; import org.onap.so.client.graphinventory.GraphInventoryPatchConverter; -import org.onap.so.client.graphinventory.GraphInventoryTransactionalClient; +import org.onap.so.client.graphinventory.GraphInventoryTransactionClient; import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed; import org.onap.so.jsonpath.JsonPathUtil; @@ -50,18 +48,17 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Joiner; -public class AAITransactionalClient extends AAIClient implements GraphInventoryTransactionalClient<AAITransactionalClient, AAIResourceUri, AAIEdgeLabel> { +public class AAITransactionalClient extends GraphInventoryTransactionClient<AAITransactionalClient, AAIResourceUri, AAIEdgeLabel> { private final Transactions transactions; private Transaction currentTransaction; - private final AAIVersion version; - private int actionCount = 0; - private final GraphInventoryPatchConverter patchConverter = new GraphInventoryPatchConverter(); - - protected AAITransactionalClient(AAIVersion version) { + private AAIResourcesClient resourcesClient; + private AAIClient aaiClient; + protected AAITransactionalClient(AAIResourcesClient resourcesClient, AAIClient aaiClient) { super(); - this.version = version; + this.resourcesClient = resourcesClient; + this.aaiClient = aaiClient; this.transactions = new Transactions(); startTransaction(); } @@ -75,132 +72,17 @@ public class AAITransactionalClient extends AAIClient implements GraphInventoryT /* (non-Javadoc) * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#beginNewTransaction() */ - @Override public AAITransactionalClient beginNewTransaction() { startTransaction(); return this; } /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#create(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) - */ - @Override - public AAITransactionalClient create(AAIResourceUri uri, Object obj) { - currentTransaction.getPut().add(new OperationBody().withUri(uri.build().toString()).withBody(obj)); - incrementActionAmount(); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#createEmpty(org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public AAITransactionalClient createEmpty(AAIResourceUri uri) { - currentTransaction.getPut().add(new OperationBody().withUri(uri.build().toString()).withBody(new HashMap<String, String>())); - incrementActionAmount(); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public AAITransactionalClient connect(AAIResourceUri uriA, AAIResourceUri uriB) { - AAIResourceUri uriAClone = uriA.clone(); - currentTransaction.getPut().add(new OperationBody().withUri(uriAClone.relationshipAPI().build().toString()).withBody(this.buildRelationship(uriB))); - incrementActionAmount(); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List) - */ - @Override - public AAITransactionalClient connect(AAIResourceUri uriA, List<AAIResourceUri> uris) { - for (AAIResourceUri uri : uris) { - this.connect(uriA, uri); - } - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.AAIEdgeLabel) - */ - @Override - public AAITransactionalClient connect(AAIResourceUri uriA, AAIResourceUri uriB, AAIEdgeLabel label) { - AAIResourceUri uriAClone = uriA.clone(); - RestClient aaiRC = this.createClient(uriAClone.relationshipAPI()); - aaiRC.put(this.buildRelationship(uriB, label)); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#connect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List, org.onap.so.client.aai.entities.AAIEdgeLabel) - */ - @Override - public AAITransactionalClient connect(AAIResourceUri uriA, List<AAIResourceUri> uris, AAIEdgeLabel label) { - for (AAIResourceUri uri : uris) { - this.connect(uriA, uri, label); - } - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#disconnect(org.onap.so.client.aai.entities.uri.AAIResourceUri, org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public AAITransactionalClient disconnect(AAIResourceUri uriA, AAIResourceUri uriB) { - AAIResourceUri uriAClone = uriA.clone(); - currentTransaction.getDelete().add(new OperationBody().withUri(uriAClone.relationshipAPI().build().toString()).withBody(this.buildRelationship(uriB))); - incrementActionAmount(); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#disconnect(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.util.List) - */ - @Override - public AAITransactionalClient disconnect(AAIResourceUri uriA, List<AAIResourceUri> uris) { - for (AAIResourceUri uri : uris) { - this.disconnect(uriA, uri); - } - return this; - } - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#delete(org.onap.so.client.aai.entities.uri.AAIResourceUri) - */ - @Override - public AAITransactionalClient delete(AAIResourceUri uri) { - AAIResourcesClient client = new AAIResourcesClient(); - AAIResourceUri clone = uri.clone(); - Map<String, Object> result = client.get(new GenericType<Map<String, Object>>(){}, clone) - .orElseThrow(() -> new NotFoundException(clone.build() + " does not exist in A&AI")); - String resourceVersion = (String) result.get("resource-version"); - currentTransaction.getDelete().add(new OperationBody().withUri(clone.resourceVersion(resourceVersion).build().toString()).withBody("")); - incrementActionAmount(); - return this; - } - - /* (non-Javadoc) - * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#update(org.onap.so.client.aai.entities.uri.AAIResourceUri, java.lang.Object) - */ - @Override - public AAITransactionalClient update(AAIResourceUri uri, Object obj) { - final String payload = getPatchConverter().convertPatchFormat(obj); - currentTransaction.getPatch().add(new OperationBody().withUri(uri.build().toString()).withBody(payload)); - incrementActionAmount(); - return this; - } - - private void incrementActionAmount() { - actionCount++; - } - /* (non-Javadoc) * @see org.onap.so.client.aai.GraphInventoryTransactionalClient#execute() */ @Override public void execute() throws BulkProcessFailed { - RestClient client = this.createClient(AAIUriFactory.createResourceUri(AAIObjectType.BULK_PROCESS)); + RestClient client = aaiClient.createClient(AAIUriFactory.createResourceUri(AAIObjectType.BULK_PROCESS)); try { Response response = client.put(this.transactions); if (response.hasEntity()) { @@ -271,16 +153,43 @@ public class AAITransactionalClient extends AAIClient implements GraphInventoryT } return result; } + + protected Transactions getTransactions() { + return this.transactions; + } + + @Override + public void put(String uri, Object body) { + currentTransaction.getPut().add(new OperationBody().withUri(uri).withBody(body)); + } + + @Override + public void delete(String uri, Object body) { + currentTransaction.getDelete().add(new OperationBody().withUri(uri).withBody(body)); + + } @Override - protected AAIVersion getVersion() { - return this.version; + public void patch(String uri, Object body) { + currentTransaction.getPatch().add(new OperationBody().withUri(uri).withBody(body)); + } + + @Override + protected <T> Optional<T> get(GenericType<T> genericType, AAIResourceUri clone) { + return resourcesClient.get(genericType, clone); } - protected Transactions getTransactions() { - return this.transactions; + @Override + protected boolean exists(AAIResourceUri uri) { + return resourcesClient.exists(uri); + } + + @Override + protected String getGraphDBName() { + return aaiClient.getGraphDBName(); } + @Override protected GraphInventoryPatchConverter getPatchConverter() { return this.patchConverter; } diff --git a/common/src/main/java/org/onap/so/client/aai/entities/uri/AAISimpleUri.java b/common/src/main/java/org/onap/so/client/aai/entities/uri/AAISimpleUri.java index 76413c2594..7cb37d9c3a 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/uri/AAISimpleUri.java +++ b/common/src/main/java/org/onap/so/client/aai/entities/uri/AAISimpleUri.java @@ -59,6 +59,10 @@ public class AAISimpleUri extends SimpleUri implements AAIResourceUri { super(parentUri, childType, childValues); } + protected AAISimpleUri(AAIResourceUri parentUri, AAIObjectPlurals childType) { + super(parentUri, childType); + } + @Override public AAISimpleUri relationshipAPI() { return (AAISimpleUri) super.relationshipAPI(); diff --git a/common/src/main/java/org/onap/so/client/aai/entities/uri/AAIUriFactory.java b/common/src/main/java/org/onap/so/client/aai/entities/uri/AAIUriFactory.java index 77c61089a4..ac0aba3c36 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/uri/AAIUriFactory.java +++ b/common/src/main/java/org/onap/so/client/aai/entities/uri/AAIUriFactory.java @@ -85,6 +85,11 @@ public class AAIUriFactory { return new AAISimpleUri(parentUri, childType, childValues); } + public static AAIResourceUri createResourceFromParentURI(AAIResourceUri parentUri, AAIObjectPlurals childType) { + + return new AAISimpleUri(parentUri, childType); + } + /** * Creates a uri for a plural type e.g. /cloud-infrastructure/pservers * diff --git a/common/src/main/java/org/onap/so/client/dmaap/DmaapClient.java b/common/src/main/java/org/onap/so/client/dmaap/DmaapClient.java index dde0b31c90..dea00dd08f 100644 --- a/common/src/main/java/org/onap/so/client/dmaap/DmaapClient.java +++ b/common/src/main/java/org/onap/so/client/dmaap/DmaapClient.java @@ -17,10 +17,11 @@ * limitations under the License. * ============LICENSE_END========================================================= */ - + package org.onap.so.client.dmaap; import java.io.IOException; +import java.security.GeneralSecurityException; import java.util.Base64; import java.util.Map; import java.util.Optional; @@ -31,13 +32,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; - +import org.onap.so.utils.CryptoUtils; public abstract class DmaapClient { - + protected static Logger logger = LoggerFactory.getLogger(DmaapClient.class); protected final Map<String, String> msoProperties; protected final Properties properties; + public DmaapClient(String filepath) throws IOException { Resource resource = new ClassPathResource(filepath); DmaapProperties dmaapProperties = DmaapPropertiesLoader.getInstance().getNewImpl(); @@ -48,27 +50,34 @@ public abstract class DmaapClient { this.msoProperties = dmaapProperties.getProperties(); this.properties = new Properties(); this.properties.load(resource.getInputStream()); - this.properties.put("password", this.deobfuscatePassword(this.getPassword())); - this.properties.put("username", this.getUserName()); + try { + this.properties.put("auth", CryptoUtils.decrypt(this.getAuth(), this.getKey()).getBytes()); + } catch (GeneralSecurityException e) { + logger.error(e.getMessage(), e); + } + this.properties.put("key", this.getKey()); this.properties.put("topic", this.getTopic()); Optional<String> host = this.getHost(); if (host.isPresent()) { this.properties.put("host", host.get()); } } - protected String deobfuscatePassword(String password) { - + + protected String deobfuscatePassword(String decrypted_key) { + try { - return new String(Base64.getDecoder().decode(password.getBytes())); - } catch(IllegalArgumentException iae) { - logger.error("llegal Arguments",iae); - return password; + return new String(Base64.getDecoder().decode(decrypted_key.getBytes())); + } catch (IllegalArgumentException iae) { + logger.error("llegal Arguments", iae); + return decrypted_key; } } - - - public abstract String getUserName(); - public abstract String getPassword(); + + public abstract String getKey(); + + public abstract String getAuth(); + public abstract String getTopic(); + public abstract Optional<String> getHost(); } diff --git a/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java b/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java index 0438ff237a..9fd8c05cb5 100644 --- a/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java +++ b/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java @@ -17,34 +17,37 @@ * limitations under the License. * ============LICENSE_END========================================================= */ - + package org.onap.so.client.dmaap.rest; import java.net.URL; -import java.util.Base64; import java.util.Map; import org.onap.so.client.RestClient; +import org.onap.so.utils.CryptoUtils; import org.onap.so.utils.TargetEntity; public class DMaaPRestClient extends RestClient { - private final String username; - private final String password; - public DMaaPRestClient(URL url, String contentType, String username, String password) { + private final String auth; + private final String key; + + public DMaaPRestClient(URL url, String contentType, String auth, String key) { super(url, contentType); - this.username = username; - this.password = password; + this.auth = auth; + this.key = key; } - @Override - public TargetEntity getTargetEntity(){ - return TargetEntity.DMAAP; - } + @Override + public TargetEntity getTargetEntity() { + return TargetEntity.DMAAP; + } @Override protected void initializeHeaderMap(Map<String, String> headerMap) { - headerMap.put("Authorization", "Basic " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes())); + if (auth != null && !auth.isEmpty() && key != null && !key.isEmpty()) { + addBasicAuthHeader(auth, key); + } } } diff --git a/common/src/main/java/org/onap/so/client/dmaap/rest/PropertiesBean.java b/common/src/main/java/org/onap/so/client/dmaap/rest/PropertiesBean.java index f43c65808a..18849217f8 100644 --- a/common/src/main/java/org/onap/so/client/dmaap/rest/PropertiesBean.java +++ b/common/src/main/java/org/onap/so/client/dmaap/rest/PropertiesBean.java @@ -24,8 +24,8 @@ import java.util.Properties; public class PropertiesBean { - private String username; - private String password; + private String auth; + private String key; private String environment; private String partition; private String contentType; @@ -35,8 +35,8 @@ public class PropertiesBean { public PropertiesBean(Properties properties) { - this.withUsername(properties.getProperty("username")) - .withPassword(properties.getProperty("password")) + this.withAuth(properties.getProperty("auth")) + .withKey(properties.getProperty("key")) .withTopic(properties.getProperty("topic")) .withEnvironment(properties.getProperty("environment")) .withHost(properties.getProperty("host")) @@ -44,24 +44,24 @@ public class PropertiesBean { .withPartition(properties.getProperty("partition")) .withContentType(properties.getProperty("contentType", "application/json")); } - public String getUsername() { - return username; + public String getAuth() { + return auth; } - public void setUsername(String username) { - this.username = username; + public void setAuth(String auth) { + this.auth = auth; } - public PropertiesBean withUsername(String username) { - this.username = username; + public PropertiesBean withAuth(String auth) { + this.auth = auth; return this; } - public String getPassword() { - return password; + public String getKey() { + return key; } - public void setPassword(String password) { - this.password = password; + public void setKey(String key) { + this.key = key; } - public PropertiesBean withPassword(String password) { - this.password = password; + public PropertiesBean withKey(String key) { + this.key = key; return this; } public String getEnvironment() { diff --git a/common/src/main/java/org/onap/so/client/dmaap/rest/RestConsumer.java b/common/src/main/java/org/onap/so/client/dmaap/rest/RestConsumer.java index 39af15635a..bee5a0c2ca 100644 --- a/common/src/main/java/org/onap/so/client/dmaap/rest/RestConsumer.java +++ b/common/src/main/java/org/onap/so/client/dmaap/rest/RestConsumer.java @@ -37,7 +37,7 @@ public class RestConsumer implements Consumer { private final RestClient client; public RestConsumer(Properties properties) { PropertiesBean bean = new PropertiesBean(properties); - client = new DMaaPRestClient(this.createURL(bean), bean.getContentType(), bean.getUsername(), bean.getPassword()); + client = new DMaaPRestClient(this.createURL(bean), bean.getContentType(), bean.getAuth(), bean.getKey()); } private URL createURL(PropertiesBean properties) { diff --git a/common/src/main/java/org/onap/so/client/dmaap/rest/RestPublisher.java b/common/src/main/java/org/onap/so/client/dmaap/rest/RestPublisher.java index 090e50543b..af660c2aa4 100644 --- a/common/src/main/java/org/onap/so/client/dmaap/rest/RestPublisher.java +++ b/common/src/main/java/org/onap/so/client/dmaap/rest/RestPublisher.java @@ -35,7 +35,7 @@ public class RestPublisher implements Publisher { public RestPublisher(Properties properties) { PropertiesBean bean = new PropertiesBean(properties); - client = new DMaaPRestClient(this.createURL(bean), bean.getContentType(), bean.getUsername(), bean.getPassword()); + client = new DMaaPRestClient(this.createURL(bean), bean.getContentType(), bean.getAuth(), bean.getKey()); } private URL createURL(PropertiesBean properties) { diff --git a/common/src/main/java/org/onap/so/client/graphinventory/Format.java b/common/src/main/java/org/onap/so/client/graphinventory/Format.java index 5cbf1320c1..0a3e0b498c 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/Format.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/Format.java @@ -23,6 +23,7 @@ package org.onap.so.client.graphinventory; public enum Format { RESOURCE("resource"), + RESOURCE_AND_URL("resource_and_url"), SIMPLE("simple"), RAW("raw"), CONSOLE("console"), diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryClient.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryClient.java index 0d10c21886..30e91dce03 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryClient.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryClient.java @@ -37,12 +37,16 @@ public abstract class GraphInventoryClient { } protected abstract URI constructPath(GraphInventoryUri uri); - protected abstract RestClient createClient(GraphInventoryUri uri); + public abstract RestClient createClient(GraphInventoryUri uri); - protected <T extends RestProperties> T getRestProperties() { + public <T extends RestProperties> T getRestProperties() { if (props == null) { throw new IllegalStateException("No RestProperty implementation found on classpath"); } return (T)props; } + + public abstract GraphInventoryVersion getVersion(); + + public abstract String getGraphDBName(); } diff --git a/common/src/main/java/org/onap/so/client/aai/AAIDSLQuery.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryQueryClient.java index 52bae20ff3..c4bf0f0beb 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAIDSLQuery.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryQueryClient.java @@ -18,49 +18,43 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.client.aai; +package org.onap.so.client.graphinventory; import java.util.Optional; -import org.onap.so.client.RestClient; -import org.onap.so.client.aai.entities.DSLQuery; -import org.onap.so.client.aai.entities.uri.AAIUriFactory; -import org.onap.so.client.graphinventory.Format; +import org.onap.so.client.aai.entities.CustomQuery; import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; -public class AAIDSLQuery extends AAIClient { +public abstract class GraphInventoryQueryClient<S, I> { private Optional<String> depth = Optional.empty(); private boolean nodesOnly = false; - private Optional<AAISubgraphType> subgraph = Optional.empty(); + private Optional<GraphInventorySubgraphType> subgraph = Optional.empty(); + private GraphInventoryClient client; - public AAIDSLQuery() { - super(); + public GraphInventoryQueryClient(GraphInventoryClient client) { + this.client = client; } - public AAIDSLQuery(AAIVersion version) { - super(); - this.version = version; - } + protected abstract GraphInventoryUri getQueryUri(); - public String query(Format format, DSLQuery query) { - return this.createClient(AAIUriFactory.createResourceUri(AAIObjectType.DSL).queryParam("format", format.toString())) - .put(query, String.class); + public String query(Format format, I query) { + return client.createClient(setupQueryParams(getQueryUri().queryParam("format", format.toString()))).put(query, String.class); } - public AAIDSLQuery depth (String depth) { + public S depth (String depth) { this.depth = Optional.of(depth); - return this; + return (S) this; } - public AAIDSLQuery nodesOnly() { + public S nodesOnly() { this.nodesOnly = true; - return this; + return (S) this; } - public AAIDSLQuery subgraph(AAISubgraphType type){ + public S subgraph(GraphInventorySubgraphType type){ subgraph = Optional.of(type); - return this; + return (S) this; } protected GraphInventoryUri setupQueryParams(GraphInventoryUri uri) { @@ -76,8 +70,4 @@ public class AAIDSLQuery extends AAIClient { } return clone; } - @Override - protected RestClient createClient(GraphInventoryUri uri) { - return super.createClient(setupQueryParams(uri)); - } } diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryResourcesClient.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryResourcesClient.java index 7fbe286b98..39d2d01da9 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryResourcesClient.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryResourcesClient.java @@ -1,17 +1,30 @@ package org.onap.so.client.graphinventory; +import java.lang.reflect.InvocationTargetException; +import java.util.Map; import java.util.Optional; +import javax.ws.rs.NotFoundException; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import org.onap.aai.domain.yang.Relationship; +import org.onap.so.client.RestClient; import org.onap.so.client.RestProperties; import org.onap.so.client.graphinventory.entities.GraphInventoryEdgeLabel; import org.onap.so.client.graphinventory.entities.GraphInventoryResultWrapper; +import org.onap.so.client.graphinventory.entities.uri.Depth; +import org.onap.so.client.graphinventory.entities.uri.GraphInventoryResourceUri; import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; -public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryUri, EdgeLabel extends GraphInventoryEdgeLabel, Wrapper extends GraphInventoryResultWrapper, TransactionalClient, SingleTransactionClient> { +public abstract class GraphInventoryResourcesClient<Self, Uri extends GraphInventoryResourceUri, EdgeLabel extends GraphInventoryEdgeLabel, Wrapper extends GraphInventoryResultWrapper, TransactionalClient, SingleTransactionClient> { + protected GraphInventoryClient client; + + protected GraphInventoryResourcesClient(GraphInventoryClient client) { + this.client = client; + } /** * creates a new object in GraphInventory * @@ -19,7 +32,10 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param uri * @return */ - void create(Uri uri, Object obj); + public void create(Uri uri, Object obj) { + RestClient giRC = client.createClient(uri); + giRC.put(obj); + } /** * creates a new object in GraphInventory with no payload body @@ -27,7 +43,10 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param uri * @return */ - void createEmpty(Uri uri); + public void createEmpty(Uri uri) { + RestClient giRC = client.createClient(uri); + giRC.put(""); + } /** * returns false if the object does not exist in GraphInventory @@ -35,7 +54,16 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param uri * @return */ - boolean exists(Uri uri); + public boolean exists(Uri uri) { + GraphInventoryUri forceMinimal = this.addParams(Optional.of(Depth.ZERO), true, uri); + try { + RestClient giRC = client.createClient(forceMinimal); + + return giRC.get().getStatus() == Status.OK.getStatusCode(); + } catch (NotFoundException e) { + return false; + } + } /** * Adds a relationship between two objects in GraphInventory @@ -43,7 +71,11 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param uriB * @return */ - void connect(Uri uriA, Uri uriB); + public void connect(Uri uriA, Uri uriB) { + GraphInventoryResourceUri uriAClone = uriA.clone(); + RestClient giRC = client.createClient(uriAClone.relationshipAPI()); + giRC.put(this.buildRelationship(uriB)); + } /** * Adds a relationship between two objects in GraphInventory @@ -53,7 +85,11 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param edge label * @return */ - void connect(Uri uriA, Uri uriB, EdgeLabel label); + public void connect(Uri uriA, Uri uriB, EdgeLabel label) { + GraphInventoryResourceUri uriAClone = uriA.clone(); + RestClient giRC = client.createClient(uriAClone.relationshipAPI()); + giRC.put(this.buildRelationship(uriB, label)); + } /** * Removes relationship from two objects in GraphInventory @@ -62,7 +98,11 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param uriB * @return */ - void disconnect(Uri uriA, Uri uriB); + public void disconnect(Uri uriA, Uri uriB) { + GraphInventoryResourceUri uriAClone = uriA.clone(); + RestClient giRC = client.createClient(uriAClone.relationshipAPI()); + giRC.delete(this.buildRelationship(uriB)); + } /** * Deletes object from GraphInventory. Automatically handles resource-version. @@ -70,14 +110,25 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param uri * @return */ - void delete(Uri uri); + public void delete(Uri uri) { + GraphInventoryResourceUri clone = uri.clone(); + RestClient giRC = client.createClient(clone); + Map<String, Object> result = giRC.get(new GenericType<Map<String, Object>>(){}) + .orElseThrow(() -> new NotFoundException(clone.build() + " does not exist in " + client.getGraphDBName())); + String resourceVersion = (String) result.get("resource-version"); + giRC = client.createClient(clone.resourceVersion(resourceVersion)); + giRC.delete(); + } /** * @param obj - can be any object which will marshal into a valid GraphInventory payload * @param uri * @return */ - void update(Uri uri, Object obj); + public void update(Uri uri, Object obj) { + RestClient giRC = client.createClient(uri); + giRC.patch(obj); + } /** * Retrieves an object from GraphInventory and unmarshalls it into the Class specified @@ -85,14 +136,34 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param uri * @return */ - <T> Optional<T> get(Class<T> clazz, Uri uri); + public <T> Optional<T> get(Class<T> clazz, Uri uri) { + try { + return client.createClient(uri).get(clazz); + } catch (NotFoundException e) { + if (this.getRestProperties().mapNotFoundToEmpty()) { + return Optional.empty(); + } else { + throw e; + } + } + } /** * Retrieves an object from GraphInventory and returns complete response * @param uri * @return */ - Response getFullResponse(Uri uri); + public Response getFullResponse(Uri uri) { + try { + return client.createClient(uri).get(); + } catch (NotFoundException e) { + if (this.getRestProperties().mapNotFoundToEmpty()) { + return e.getResponse(); + } else { + throw e; + } + } + } /** * Retrieves an object from GraphInventory and automatically unmarshalls it into a Map or List @@ -100,15 +171,36 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param uri * @return */ - <T> Optional<T> get(GenericType<T> resultClass, Uri uri); - + public <T> Optional<T> get(GenericType<T> resultClass, Uri uri) { + try { + return client.createClient(uri).get(resultClass); + } catch (NotFoundException e) { + if (this.getRestProperties().mapNotFoundToEmpty()) { + return Optional.empty(); + } else { + throw e; + } + } + } /** * Retrieves an object from GraphInventory wrapped in a helper class which offer additional features * * @param uri * @return */ - Wrapper get(Uri uri); + public Wrapper get(Uri uri) { + String json; + try { + json = client.createClient(uri).get(String.class).orElse(null); + } catch (NotFoundException e) { + if (this.getRestProperties().mapNotFoundToEmpty()) { + json = null; + } else { + throw e; + } + } + return this.createWrapper(json); + } /** * Retrieves an object from GraphInventory wrapped in a helper class which offer additional features @@ -117,7 +209,33 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param uri * @return */ - Wrapper get(Uri uri, Class<? extends RuntimeException> c); + public Wrapper get(Uri uri, Class<? extends RuntimeException> c) { + String json; + try { + json = client.createClient(uri).get(String.class) + .orElseThrow(() -> createException(c, uri.build() + " not found in " + client.getGraphDBName(), Optional.empty())); + } catch (NotFoundException e) { + throw createException(c, "could not construct uri for use with " + client.getGraphDBName(), Optional.of(e)); + } + + return this.createWrapper(json); + } + + private RuntimeException createException(Class<? extends RuntimeException> c, String message, Optional<Throwable> t) { + RuntimeException e; + try { + if (t.isPresent()) { + e = c.getConstructor(String.class, Throwable.class).newInstance(message, t.get()); + } else { + e = c.getConstructor(String.class).newInstance(message); + } + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException + | NoSuchMethodException | SecurityException e1) { + throw new IllegalArgumentException("could not create instance for " + c.getName()); + } + + return e; + } /** * Will automatically create the object if it does not exist @@ -126,22 +244,63 @@ public interface GraphInventoryResourcesClient<Self, Uri extends GraphInventoryU * @param uri * @return */ - Self createIfNotExists(Uri uri, Optional<Object> obj); - + public Self createIfNotExists(Uri uri, Optional<Object> obj) { + if(!this.exists(uri)){ + if (obj.isPresent()) { + this.create(uri, obj.get()); + } else { + this.createEmpty(uri); + } + + } + return (Self)this; + } + protected Relationship buildRelationship(GraphInventoryResourceUri uri) { + return buildRelationship(uri, Optional.empty()); + } + + protected Relationship buildRelationship(GraphInventoryResourceUri uri, GraphInventoryEdgeLabel label) { + return buildRelationship(uri, Optional.of(label)); + } + protected Relationship buildRelationship(GraphInventoryResourceUri uri, Optional<GraphInventoryEdgeLabel> label) { + final Relationship result = new Relationship(); + result.setRelatedLink(uri.build().toString()); + if (label.isPresent()) { + result.setRelationshipLabel(label.get().toString()); + } + return result; + } + + public abstract Wrapper createWrapper(String json); + /** * Starts a transaction which encloses multiple GraphInventory mutations * * @return */ - TransactionalClient beginTransaction(); + public abstract TransactionalClient beginTransaction(); /** * Starts a transaction groups multiple GraphInventory mutations * * @return */ - SingleTransactionClient beginSingleTransaction(); + public abstract SingleTransactionClient beginSingleTransaction(); - <T extends RestProperties> T getRestProperties(); + private GraphInventoryUri addParams(Optional<Depth> depth, boolean nodesOnly, GraphInventoryUri uri) { + GraphInventoryUri clone = uri.clone(); + if (depth.isPresent()) { + clone.depth(depth.get()); + } + if (nodesOnly) { + clone.nodesOnly(nodesOnly); + } + + return clone; + } + + public <T extends RestProperties> T getRestProperties() { + return client.getRestProperties(); + } }
\ No newline at end of file diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventorySingleTransactionClient.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventorySingleTransactionClient.java deleted file mode 100644 index e1aa2252d9..0000000000 --- a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventorySingleTransactionClient.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.onap.so.client.graphinventory; - -import java.util.List; - -import org.onap.so.client.graphinventory.entities.GraphInventoryEdgeLabel; -import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; -import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed; - -public interface GraphInventorySingleTransactionClient<Self, Uri extends GraphInventoryUri, EdgeLabel extends GraphInventoryEdgeLabel> { - - /** - * creates a new object in A&AI - * - * @param obj - can be any object which will marshal into a valid A&AI payload - * @param uri - * @return - */ - Self create(Uri uri, Object obj); - - /** - * creates a new object in A&AI with no payload body - * - * @param uri - * @return - */ - Self createEmpty(Uri uri); - - /** - * Adds a relationship between two objects in A&AI - * @param uriA - * @param uriB - * @return - */ - Self connect(Uri uriA, Uri uriB); - - /** - * relationship between multiple objects in A&AI - connects A to all objects specified in list - * - * @param uriA - * @param uris - * @return - */ - Self connect(Uri uriA, List<Uri> uris); - - Self connect(Uri uriA, Uri uriB, EdgeLabel label); - - Self connect(Uri uriA, List<Uri> uris, EdgeLabel label); - - /** - * Removes relationship from two objects in A&AI - * - * @param uriA - * @param uriB - * @return - */ - Self disconnect(Uri uriA, Uri uriB); - - /** - * Removes relationship from multiple objects - disconnects A from all objects specified in list - * @param uriA - * @param uris - * @return - */ - Self disconnect(Uri uriA, List<Uri> uris); - - /** - * Deletes object from A&AI. Automatically handles resource-version. - * - * @param uri - * @return - */ - Self delete(Uri uri); - - /** - * @param obj - can be any object which will marshal into a valid A&AI payload - * @param uri - * @return - */ - Self update(Uri uri, Object obj); - - /** - * Executes all created transactions in A&AI - * @throws BulkProcessFailed - */ - void execute() throws BulkProcessFailed; - -}
\ No newline at end of file diff --git a/common/src/main/java/org/onap/so/client/aai/AAISubgraphType.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventorySubgraphType.java index e9beb143fd..4bbbe202cc 100644 --- a/common/src/main/java/org/onap/so/client/aai/AAISubgraphType.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventorySubgraphType.java @@ -18,16 +18,16 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.client.aai; +package org.onap.so.client.graphinventory; -public enum AAISubgraphType { +public enum GraphInventorySubgraphType { STAR("star"), PRUNE("prune"); private final String name; - private AAISubgraphType(String name) { + private GraphInventorySubgraphType(String name) { this.name = name; } diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionClient.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionClient.java new file mode 100644 index 0000000000..8d1a945c1b --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionClient.java @@ -0,0 +1,240 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2018 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.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import javax.ws.rs.NotFoundException; +import javax.ws.rs.core.GenericType; + +import org.onap.aai.domain.yang.Relationship; +import org.onap.so.client.aai.AAIVersion; +import org.onap.so.client.aai.entities.singletransaction.SingleTransactionRequest; +import org.onap.so.client.graphinventory.entities.GraphInventoryEdgeLabel; +import org.onap.so.client.graphinventory.entities.uri.GraphInventoryResourceUri; +import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public abstract class GraphInventoryTransactionClient<Self, Uri extends GraphInventoryResourceUri, EdgeLabel extends GraphInventoryEdgeLabel> implements TransactionBuilder { + + protected static Logger logger = LoggerFactory.getLogger(GraphInventoryTransactionClient.class); + + protected int actionCount = 0; + + protected final GraphInventoryPatchConverter patchConverter = new GraphInventoryPatchConverter(); + + protected GraphInventoryTransactionClient() { + } + + /** + * creates a new object in A&AI + * + * @param obj - can be any object which will marshal into a valid A&AI payload + * @param uri + * @return + */ + public Self create(Uri uri, Object obj) { + this.put(uri.build().toString(), obj); + incrementActionAmount(); + return (Self)this; + } + + /** + * creates a new object in A&AI with no payload body + * + * @param uri + * @return + */ + public Self createEmpty(Uri uri) { + this.put(uri.build().toString(), new HashMap<String, String>()); + incrementActionAmount(); + return (Self)this; + } + + /** + * Will automatically create the object if it does not exist + * + * @param obj - Optional object which serializes to a valid GraphInventory payload + * @param uri + * @return + */ + public Self createIfNotExists(Uri uri, Optional<Object> obj) { + if(!this.exists(uri)){ + if (obj.isPresent()) { + this.create(uri, obj.get()); + incrementActionAmount(); + } else { + this.createEmpty(uri); + incrementActionAmount(); + } + + } + return (Self)this; + } + + /** + * Adds a relationship between two objects in A&AI + * @param uriA + * @param uriB + * @return + */ + public Self connect(Uri uriA, Uri uriB) { + GraphInventoryResourceUri uriAClone = uriA.clone(); + this.put(uriAClone.relationshipAPI().build().toString(), this.buildRelationship(uriB)); + incrementActionAmount(); + return (Self)this; + } + + /** + * relationship between multiple objects in A&AI - connects A to all objects specified in list + * + * @param uriA + * @param uris + * @return + */ + public Self connect(Uri uriA, List<Uri> uris) { + for (Uri uri : uris) { + this.connect(uriA, uri); + } + return (Self)this; + } + + /** + * relationship between multiple objects in A&AI - connects A to all objects specified in list + * + * @param uriA + * @param uris + * @return + */ + public Self connect(Uri uriA, Uri uriB, EdgeLabel label) { + GraphInventoryResourceUri uriAClone = uriA.clone(); + this.put(uriAClone.relationshipAPI().build().toString(), this.buildRelationship(uriB, label)); + return (Self)this; + } + + /** + * relationship between multiple objects in A&AI - connects A to all objects specified in list + * + * @param uriA + * @param uris + * @return + */ + public Self connect(Uri uriA, List<Uri> uris, EdgeLabel label) { + for (Uri uri : uris) { + this.connect(uriA, uri, label); + } + return (Self)this; + } + + /** + * Removes relationship from two objects in A&AI + * + * @param uriA + * @param uriB + * @return + */ + public Self disconnect(Uri uriA, Uri uriB) { + GraphInventoryResourceUri uriAClone = uriA.clone(); + this.delete(uriAClone.relationshipAPI().build().toString(), this.buildRelationship(uriB)); + incrementActionAmount(); + return (Self)this; + } + + /** + * Removes relationship from multiple objects - disconnects A from all objects specified in list + * @param uriA + * @param uris + * @return + */ + public Self disconnect(Uri uriA, List<Uri> uris) { + for (Uri uri : uris) { + this.disconnect(uriA, uri); + } + return (Self)this; + } + /** + * Deletes object from A&AI. Automatically handles resource-version. + * + * @param uri + * @return + */ + public Self delete(Uri uri) { + Map<String, Object> result = this.get(new GenericType<Map<String, Object>>(){}, (Uri)uri.clone()) + .orElseThrow(() -> new NotFoundException(uri.build() + " does not exist in " + this.getGraphDBName())); + String resourceVersion = (String) result.get("resource-version"); + this.delete(uri.resourceVersion(resourceVersion).build().toString(), ""); + incrementActionAmount(); + return (Self)this; + } + + protected abstract <T> Optional<T> get(GenericType<T> genericType, Uri clone); + + protected abstract boolean exists(Uri uri); + + protected abstract String getGraphDBName(); + + /** + * @param obj - can be any object which will marshal into a valid A&AI payload + * @param uri + * @return + */ + public Self update(Uri uri, Object obj) { + + final String payload = getPatchConverter().convertPatchFormat(obj); + this.patch(uri.build().toString(), payload); + incrementActionAmount(); + return (Self)this; + } + + private void incrementActionAmount() { + actionCount++; + } + /** + * Executes all created transactions in A&AI + * @throws BulkProcessFailed + */ + public abstract void execute() throws BulkProcessFailed; + + private Relationship buildRelationship(Uri uri) { + return buildRelationship(uri, Optional.empty()); + } + + private Relationship buildRelationship(Uri uri, EdgeLabel label) { + return buildRelationship(uri, Optional.of(label)); + } + private Relationship buildRelationship(Uri uri, Optional<EdgeLabel> label) { + final Relationship result = new Relationship(); + result.setRelatedLink(uri.build().toString()); + if (label.isPresent()) { + result.setRelationshipLabel(label.toString()); + } + return result; + } + + protected GraphInventoryPatchConverter getPatchConverter() { + return this.patchConverter; + } + +} diff --git a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionalClient.java b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionalClient.java deleted file mode 100644 index a7362c85da..0000000000 --- a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionalClient.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.onap.so.client.graphinventory; - -import java.util.List; - -import org.onap.so.client.graphinventory.entities.GraphInventoryEdgeLabel; -import org.onap.so.client.graphinventory.entities.uri.GraphInventoryUri; -import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed; - -public interface GraphInventoryTransactionalClient<Self, Uri extends GraphInventoryUri, EdgeLabel extends GraphInventoryEdgeLabel> { - - /** - * adds an additional transaction and closes the previous transaction - * - * @return Self - */ - Self beginNewTransaction(); - - /** - * creates a new object in A&AI - * - * @param obj - can be any object which will marshal into a valid A&AI payload - * @param uri - * @return - */ - Self create(Uri uri, Object obj); - - /** - * creates a new object in A&AI with no payload body - * - * @param uri - * @return - */ - Self createEmpty(Uri uri); - - /** - * Adds a relationship between two objects in A&AI - * @param uriA - * @param uriB - * @return - */ - Self connect(Uri uriA, Uri uriB); - - /** - * relationship between multiple objects in A&AI - connects A to all objects specified in list - * - * @param uriA - * @param uris - * @return - */ - Self connect(Uri uriA, List<Uri> uris); - - Self connect(Uri uriA, Uri uriB, EdgeLabel label); - - Self connect(Uri uriA, List<Uri> uris, EdgeLabel label); - - /** - * Removes relationship from two objects in A&AI - * - * @param uriA - * @param uriB - * @return - */ - Self disconnect(Uri uriA, Uri uriB); - - /** - * Removes relationship from multiple objects - disconnects A from all objects specified in list - * @param uriA - * @param uris - * @return - */ - Self disconnect(Uri uriA, List<Uri> uris); - - /** - * Deletes object from A&AI. Automatically handles resource-version. - * - * @param uri - * @return - */ - Self delete(Uri uri); - - /** - * @param obj - can be any object which will marshal into a valid A&AI payload - * @param uri - * @return - */ - Self update(Uri uri, Object obj); - - /** - * Executes all created transactions in A&AI - * @throws BulkProcessFailed - */ - void execute() throws BulkProcessFailed; - -}
\ No newline at end of file diff --git a/common/src/main/java/org/onap/so/client/graphinventory/TransactionBuilder.java b/common/src/main/java/org/onap/so/client/graphinventory/TransactionBuilder.java new file mode 100644 index 0000000000..2cab4b5654 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/graphinventory/TransactionBuilder.java @@ -0,0 +1,10 @@ +package org.onap.so.client.graphinventory; + +public interface TransactionBuilder { + + + void put(String uri, Object body); + void delete(String uri, Object body); + void patch(String uri,Object body); + +} diff --git a/common/src/main/java/org/onap/so/client/aai/entities/DSLNode.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLNode.java index f94c28c5b7..7da1408f2d 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/DSLNode.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLNode.java @@ -18,12 +18,13 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.client.aai.entities; +package org.onap.so.client.graphinventory.entities; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.onap.so.client.aai.entities.QueryStep; import org.onap.so.client.graphinventory.GraphInventoryObjectName; public class DSLNode implements QueryStep { diff --git a/common/src/main/java/org/onap/so/client/aai/entities/DSLNodeKey.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLNodeKey.java index a9795d1cc3..159bfb1c29 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/DSLNodeKey.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLNodeKey.java @@ -18,12 +18,14 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.client.aai.entities; +package org.onap.so.client.graphinventory.entities; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.onap.so.client.aai.entities.QueryStep; + import com.google.common.base.Joiner; diff --git a/common/src/main/java/org/onap/so/client/aai/entities/DSLQuery.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLQuery.java index 0f4095177a..c8ab015b26 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/DSLQuery.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLQuery.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.client.aai.entities; +package org.onap.so.client.graphinventory.entities; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/common/src/main/java/org/onap/so/client/aai/entities/DSLQueryBuilder.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLQueryBuilder.java index 9f1dbeda8f..73dccea8e6 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/DSLQueryBuilder.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/DSLQueryBuilder.java @@ -18,13 +18,15 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.client.aai.entities; +package org.onap.so.client.graphinventory.entities; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import org.onap.so.client.aai.entities.QueryStep; + import com.google.common.base.Joiner; diff --git a/common/src/main/java/org/onap/so/client/aai/entities/__.java b/common/src/main/java/org/onap/so/client/graphinventory/entities/__.java index 16d6f9b27e..184f412adb 100644 --- a/common/src/main/java/org/onap/so/client/aai/entities/__.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/entities/__.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.so.client.aai.entities; +package org.onap.so.client.graphinventory.entities; import org.onap.so.client.graphinventory.GraphInventoryObjectName; 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 93de9139f9..dc4179a86f 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 @@ -98,6 +98,13 @@ public class SimpleUri implements GraphInventoryResourceUri, Serializable { validateValuesSize(childType.partialUri(), values); } + protected SimpleUri(GraphInventoryResourceUri parentUri, GraphInventoryObjectPlurals childType) { + this.type = null; + this.pluralType = childType; + this.internalURI = UriBuilder.fromUri(parentUri.build()).path(childType.partialUri()); + this.values = new Object[0]; + } + protected void setInternalURI(UriBuilder builder) { this.internalURI = builder; } diff --git a/common/src/main/java/org/onap/so/client/ruby/dmaap/RubyCreateTicketRequestPublisher.java b/common/src/main/java/org/onap/so/client/ruby/dmaap/RubyCreateTicketRequestPublisher.java index 1d4e014300..93a2d96c5e 100644 --- a/common/src/main/java/org/onap/so/client/ruby/dmaap/RubyCreateTicketRequestPublisher.java +++ b/common/src/main/java/org/onap/so/client/ruby/dmaap/RubyCreateTicketRequestPublisher.java @@ -32,13 +32,13 @@ public class RubyCreateTicketRequestPublisher extends DmaapPublisher{ } @Override - public String getUserName() { - return msoProperties.get("ruby.create-ticket-request.dmaap.username"); + public String getAuth() { + return msoProperties.get("ruby.create-ticket-request.dmaap.auth"); } @Override - public String getPassword() { - return msoProperties.get("ruby.create-ticket-request.dmaap.password"); + public String getKey() { + return msoProperties.get("mso.msoKey"); } @Override diff --git a/common/src/main/java/org/onap/so/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java b/common/src/main/java/org/onap/so/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java index 8154b9137d..a76c47c805 100644 --- a/common/src/main/java/org/onap/so/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java +++ b/common/src/main/java/org/onap/so/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java @@ -42,13 +42,13 @@ public class SDNOHealthCheckDmaapConsumer extends DmaapConsumer { } @Override - public String getUserName() { - return msoProperties.get("sdno.health-check.dmaap.username"); + public String getAuth() { + return msoProperties.get("sdno.health-check.dmaap.auth"); } @Override - public String getPassword() { - return msoProperties.get("sdno.health-check.dmaap.password"); + public String getKey() { + return msoProperties.get("mso.msoKey"); } @Override diff --git a/common/src/main/java/org/onap/so/client/sdno/dmaap/SDNOHealthCheckDmaapPublisher.java b/common/src/main/java/org/onap/so/client/sdno/dmaap/SDNOHealthCheckDmaapPublisher.java index 2556e67e3c..f4af2052ac 100644 --- a/common/src/main/java/org/onap/so/client/sdno/dmaap/SDNOHealthCheckDmaapPublisher.java +++ b/common/src/main/java/org/onap/so/client/sdno/dmaap/SDNOHealthCheckDmaapPublisher.java @@ -33,13 +33,13 @@ public class SDNOHealthCheckDmaapPublisher extends DmaapPublisher { } @Override - public String getUserName() { - return msoProperties.get("sdno.health-check.dmaap.username"); + public String getAuth() { + return msoProperties.get("sdno.health-check.dmaap.auth"); } @Override - public String getPassword() { - return msoProperties.get("sdno.health-check.dmaap.password"); + public String getKey() { + return msoProperties.get("sdno.health-check.dmaap.msoKey"); } @Override |