diff options
Diffstat (limited to 'common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionClient.java')
-rw-r--r-- | common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionClient.java | 404 |
1 files changed, 204 insertions, 200 deletions
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 index 4c228b2ea3..992d1f017b 100644 --- a/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionClient.java +++ b/common/src/main/java/org/onap/so/client/graphinventory/GraphInventoryTransactionClient.java @@ -24,10 +24,8 @@ 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; @@ -37,202 +35,208 @@ 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()); - } else { - this.createEmpty(uri); - } - - } - 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; - } - +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()); + } else { + this.createEmpty(uri); + } + + } + 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; + } + } |