Remove only the first occurrence of parentUri from uriTemplate.
add createIfNotExists to transaction clients
moved classes to generic GraphInventory location
removed unused interfaces from graphinventory client
refactored all graph inventory clients
Change-Id: I2b946674ff92c44d33fff2f327e96655ed5c0195
Issue-ID: SO-1501
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
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) {
}
@Override
- protected RestClient createClient(GraphInventoryUri uri) {
+ public RestClient createClient(GraphInventoryUri uri) {
try {
return new AAIRestClient(getRestProperties(), constructPath(uri));
} catch (GraphInventoryUriComputationException | NotFoundException e) {
}
}
- 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";
+ }
}
--- /dev/null
+/*-
+ * ============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.uri.GraphInventoryUri;
+
+public class AAIDSLQueryClient extends GraphInventoryQueryClient<AAIDSLQueryClient> {
+
+ public AAIDSLQueryClient() {
+ super(new AAIClient());
+ }
+
+ public AAIDSLQueryClient(AAIVersion version) {
+ super(new AAIClient(version));
+ }
+
+ @Override
+ protected GraphInventoryUri getQueryUri() {
+ return AAIUriFactory.createResourceUri(AAIObjectType.DSL);
+ }
+
+}
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;
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;
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);
}
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), "");
}
}
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> {
- 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);
}
+
}
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);
}
+
}
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) {
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;
}
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;
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;
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();
}
/* (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()) {
}
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;
}
super(parentUri, childType, childValues);
}
+ protected AAISimpleUri(AAIResourceUri parentUri, AAIObjectPlurals childType) {
+ super(parentUri, childType);
+ }
+
@Override
public AAISimpleUri relationshipAPI() {
return (AAISimpleUri) super.relationshipAPI();
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
*
public enum Format {
RESOURCE("resource"),
+ RESOURCE_AND_URL("resource_and_url"),
SIMPLE("simple"),
RAW("raw"),
CONSOLE("console"),
}
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();
}
* ============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> {
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, CustomQuery 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) {
}
return clone;
}
- @Override
- protected RestClient createClient(GraphInventoryUri uri) {
- return super.createClient(setupQueryParams(uri));
- }
}
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
*
* @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
* @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
* @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
* @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
* @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
* @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.
* @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
* @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
* @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
* @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
* @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
+++ /dev/null
-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
* ============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;
}
--- /dev/null
+/*-
+ * ============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;
+ }
+
+}
+++ /dev/null
-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
--- /dev/null
+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);
+
+}
* ============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 {
* ============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;
* ============LICENSE_END=========================================================
*/
-package org.onap.so.client.aai.entities;
+package org.onap.so.client.graphinventory.entities;
import com.fasterxml.jackson.annotation.JsonInclude;
* ============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;
* ============LICENSE_END=========================================================
*/
-package org.onap.so.client.aai.entities;
+package org.onap.so.client.graphinventory.entities;
import org.onap.so.client.graphinventory.GraphInventoryObjectName;
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;
}
assertEquals("/cloud-infrastructure/pservers/pserver/{hostname}/p-interfaces/p-interface/{interface-name}", type.uriTemplate());
assertEquals("/p-interfaces/p-interface/{interface-name}", type.partialUri());
}
+
+ @Test
+ public void networkPolicyObjectTypeTest() {
+ final String id = "test1";
+ AAIUri aaiUri = AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, id);
+ assertEquals("/network/network-policies/network-policy/test1", aaiUri.build().toString());
+ }
}
package org.onap.so.client.aai;
-import static org.junit.Assert.assertNotNull;
-import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import org.onap.so.client.RestClient;
import org.onap.so.client.aai.entities.CustomQuery;
import org.onap.so.client.aai.entities.uri.AAIUri;
import org.onap.so.client.aai.entities.uri.AAIUriFactory;
import org.onap.so.client.graphinventory.Format;
+import org.onap.so.client.graphinventory.GraphInventoryClient;
+import org.onap.so.client.graphinventory.GraphInventorySubgraphType;
@RunWith(MockitoJUnitRunner.class)
@Mock
RestClient restClient;
- @Spy
+ @Mock
+ GraphInventoryClient client;
+
+ @InjectMocks
AAIQueryClient aaiQueryClient = new AAIQueryClient();
@Test
Format format = Format.SIMPLE;
CustomQuery query = new CustomQuery(uris);
- doReturn(restClient).when(aaiQueryClient).createClient(isA(AAIUri.class));
+ doReturn(restClient).when(client).createClient(isA(AAIUri.class));
aaiQueryClient.query(format, query);
- verify(aaiQueryClient, times(1)).createClient(AAIUriFactory.createResourceUri(AAIObjectType.CUSTOM_QUERY).queryParam("format", format.toString()));
+ verify(client, times(1)).createClient(AAIUriFactory.createResourceUri(AAIObjectType.CUSTOM_QUERY).queryParam("format", format.toString()));
verify(restClient, times(1)).put(query, String.class);
}
@Test
public void testCreateClient() {
String depth = "testDepth";
- AAISubgraphType subgraph = AAISubgraphType.STAR;
+ GraphInventorySubgraphType subgraph = GraphInventorySubgraphType.STAR;
aaiQueryClient.depth(depth);
aaiQueryClient.nodesOnly();
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
+import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
import org.onap.aai.domain.yang.Relationship;
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.AAIUriFactory;
import org.onap.so.client.defaultproperties.DefaultAAIPropertiesImpl;
+import org.onap.so.client.graphinventory.GraphInventoryClient;
import com.github.tomakehurst.wiremock.admin.NotFoundException;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
+
+@RunWith(MockitoJUnitRunner.class)
public class AAIResourcesClientTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
+
+ @Spy
+ public AAIClient client;
+
+ @InjectMocks
+ public AAIResourcesClient aaiClient = new AAIResourcesClient();
+
+ @Before
+ public void beforeTest() {
+ doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
+ }
+
@Test
public void verifyNotExists() {
AAIResourceUri path = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test");
.withHeader("Content-Type", "text/plain")
.withBody("hello")
.withStatus(404)));
- AAIResourcesClient client= createClient();
+ AAIResourcesClient client= aaiClient;
boolean result = client.exists(path);
assertEquals("path not found", false, result);
}
.willReturn(
aResponse()
.withStatus(204)));
- AAIResourcesClient client= createClient();
+ AAIResourcesClient client= aaiClient;
client.delete(path);
}
.withHeader("Content-Type", "application/json")
.withBodyFile("aai/resources/mockObject.json")
.withStatus(200)));
- AAIResourcesClient client= createClient();
+ AAIResourcesClient client= aaiClient;
client.get(path);
}
.withStatus(200)));
AAIResourceUri pathClone = path.clone();
- AAIResourcesClient client= createClient();
+ AAIResourcesClient client= aaiClient;
client.connect(path, path2);
assertEquals("uri not modified", pathClone.build().toString(), path.build().toString());
}
.withStatus(204)));
AAIResourceUri pathClone = path.clone();
- AAIResourcesClient client= createClient();
+ AAIResourcesClient client= aaiClient;
client.disconnect(path, path2);
assertEquals("uri not modified", pathClone.build().toString(), path.build().toString());
}
aResponse()
.withStatus(200)));
- AAIResourcesClient client= createClient();
+ AAIResourcesClient client= aaiClient;
client.update(path, "{}");
}
.withHeader("Content-Type", "text/plain")
.withBody("hello")
.withStatus(404)));
- AAIResourcesClient client= createClient();
+ AAIResourcesClient client= aaiClient;
AAIResultWrapper result = client.get(path);
assertEquals("is empty", true, result.isEmpty());
}
.withHeader("Content-Type", "text/plain")
.withBody("hello")
.withStatus(404)));
- AAIResourcesClient client= createClient();
+ AAIResourcesClient client= aaiClient;
thrown.expect(NotFoundException.class);
thrown.expectMessage(containsString(path.build() + " not found in A&AI"));
AAIResultWrapper result = client.get(path, NotFoundException.class);
@Test
public void buildRelationshipTest() {
- AAIResourcesClient client = createClient();
+ AAIResourcesClient client = aaiClient;
AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "test");
Relationship relationship = new Relationship();
relationship.setRelatedLink(uri.build().toString());
assertThat("expect equal has label", actual, sameBeanAs(relationship));
}
-
- private AAIResourcesClient createClient() {
- AAIResourcesClient client = spy(new AAIResourcesClient());
- doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
- return client;
- }
+
}
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
import org.onap.so.client.aai.entities.AAIResultWrapper;
import org.onap.so.client.aai.entities.uri.AAIUriFactory;
import org.onap.so.client.aai.entities.uri.ServiceInstanceUri;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
+@RunWith(MockitoJUnitRunner.class)
public class AAIResourcesClientWithServiceInstanceUriTest {
@Rule
@Rule
public ExpectedException thrown = ExpectedException.none();
+ @Spy
+ public AAIClient client;
+
+ @InjectMocks
+ public AAIResourcesClient aaiClient = new AAIResourcesClient();
+
private ServiceInstanceUri uri;
@Before
public void setUp() {
+
+ doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
wireMockRule.stubFor(get(urlMatching("/aai/v[0-9]+/nodes.*"))
.willReturn(aResponse()
.withStatus(404)
.withHeader("Mock", "true")));
uri = spy((ServiceInstanceUri)AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, "id"));
- doReturn(createClient()).when(uri).getResourcesClient();
+ doReturn(aaiClient).when(uri).getResourcesClient();
}
@Test
public void getWithClass() {
- AAIResourcesClient client = createClient();
+ AAIResourcesClient client = aaiClient;
Optional<String> result = client.get(String.class, uri);
assertThat(result.isPresent(), equalTo(false));
@Test
public void getFullResponse() {
- AAIResourcesClient client = createClient();
+ AAIResourcesClient client = aaiClient;
Response result = client.getFullResponse(uri);
assertThat(result.getStatus(), equalTo(Status.NOT_FOUND.getStatusCode()));
}
@Test
public void getWithGenericType() {
- AAIResourcesClient client = createClient();
+ AAIResourcesClient client = aaiClient;
Optional<List<String>> result = client.get(new GenericType<List<String>>() {}, uri);
assertThat(result.isPresent(), equalTo(false));
}
@Test
public void getAAIWrapper() {
- AAIResourcesClient client = createClient();
+ AAIResourcesClient client = aaiClient;
AAIResultWrapper result = client.get(uri);
assertThat(result.isEmpty(), equalTo(true));
}
@Test
public void getWithException() {
- AAIResourcesClient client = createClient();
+ AAIResourcesClient client = aaiClient;
this.thrown.expect(IllegalArgumentException.class);
AAIResultWrapper result = client.get(uri, IllegalArgumentException.class);
}
@Test
public void existsTest() {
- AAIResourcesClient client = createClient();
+ AAIResourcesClient client = aaiClient;
doReturn(uri).when(uri).clone();
boolean result = client.exists(uri);
assertThat(result, equalTo(false));
}
- private AAIResourcesClient createClient() {
- AAIResourcesClient client = spy(new AAIResourcesClient());
- doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
- return client;
- }
+
}
import org.json.JSONException;
import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
import org.onap.aai.domain.yang.Pserver;
import org.onap.aai.domain.yang.v9.Complex;
import org.onap.so.client.aai.entities.singletransaction.SingleTransactionRequest;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
+@RunWith(MockitoJUnitRunner.class)
public class AAISingleTransactionClientTest {
private final static String AAI_JSON_FILE_LOCATION = "src/test/resources/__files/aai/singletransaction/";
ObjectMapper mapper;
+ public AAIClient client = new AAIClient();
+
+ public AAIResourcesClient aaiClient = new AAIResourcesClient();
+
@Before
public void before() throws JsonParseException, JsonMappingException, IOException {
mapper = new AAICommonObjectMapperProvider().getMapper();
@Test
public void testRequest() throws JSONException,IOException {
- AAIResourcesClient client = createClient();
Pserver pserver = new Pserver();
pserver.setHostname("pserver-hostname");
pserver.setFqdn("pserver-bulk-process-single-transactions-multiple-actions-1-fqdn");
Complex complex = new Complex();
complex.setCity("my-city");
AAISingleTransactionClient singleTransaction =
- client.beginSingleTransaction()
+ aaiClient.beginSingleTransaction()
.create(uriA, pserver)
.update(uriA, pserver2)
.create(uriB, complex);
@Test
public void testFailure() throws IOException {
- AAIResourcesClient client = createClient();
- AAISingleTransactionClient singleTransaction = client.beginSingleTransaction();
+ AAISingleTransactionClient singleTransaction = aaiClient.beginSingleTransaction();
SingleTransactionResponse expected = mapper.readValue(this.getJson("sample-response-failure.json"), SingleTransactionResponse.class);
Optional<String> errorMessage = singleTransaction.locateErrorMessages(expected);
@Test
public void testSuccessResponse() throws IOException {
- AAIResourcesClient client = createClient();
- AAISingleTransactionClient singleTransaction = client.beginSingleTransaction();
+ AAISingleTransactionClient singleTransaction = aaiClient.beginSingleTransaction();
SingleTransactionResponse expected = mapper.readValue(this.getJson("sample-response.json"), SingleTransactionResponse.class);
Optional<String> errorMessage = singleTransaction.locateErrorMessages(expected);
@Test
public void confirmPatchFormat() {
- AAISingleTransactionClient singleTransaction = spy(new AAISingleTransactionClient(AAIVersion.LATEST));
+ AAISingleTransactionClient singleTransaction = spy(new AAISingleTransactionClient(aaiClient, client));
GraphInventoryPatchConverter mock = mock(GraphInventoryPatchConverter.class);
doReturn(mock).when(singleTransaction).getPatchConverter();
singleTransaction.update(uriA, "{}");
return new String(Files.readAllBytes(Paths.get(AAI_JSON_FILE_LOCATION + filename)));
}
- private AAIResourcesClient createClient() {
- AAIResourcesClient client = spy(new AAIResourcesClient());
- doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
- return client;
- }
}
import org.junit.Before;
import org.junit.Test;
-
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
import org.onap.aai.domain.yang.Relationship;
import org.onap.so.client.aai.entities.uri.AAIResourceUri;
import org.onap.so.client.aai.entities.uri.AAIUriFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
+@RunWith(MockitoJUnitRunner.class)
public class AAITransactionalClientTest {
private final static String AAI_JSON_FILE_LOCATION = "src/test/resources/__files/aai/bulkprocess/";
ObjectMapper mapper;
+ public AAIClient client = new AAIClient();
+
+ public AAIResourcesClient aaiClient = new AAIResourcesClient();
+
@Before
public void before() throws JsonParseException, JsonMappingException, IOException {
mapper = new AAICommonObjectMapperProvider().getMapper();
final Relationship body = new Relationship();
body.setRelatedLink(uriB.build().toString());
- AAITransactionalClient transactions = createClient().beginTransaction()
+ AAITransactionalClient transactions = aaiClient.beginTransaction()
.create(uriA.clone().relationshipAPI(), body);
String serializedTransactions = mapper.writeValueAsString(transactions.getTransactions());
uris.add(uriB);
AAIResourceUri uriAClone = uriA.clone();
- AAITransactionalClient transactions = createClient()
+ AAITransactionalClient transactions = aaiClient
.beginTransaction().connect(uriA, uris).connect(uriC, uriD)
.beginNewTransaction().connect(uriE, uriF);
List<AAIResourceUri> uris = new ArrayList<AAIResourceUri>();
uris.add(uriB);
- AAITransactionalClient transactions = createClient().beginTransaction()
+ AAITransactionalClient transactions = aaiClient.beginTransaction()
.disconnect(uriA, uris);
String serializedTransactions = mapper.writeValueAsString(transactions.getTransactions());
body.setRelatedLink(uriB.build().toString());
AAIResourceUri uriAClone = uriA.clone().relationshipAPI();
- AAITransactionalClient transactions = createClient().beginTransaction().update(uriAClone, body);
+ AAITransactionalClient transactions = aaiClient.beginTransaction().update(uriAClone, body);
String serializedTransactions = mapper.writeValueAsString(transactions.getTransactions());
Map<String, Object> actual = mapper.readValue(serializedTransactions, new TypeReference<Map<String, Object>>(){});
@Test
public void verifyResponse() throws IOException {
- AAITransactionalClient transactions = createClient()
+ AAITransactionalClient transactions = aaiClient
.beginTransaction();
assertEquals("success status", Optional.empty(), transactions.locateErrorMessages(getJson("response-success.json")));
@Test
public void confirmPatchFormat() {
- AAITransactionalClient client = spy(new AAITransactionalClient(AAIVersion.LATEST));
+ AAITransactionalClient transactionClient = spy(new AAITransactionalClient(aaiClient, client));
GraphInventoryPatchConverter mock = mock(GraphInventoryPatchConverter.class);
- doReturn(mock).when(client).getPatchConverter();
- client.update(uriA, "{}");
+ doReturn(mock).when(transactionClient).getPatchConverter();
+ transactionClient.update(uriA, "{}");
verify(mock, times(1)).convertPatchFormat(any());
}
return new String(Files.readAllBytes(Paths.get(AAI_JSON_FILE_LOCATION + filename)));
}
- private AAIResourcesClient createClient() {
- AAIResourcesClient client = spy(new AAIResourcesClient());
- doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
- return client;
- }
}
import static org.junit.Assert.assertEquals;
import org.junit.Test;
-import org.onap.so.client.aai.entities.DSLNode;
-import org.onap.so.client.aai.entities.DSLQueryBuilder;
-import org.onap.so.client.aai.entities.__;
+import org.onap.so.client.graphinventory.entities.DSLNode;
+import org.onap.so.client.graphinventory.entities.DSLQueryBuilder;
+import org.onap.so.client.graphinventory.entities.__;
public class DSLQueryBuilderTest {
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.core.UriBuilder;
+import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
import org.mockito.ArgumentMatchers;
+import org.mockito.InjectMocks;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.client.aai.AAIClient;
import org.onap.so.client.aai.AAIResourcesClient;
import org.onap.so.client.aai.entities.AAIResultWrapper;
import org.onap.so.client.defaultproperties.DefaultAAIPropertiesImpl;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
+@RunWith(MockitoJUnitRunner.class)
public class ServiceInstanceUriTest {
private final static String AAI_JSON_FILE_LOCATION = "src/test/resources/__files/aai/resources/";
@Rule
public final ExpectedException exception = ExpectedException.none();
+ @Spy
+ public AAIClient client;
+
+ @InjectMocks
+ public AAIResourcesClient aaiClient = new AAIResourcesClient();
+
+ @Before
+ public void beforeTest() {
+ doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
+ }
@Test
public void found() throws IOException {
final String content = new String(Files.readAllBytes(Paths.get(AAI_JSON_FILE_LOCATION + "service-instance-pathed-query.json")));
public void noVertexFound() throws GraphInventoryUriNotFoundException, GraphInventoryPayloadException {
ServiceInstanceUri instance = new ServiceInstanceUri("key3");
ServiceInstanceUri spy = spy(instance);
- AAIResourcesClient client = createClient();
+ AAIResourcesClient client = aaiClient;
doReturn(client).when(spy).getResourcesClient();
stubFor(get(urlPathMatching("/aai/v[0-9]+/nodes/service-instances/service-instance/key3"))
.willReturn(aResponse()
exception.expect(NotFoundException.class);
spy.build();
}
-
- private AAIResourcesClient createClient() {
- AAIResourcesClient client = spy(new AAIResourcesClient());
- doReturn(new DefaultAAIPropertiesImpl()).when(client).getRestProperties();
- return client;
- }
}