diff options
Diffstat (limited to 'dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDC.java')
-rw-r--r-- | dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDC.java | 802 |
1 files changed, 24 insertions, 778 deletions
diff --git a/dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDC.java b/dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDC.java index 08383ea..c704689 100644 --- a/dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDC.java +++ b/dcaedt_catalog/asdc/src/main/java/org/onap/sdc/dcae/catalog/asdc/ASDC.java @@ -1,114 +1,52 @@ package org.onap.sdc.dcae.catalog.asdc; -import java.net.URI; -import java.net.URISyntaxException; - -import java.io.File; -import java.io.IOException; -import java.io.UncheckedIOException; - -import java.util.List; -import java.util.Set; -import java.util.UUID; -import java.util.Collections; - -import java.util.function.UnaryOperator; - -import javax.annotation.PostConstruct; - +import org.apache.commons.codec.digest.DigestUtils; +import org.json.JSONArray; +import org.json.JSONObject; +import org.onap.sdc.common.onaplog.Enums.LogLevel; import org.onap.sdc.common.onaplog.OnapLoggerDebug; import org.onap.sdc.common.onaplog.OnapLoggerError; -import org.onap.sdc.common.onaplog.Enums.LogLevel; -import org.onap.sdc.dcae.enums.ArtifactGroupType; -import org.onap.sdc.dcae.enums.ArtifactType; -import org.onap.sdc.dcae.composition.restmodels.sdc.ResourceDetailed; -import org.springframework.http.MediaType; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpRequest; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpEntity; -import org.springframework.http.RequestEntity; -import org.springframework.http.ResponseEntity; +import org.onap.sdc.dcae.catalog.commons.Action; +import org.onap.sdc.dcae.catalog.commons.Future; +import org.onap.sdc.dcae.catalog.commons.Futures; +import org.onap.sdc.dcae.catalog.commons.JSONHttpMessageConverter; +import org.springframework.context.annotation.Scope; +import org.springframework.http.*; import org.springframework.http.client.AsyncClientHttpRequestExecution; import org.springframework.http.client.AsyncClientHttpRequestInterceptor; import org.springframework.http.client.ClientHttpResponse; -import org.springframework.web.client.AsyncRestTemplate; -import org.springframework.web.client.RestClientException; -import org.springframework.web.client.HttpClientErrorException; import org.springframework.http.converter.HttpMessageConverter; - -import org.springframework.util.Base64Utils; -import org.apache.commons.codec.digest.DigestUtils; - -import org.springframework.stereotype.Component; -import org.springframework.context.annotation.Scope; import org.springframework.scheduling.annotation.Scheduled; - +import org.springframework.stereotype.Component; +import org.springframework.util.Base64Utils; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.ListenableFutureCallback; +import org.springframework.web.client.AsyncRestTemplate; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestClientException; -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.StringUtils; - -import org.json.JSONObject; -import org.onap.sdc.dcae.catalog.commons.Action; -import org.onap.sdc.dcae.catalog.commons.Future; -import org.onap.sdc.dcae.catalog.commons.Futures; -import org.onap.sdc.dcae.catalog.commons.JSONHttpMessageConverter; -import org.json.JSONArray; - -import org.apache.commons.cli.BasicParser; -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.CommandLineParser; -import org.apache.commons.cli.HelpFormatter; -import org.apache.commons.cli.OptionBuilder; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.ParseException; +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.UUID; @Component("asdc") @Scope("singleton") public class ASDC { - private static final String TARGET = "target"; - private static final String ACTION = "action"; - private static final String ASSET_TYPE = "assetType"; - private static final String USER_ID = "USER_ID"; - public static final String ASSET_ID = "assetId"; - public static final String ARTIFACT_ID = "artifactId"; - public static final String LIST_FILTER = "listFilter"; - public enum AssetType { resource, service, product } - public enum LifecycleState { - Checkin, - Checkout, - Certify, - undocheckout - } - - protected static OnapLoggerError errLogger = OnapLoggerError.getInstance(); protected static OnapLoggerDebug debugLogger = OnapLoggerDebug.getInstance(); - private static final String ARTIFACT_TYPE = "artifactType"; - private static final String ARTIFACT_GROUP_TYPE = "artifactGroupType"; - private static final String ARTIFACT_LABEL = "artifactLabel"; - private static final String ARTIFACT_NAME = "artifactName"; - private static final String DESCRIPTION = "description"; - private static final String PAYLOAD_DATA = "payloadData"; - - private static final String[] artifactMandatoryEntries = new String[] {}; - - private static final String[] updateMandatoryEntries = new String[] {ARTIFACT_NAME, - ARTIFACT_TYPE, ARTIFACT_GROUP_TYPE, ARTIFACT_LABEL, DESCRIPTION, PAYLOAD_DATA}; - - private static final String[] uploadMandatoryEntries = new String[] {ARTIFACT_NAME, - ARTIFACT_TYPE, ARTIFACT_GROUP_TYPE, ARTIFACT_LABEL, DESCRIPTION, PAYLOAD_DATA}; - private URI rootUri; private String rootPath = "/sdc/v1/catalog/"; private String user, passwd; @@ -187,30 +125,10 @@ public class ASDC { return getAssets(AssetType.resource, JSONArray.class, category, subCategory, resourceType); } - public <T> Future<T> getServices(Class<T> theType) { - return getAssets(AssetType.service, theType); - } - - public Future<JSONArray> getServices() { - return getAssets(AssetType.service, JSONArray.class); - } - - public <T> Future<T> getServices(Class<T> theType, String theCategory, String theSubCategory) { - return getAssets(AssetType.service, theType, theCategory, theSubCategory); - } - - public Future<JSONArray> getServices(String theCategory, String theSubCategory) { - return getAssets(AssetType.service, JSONArray.class, theCategory, theSubCategory); - } - public <T> Future<T> getAssets(AssetType theAssetType, Class<T> theType) { return fetch(refAssets(theAssetType), theType); } - public <T> Action<T> getAssetsAction(AssetType theAssetType, Class<T> theType) { - return () -> fetch(refAssets(theAssetType), theType); - } - public <T> Future<T> getAssets(AssetType theAssetType, Class<T> theType, String theCategory, String theSubCategory) { return getAssets(theAssetType, theType, theCategory, theSubCategory, null); @@ -220,12 +138,7 @@ public class ASDC { String theCategory, String theSubCategory, String theResourceType) { return fetch(refAssets(theAssetType) + filter(theCategory, theSubCategory, theResourceType), theType); } - - public <T> Action<T> getAssetsAction(AssetType theAssetType, Class<T> theType, - String theCategory, String theSubCategory, String theResourceType) { - return () -> fetch(refAssets(theAssetType) + filter(theCategory, theSubCategory, theResourceType), theType); - } - + protected String refAssets(AssetType theAssetType) { return this.rootPath + theAssetType + "s/"; } @@ -260,19 +173,6 @@ public class ASDC { return getAsset(AssetType.resource, theId, JSONObject.class); } - public Future<ResourceDetailed> getSDCResource(UUID theId) { - return getAsset(AssetType.resource, theId, ResourceDetailed.class); - } - - - public <T> Future<T> getService(UUID theId, Class<T> theType) { - return getAsset(AssetType.service, theId, theType); - } - - public Future<JSONObject> getService(UUID theId) { - return getAsset(AssetType.service, theId, JSONObject.class); - } - public <T> Future<T> getAsset(AssetType theAssetType, UUID theId, Class<T> theType) { return fetch(refAsset(theAssetType, theId) + "/metadata", theType); } @@ -281,14 +181,6 @@ public class ASDC { return () -> fetch(refAsset(theAssetType, theId) + "/metadata", theType); } - public Future<byte[]> getResourceArchive(UUID theId) { - return getAssetArchive(AssetType.resource, theId); - } - - public Future<byte[]> getServiceArchive(UUID theId) { - return getAssetArchive(AssetType.service, theId); - } - public Future<byte[]> getAssetArchive(AssetType theAssetType, UUID theId) { return fetch(refAsset(theAssetType, theId) + "/toscaModel", byte[].class); } @@ -297,42 +189,6 @@ public class ASDC { return () -> fetch(refAsset(theAssetType, theId) + "/toscaModel", byte[].class); } - public Future<JSONObject> checkinResource(UUID theId, String theUser, String theMessage) { - return cycleAsset(AssetType.resource, theId, LifecycleState.Checkin, theUser, theMessage); - } - - public Future<JSONObject> checkinService(UUID theId, String theUser, String theMessage) { - return cycleAsset(AssetType.service, theId, LifecycleState.Checkin, theUser, theMessage); - } - - public Future<JSONObject> checkoutResource(UUID theId, String theUser, String theMessage) { - return cycleAsset(AssetType.resource, theId, LifecycleState.Checkout, theUser, theMessage); - } - - public Future<JSONObject> checkoutService(UUID theId, String theUser, String theMessage) { - return cycleAsset(AssetType.service, theId, LifecycleState.Checkout, theUser, theMessage); - } - - public Future<JSONObject> certifyResource(UUID theId, String theUser, String theMessage) { - return cycleAsset(AssetType.resource, theId, LifecycleState.Certify, theUser, theMessage); - } - - public Future<JSONObject> certifyService(UUID theId, String theUser, String theMessage) { - return cycleAsset(AssetType.service, theId, LifecycleState.Certify, theUser, theMessage); - } - - /* Normally theMessage is mandatory (and we'd use put instead of putOpt) but .. not so for undocheckout .. - */ - public Future<JSONObject> cycleAsset(AssetType theAssetType, UUID theId, LifecycleState theState, - String theUser, String theMessage) { - return post(refAsset(theAssetType, theId) + "/lifecycleState/" + theState, - headers -> prepareHeaders(headers).header(USER_ID, theUser), new JSONObject().putOpt("userRemarks", theMessage)); - } - - protected String refAssetInstanceArtifact(AssetType theAssetType, UUID theAssetId, String theAssetInstance, UUID theArtifactId) { - return refAsset(theAssetType, theAssetId) + "/resourceInstances/" + theAssetInstance + "/artifacts" + (theArtifactId == null ? "" : ("/" + theArtifactId)); - } - protected String refAssetArtifact(AssetType theAssetType, UUID theAssetId, UUID theArtifactId) { return refAsset(theAssetType, theAssetId) + "/artifacts" + (theArtifactId == null ? "" : ("/" + theArtifactId)); } @@ -340,414 +196,11 @@ public class ASDC { public <T> Future<T> getResourceArtifact(UUID theAssetId, UUID theArtifactId, Class<T> theType) { return getAssetArtifact(AssetType.resource, theAssetId, theArtifactId, theType); } - - public <T> Future<T> getServiceArtifact(UUID theAssetId, UUID theArtifactId, Class<T> theType) { - return getAssetArtifact(AssetType.service, theAssetId, theArtifactId, theType); - } - - public <T> Future<T> getResourceInstanceArtifact(UUID theAssetId, UUID theArtifactId, String theInstance, Class<T> theType) { - return getAssetInstanceArtifact(AssetType.resource, theAssetId, theInstance, theArtifactId, theType); - } - - public <T> Future<T> getServiceInstanceArtifact(UUID theAssetId, UUID theArtifactId, String theInstance, Class<T> theType) { - return getAssetInstanceArtifact(AssetType.service, theAssetId, theInstance, theArtifactId, theType); - } public <T> Future<T> getAssetArtifact(AssetType theAssetType, UUID theAssetId, UUID theArtifactId, Class<T> theType) { return fetch(refAssetArtifact(theAssetType, theAssetId, theArtifactId), theType); } - - public <T> Action<T> getAssetArtifactAction(AssetType theAssetType, UUID theAssetId, UUID theArtifactId, Class<T> theType) { - return () -> fetch(refAssetArtifact(theAssetType, theAssetId, theArtifactId), theType); - } - - public <T> Future<T> getAssetInstanceArtifact(AssetType theAssetType, UUID theAssetId, String theInstance, UUID theArtifactId, Class<T> theType) { - return fetch(refAssetInstanceArtifact(theAssetType, theAssetId, theInstance, theArtifactId), theType); - } - - public <T> Action<T> getAssetInstanceArtifactAction(AssetType theAssetType, UUID theAssetId, String theInstance, UUID theArtifactId, Class<T> theType) { - return () -> fetch(refAssetInstanceArtifact(theAssetType, theAssetId, theInstance, theArtifactId), theType); - } - - public ArtifactUploadAction createResourceArtifact(UUID theAssetId) { - return createAssetArtifact(AssetType.resource, theAssetId); - } - - public ArtifactUploadAction createServiceArtifact(UUID theAssetId) { - return createAssetArtifact(AssetType.service, theAssetId); - } - - public ArtifactUploadAction createResourceInstanceArtifact(UUID theAssetId, String theInstance) { - return createAssetInstanceArtifact(AssetType.resource, theAssetId, theInstance); - } - - public ArtifactUploadAction createServiceInstanceArtifact(UUID theAssetId, String theInstance) { - return createAssetInstanceArtifact(AssetType.service, theAssetId, theInstance); - } - - public ArtifactUploadAction createAssetArtifact(AssetType theAssetType, UUID theAssetId) { - return new ArtifactUploadAction() - .ofAsset(theAssetType, theAssetId); - } - - public ArtifactUploadAction createAssetInstanceArtifact(AssetType theAssetType, UUID theAssetId, String theInstance) { - return new ArtifactUploadAction() - .ofAssetInstance(theAssetType, theAssetId, theInstance); - } - - public ArtifactUpdateAction updateResourceArtifact(UUID theAssetId, JSONObject theArtifactInfo) { - return updateAssetArtifact(AssetType.resource, theAssetId, theArtifactInfo); - } - - public ArtifactUpdateAction updateResourceInstanceArtifact(UUID theAssetId, String theInstance, JSONObject theArtifactInfo) { - return updateAssetInstanceArtifact(AssetType.resource, theAssetId, theInstance, theArtifactInfo); - } - - public ArtifactUpdateAction updateServiceArtifact(UUID theAssetId, JSONObject theArtifactInfo) { - return updateAssetArtifact(AssetType.service, theAssetId, theArtifactInfo); - } - - public ArtifactUpdateAction updateServiceInstanceArtifact(UUID theAssetId, String theInstance, JSONObject theArtifactInfo) { - return updateAssetInstanceArtifact(AssetType.service, theAssetId, theInstance, theArtifactInfo); - } - - public ArtifactUpdateAction updateAssetArtifact(AssetType theAssetType, UUID theAssetId, JSONObject theArtifactInfo) { - return new ArtifactUpdateAction(theArtifactInfo) - .ofAsset(theAssetType, theAssetId); - } - - public ArtifactUpdateAction updateAssetInstanceArtifact(AssetType theAssetType, UUID theAssetId, String theInstance, JSONObject theArtifactInfo) { - return new ArtifactUpdateAction(theArtifactInfo) - .ofAssetInstance(theAssetType, theAssetId, theInstance); - } - - public ArtifactDeleteAction deleteResourceArtifact(UUID theAssetId, UUID theArtifactId) { - return deleteAssetArtifact(AssetType.resource, theAssetId, theArtifactId); - } - - public ArtifactDeleteAction deleteResourceInstanceArtifact(UUID theAssetId, String theInstance, UUID theArtifactId) { - return deleteAssetInstanceArtifact(AssetType.resource, theAssetId, theInstance, theArtifactId); - } - - public ArtifactDeleteAction deleteServiceArtifact(UUID theAssetId, UUID theArtifactId) { - return deleteAssetArtifact(AssetType.service, theAssetId, theArtifactId); - } - - public ArtifactDeleteAction deleteServiceInstanceArtifact(UUID theAssetId, String theInstance, UUID theArtifactId) { - return deleteAssetInstanceArtifact(AssetType.service, theAssetId, theInstance, theArtifactId); - } - - public ArtifactDeleteAction deleteAssetArtifact(AssetType theAssetType, UUID theAssetId, UUID theArtifactId) { - return new ArtifactDeleteAction(theArtifactId) - .ofAsset(theAssetType, theAssetId); - } - - public ArtifactDeleteAction deleteAssetInstanceArtifact(AssetType theAssetType, UUID theAssetId, String theInstance, UUID theArtifactId) { - return new ArtifactDeleteAction(theArtifactId) - .ofAssetInstance(theAssetType, theAssetId, theInstance); - } - - - public abstract class ASDCAction<A extends ASDCAction<A, T>, T> implements Action<T> { - - protected JSONObject info; //info passed to asdc as request body - protected String operatorId; //id of the SDC user performing the action - - protected ASDCAction(JSONObject theInfo) { - this.info = theInfo; - } - - protected abstract A self(); - - protected ASDC asdc() { - return ASDC.this; - } - - protected A withInfo(JSONObject theInfo) { - merge(this.info, theInfo); - return self(); - } - - public A with(String theProperty, Object theValue) { - info.put(theProperty, theValue); - return self(); - } - - public A withOperator(String theOperator) { - this.operatorId = theOperator; - return self(); - } - - protected abstract String[] mandatoryInfoEntries(); - - protected void checkOperatorId() { - if (this.operatorId == null) { - throw new IllegalStateException("No operator id was provided"); - } - } - - protected void checkMandatoryInfo() { - for (String field: mandatoryInfoEntries()) { - if (!info.has(field)) { - throw new IllegalStateException("No '" + field + "' was provided"); - } - } - } - - protected void checkMandatory() { - checkOperatorId(); - checkMandatoryInfo(); - } - } - - - /** - * We use teh same API to operate on artifacts attached to assets or to their instances - */ - public abstract class ASDCArtifactAction<A extends ASDCArtifactAction<A>> extends ASDCAction<A, JSONObject> { - - protected AssetType assetType; - protected UUID assetId; - protected String assetInstance; - - protected ASDCArtifactAction(JSONObject theInfo) { - super(theInfo); - } - - protected A ofAsset(AssetType theAssetType, UUID theAssetId) { - this.assetType = theAssetType; - this.assetId = theAssetId; - return self(); - } - - protected A ofAssetInstance(AssetType theAssetType, UUID theAssetId, String theInstance) { - this.assetType = theAssetType; - this.assetId = theAssetId; - this.assetInstance = theInstance; - return self(); - } - - protected String normalizeInstanceName(String theName) { - return StringUtils.removePattern(theName, "[ \\.\\-]+").toLowerCase(); - } - - protected String[] mandatoryInfoEntries() { - return ASDC.this.artifactMandatoryEntries; - } - - protected String ref(UUID theArtifactId) { - return (this.assetInstance == null) ? - refAssetArtifact(this.assetType, this.assetId, theArtifactId) : - refAssetInstanceArtifact(this.assetType, this.assetId, normalizeInstanceName(this.assetInstance), theArtifactId); - } - } - - public class ArtifactUploadAction extends ASDCArtifactAction<ArtifactUploadAction> { - - public static final String PAYLOAD_DATA = ASDC.PAYLOAD_DATA; - - protected ArtifactUploadAction() { - super(new JSONObject()); - } - - protected ArtifactUploadAction self() { - return this; - } - - public ArtifactUploadAction withContent(byte[] theContent) { - return with(PAYLOAD_DATA, Base64Utils.encodeToString(theContent)); - } - - public ArtifactUploadAction withContent(File theFile) throws IOException { - return withContent(FileUtils.readFileToByteArray(theFile)); - } - - public ArtifactUploadAction withLabel(String theLabel) { - return with(ARTIFACT_LABEL, theLabel); - } - - public ArtifactUploadAction withName(String theName) { - return with(ARTIFACT_NAME, theName); - } - - public ArtifactUploadAction withDisplayName(String theName) { - return with("artifactDisplayName", theName); - } - - public ArtifactUploadAction withType(ArtifactType theType) { - return with(ARTIFACT_TYPE, theType.toString()); - } - - public ArtifactUploadAction withGroupType(ArtifactGroupType theGroupType) { - return with(ARTIFACT_GROUP_TYPE, theGroupType.toString()); - } - - public ArtifactUploadAction withDescription(String theDescription) { - return with(DESCRIPTION, theDescription); - } - - @Override - protected String[] mandatoryInfoEntries() { - return ASDC.this.uploadMandatoryEntries; - } - - public Future<JSONObject> execute() { - checkMandatory(); - return ASDC.this.post(ref(null), - headers -> prepareHeaders(headers).header(USER_ID, this.operatorId), this.info); - } - } - - - - /** - * In its current form the update relies on a previous artifact retrieval. One cannot build an update from scratch. - * The label, tye and group type must be submitted but cannot be updated - */ - public class ArtifactUpdateAction extends ASDCArtifactAction<ArtifactUpdateAction> { - - - protected ArtifactUpdateAction(JSONObject theInfo) { - super(theInfo); - } - - protected ArtifactUpdateAction self() { - return this; - } - - public ArtifactUpdateAction withContent(byte[] theContent) { - return with(PAYLOAD_DATA, Base64Utils.encodeToString(theContent)); - } - - public ArtifactUpdateAction withContent(File theFile) throws IOException { - return withContent(FileUtils.readFileToByteArray(theFile)); - } - - public ArtifactUpdateAction withDescription(String theDescription) { - return with(DESCRIPTION, theDescription); - } - - public ArtifactUpdateAction withName(String theName) { - return with(ARTIFACT_NAME, theName); - } - - @Override - protected String[] mandatoryInfoEntries() { - return ASDC.this.updateMandatoryEntries; - } - - /* The json object originates (normally) from a get so it will have entries we need to cleanup */ - protected void cleanupInfoEntries() { - this.info.remove("artifactChecksum"); - this.info.remove("artifactUUID"); - this.info.remove("artifactVersion"); - this.info.remove("artifactURL"); - this.info.remove("artifactDescription"); - } - - public Future<JSONObject> execute() { - UUID artifactUUID = UUID.fromString(this.info.getString("artifactUUID")); - checkMandatory(); - cleanupInfoEntries(); - return ASDC.this.post(ref(artifactUUID), - headers -> prepareHeaders(headers).header(USER_ID, this.operatorId),this.info); - } - } - - public class ArtifactDeleteAction extends ASDCArtifactAction<ArtifactDeleteAction> { - - private UUID artifactId; - - protected ArtifactDeleteAction(UUID theArtifactId) { - super(null); - this.artifactId = theArtifactId; - } - - protected ArtifactDeleteAction self() { - return this; - } - - public Future<JSONObject> execute() { - checkMandatory(); - return ASDC.this.delete(ref(this.artifactId), - headers -> prepareHeaders(headers).header(USER_ID, this.operatorId)); - } - } - - - - - private VFCMTCreateAction createVFCMT() { - return new VFCMTCreateAction(); - } - - - - - public class VFCMTCreateAction extends ASDCAction<VFCMTCreateAction, JSONObject> { - - private static final String CONTACT_ID = "contactId"; - private final String[] vfcmtMandatoryEntries = new String[] { "name", "vendorName", "vendorRelease", CONTACT_ID}; - - protected VFCMTCreateAction() { - - super(new JSONObject()); - this - .with("resourceType", "VFCMT") - .with("category", "Template") - .with("subcategory", "Monitoring Template") - .with("icon", "defaulticon"); - } - - protected VFCMTCreateAction self() { - return this; - } - public VFCMTCreateAction withName(String theName) { - return with("name", theName); - } - - public VFCMTCreateAction withDescription(String theDescription) { - return with(DESCRIPTION, theDescription); - } - - public VFCMTCreateAction withVendorName(String theVendorName) { - return with("vendorName", theVendorName); - } - - public VFCMTCreateAction withVendorRelease(String theVendorRelease) { - return with("vendorRelease", theVendorRelease); - } - - public VFCMTCreateAction withTags(String... theTags) { - for (String tag: theTags) { - this.info.append("tags", tag); - } - return this; - } - - public VFCMTCreateAction withIcon(String theIcon) { - return with("icon", theIcon); - } - - protected String[] mandatoryInfoEntries() { - return vfcmtMandatoryEntries; - } - - public VFCMTCreateAction withContact(String theContact) { - return with(CONTACT_ID, theContact); - } - - public Future<JSONObject> execute() { - - this.info.putOnce(CONTACT_ID, this.operatorId); - this.info.append("tags", info.optString("name")); - checkMandatory(); - return ASDC.this.post(refAssets(AssetType.resource), - headers -> prepareHeaders(headers).header(USER_ID, this.operatorId), this.info); - } - - } public static JSONObject merge(JSONObject theOriginal, JSONObject thePatch) { for (String key: (Set<String>)thePatch.keySet()) { @@ -758,15 +211,6 @@ public class ASDC { return theOriginal; } - protected URI refUri(String theRef) { - try { - return new URI(this.rootUri + theRef); - } - catch(URISyntaxException urisx) { - throw new UncheckedIOException(new IOException(urisx)); - } - } - private HttpHeaders prepareHeaders() { HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.AUTHORIZATION, "Basic " + Base64Utils.encodeToString((this.user + ":" + this.passwd).getBytes())); @@ -778,38 +222,10 @@ public class ASDC { return headers; } - private RequestEntity.HeadersBuilder prepareHeaders(RequestEntity.HeadersBuilder theBuilder) { - return theBuilder - .header(HttpHeaders.AUTHORIZATION, "Basic " + Base64Utils.encodeToString((this.user + ":" + this.passwd).getBytes())) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_OCTET_STREAM_VALUE) - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE) - .header("X-ECOMP-InstanceID", this.instanceId); - } - public <T> Future<T> fetch(String theRef, Class<T> theContentType) { return exchange(theRef, HttpMethod.GET, new HttpEntity(prepareHeaders()), theContentType); } - public Future<JSONObject> post(String theRef, JSONObject thePost) { - return exchange(theRef, HttpMethod.POST, new HttpEntity<JSONObject>(thePost, prepareHeaders()), JSONObject.class); - } - - public Future<JSONObject> post(String theRef, UnaryOperator<RequestEntity.HeadersBuilder> theHeadersBuilder, JSONObject thePost) { - RequestEntity.BodyBuilder builder = RequestEntity.post(refUri(theRef)); - theHeadersBuilder.apply(builder); - - return exchange(theRef, HttpMethod.POST, builder.body(thePost), JSONObject.class); - } - - public Future<JSONObject> delete(String theRef, UnaryOperator<RequestEntity.HeadersBuilder> theHeadersBuilder) { - - RequestEntity.HeadersBuilder builder = RequestEntity.delete(refUri(theRef)); - theHeadersBuilder.apply(builder); - - return exchange(theRef, HttpMethod.DELETE, builder.build(), JSONObject.class); - } - public <T> Future<T> exchange(String theRef, HttpMethod theMethod, HttpEntity theRequest, Class<T> theResponseType) { AsyncRestTemplate restTemplate = new AsyncRestTemplate(); @@ -838,8 +254,6 @@ public class ASDC { return result; } - - public class ASDCFuture<T> extends Futures.BasicFuture<T> { ListenableFutureCallback<ResponseEntity<T>> callback = new ListenableFutureCallback<ResponseEntity<T>>() { @@ -857,7 +271,6 @@ public class ASDC { } } }; - } public class ContentMD5Interceptor implements AsyncClientHttpRequestInterceptor { @@ -872,171 +285,4 @@ public class ASDC { return theExecution.executeAsync(theRequest, theBody); } } - - public static void main(String[] theArgs) throws Exception { - - CommandLineParser parser = new BasicParser(); - - String userId = "jh0003"; - - Options options = new Options(); - options.addOption(OptionBuilder - .withArgName(TARGET) - .withLongOpt(TARGET) - .withDescription("target asdc system") - .hasArg() - .isRequired() - .create('t') ); - - options.addOption(OptionBuilder - .withArgName(ACTION) - .withLongOpt(ACTION) - .withDescription("one of: list, get, getartifact, checkin, checkout") - .hasArg() - .isRequired() - .create('a') ); - - options.addOption(OptionBuilder - .withArgName(ASSET_TYPE) - .withLongOpt(ASSET_TYPE) - .withDescription("one of resource, service, product") - .hasArg() - .isRequired() - .create('k') ); //k for 'kind' .. - - options.addOption(OptionBuilder - .withArgName(ASSET_ID) - .withLongOpt(ASSET_ID) - .withDescription("asset uuid") - .hasArg() - .create('u') ); //u for 'uuid' - - options.addOption(OptionBuilder - .withArgName(ARTIFACT_ID) - .withLongOpt(ARTIFACT_ID) - .withDescription("artifact uuid") - .hasArg() - .create('s') ); //s for 'stuff' - - options.addOption(OptionBuilder - .withArgName(LIST_FILTER) - .withLongOpt(LIST_FILTER) - .withDescription("filter for list operations") - .hasArg() - .create('f') ); //u for 'uuid' - - CommandLine line = null; - try { - line = parser.parse(options, theArgs); - } - catch(ParseException exp) { - errLogger.log(LogLevel.ERROR, ASDC.class.getName(), exp.getMessage()); - new HelpFormatter().printHelp("asdc", options); - return; - } - - ASDC asdc = new ASDC(); - asdc.setUri(new URI(line.getOptionValue(TARGET))); - - String action = line.getOptionValue(ACTION); - if ("list".equals(action)) { - JSONObject filterInfo = new JSONObject( - line.hasOption(LIST_FILTER) ? - line.getOptionValue(LIST_FILTER) : "{}"); - JSONArray assets = - asdc.getAssets(ASDC.AssetType.valueOf(line.getOptionValue(ASSET_TYPE)), JSONArray.class, - filterInfo.optString("category", null), filterInfo.optString("subCategory", null)) - .waitForResult(); - for (int i = 0; i < assets.length(); i++) { - debugLogger.log(LogLevel.DEBUG, ASDC.class.getName(),"> {}", assets.getJSONObject(i).toString(2)); - } - } - else if ("get".equals(action)) { - debugLogger.log(LogLevel.DEBUG, ASDC.class.getName(), - asdc.getAsset(ASDC.AssetType.valueOf(line.getOptionValue(ASSET_TYPE)), - UUID.fromString(line.getOptionValue(ASSET_ID)), - JSONObject.class) - .waitForResult() - .toString(2) - ); - } - else if ("getartifact".equals(action)) { - debugLogger.log(LogLevel.DEBUG, ASDC.class.getName(), - asdc.getAssetArtifact(ASDC.AssetType.valueOf(line.getOptionValue(ASSET_TYPE)), - UUID.fromString(line.getOptionValue(ASSET_ID)), - UUID.fromString(line.getOptionValue(ARTIFACT_ID)), - String.class) - .waitForResult() - ); - } - else if ("checkin".equals(action)) { - debugLogger.log(LogLevel.DEBUG, ASDC.class.getName(), - asdc.cycleAsset(ASDC.AssetType.valueOf(line.getOptionValue(ASSET_TYPE)), - UUID.fromString(line.getOptionValue(ASSET_ID)), - ASDC.LifecycleState.Checkin, - userId, - "cli op") - .waitForResult() - .toString() - ); - } - else if ("checkout".equals(action)) { - debugLogger.log(LogLevel.DEBUG, ASDC.class.getName(), - asdc.cycleAsset(ASDC.AssetType.valueOf(line.getOptionValue(ASSET_TYPE)), - UUID.fromString(line.getOptionValue(ASSET_ID)), - ASDC.LifecycleState.Checkout, - userId, - "cli op") - .waitForResult() - .toString() - ); - } - else if ("cleanup".equals(action)) { - JSONArray resources = asdc.getResources() - .waitForResult(); - debugLogger.log(LogLevel.DEBUG, ASDC.class.getName(),"Got {} resources", resources.length()); - - vfcmtCleanup(userId, asdc, resources); - } - else { - try { - debugLogger.log(LogLevel.DEBUG, ASDC.class.getName(), - asdc.createVFCMT() - .withName("Clonator") - .withDescription("Clone operation target 06192017") - .withVendorName("CloneInc") - .withVendorRelease("1.0") - .withTags("clone") - .withOperator(userId) - .execute() - .waitForResult() - .toString() - ); - } - catch(Exception x) { - debugLogger.log(LogLevel.DEBUG, ASDC.class.getName(),"Failed to create VFCMT: {}", x); - } - } - } - - private static void vfcmtCleanup(String userId, ASDC asdc, JSONArray resources) { - for (int i = 0; i < resources.length(); i++) { - - JSONObject resource = resources.getJSONObject(i); - - if ("VFCMT".equals(resource.getString("resourceType")) && - resource.getString("name").contains("test")) { - - debugLogger.log(LogLevel.DEBUG, ASDC.class.getName(),"undocheckout for {}", resource.getString("uuid")); - - try { - asdc.cycleAsset(AssetType.resource, UUID.fromString(resource.getString("uuid")), LifecycleState.undocheckout, userId, null) - .waitForResult(); - } - catch (Exception x) { - debugLogger.log(LogLevel.DEBUG, ASDC.class.getName(),"** {}", x); - } - } - } - } } |