summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/onap/aai/modelloader/ModelLoaderApplication.java (renamed from src/main/java/org/onap/aai/modelloader/service/ModelLoaderApplication.java)4
-rw-r--r--src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java69
-rw-r--r--src/main/java/org/onap/aai/modelloader/entity/Artifact.java2
-rw-r--r--src/main/java/org/onap/aai/modelloader/entity/catalog/VnfCatalogArtifact.java5
-rw-r--r--src/main/java/org/onap/aai/modelloader/entity/model/BabelArtifactParsingException.java11
-rw-r--r--src/main/java/org/onap/aai/modelloader/entity/model/ModelArtifact.java4
-rw-r--r--src/main/java/org/onap/aai/modelloader/entity/model/ModelArtifactParser.java4
-rw-r--r--src/main/java/org/onap/aai/modelloader/entity/model/NamedQueryArtifact.java8
-rw-r--r--src/main/java/org/onap/aai/modelloader/notification/ArtifactDownloadManager.java5
-rw-r--r--src/main/java/org/onap/aai/modelloader/notification/CompDoneStatusMessageBuilder.java2
-rw-r--r--src/main/java/org/onap/aai/modelloader/notification/DistributionStatusMessageBuilder.java2
-rw-r--r--src/main/java/org/onap/aai/modelloader/notification/EventCallback.java41
-rw-r--r--src/main/java/org/onap/aai/modelloader/notification/NotificationDataImpl.java (renamed from src/main/java/org/onap/aai/modelloader/service/NotificationDataImpl.java)4
-rw-r--r--src/main/java/org/onap/aai/modelloader/notification/NotificationPublisher.java54
-rw-r--r--src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java6
-rw-r--r--src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClient.java163
-rw-r--r--src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClientException.java37
-rw-r--r--src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java230
-rw-r--r--src/main/java/org/onap/aai/modelloader/service/ArtifactDeploymentManager.java (renamed from src/main/java/org/onap/aai/modelloader/notification/ArtifactDeploymentManager.java)41
-rw-r--r--src/main/java/org/onap/aai/modelloader/service/BabelServiceClientFactory.java (renamed from src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClientFactory.java)22
-rw-r--r--src/main/java/org/onap/aai/modelloader/service/HttpsBabelServiceClientFactory.java56
-rw-r--r--src/main/java/org/onap/aai/modelloader/service/ModelLoaderInterface.java8
-rw-r--r--src/main/java/org/onap/aai/modelloader/service/ModelLoaderService.java118
-rw-r--r--src/main/java/org/onap/aai/modelloader/service/SdcConnectionJob.java40
-rw-r--r--src/main/java/org/onap/aai/modelloader/util/JsonXmlConverter.java151
25 files changed, 640 insertions, 447 deletions
diff --git a/src/main/java/org/onap/aai/modelloader/service/ModelLoaderApplication.java b/src/main/java/org/onap/aai/modelloader/ModelLoaderApplication.java
index c0eb5f2..66c44a3 100644
--- a/src/main/java/org/onap/aai/modelloader/service/ModelLoaderApplication.java
+++ b/src/main/java/org/onap/aai/modelloader/ModelLoaderApplication.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.aai.modelloader.service;
+package org.onap.aai.modelloader;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java b/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java
index 3f03bb5..0a2bc85 100644
--- a/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java
+++ b/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -43,30 +43,33 @@ public class ModelLoaderConfig implements IConfiguration {
private static final String SUFFIX_KEYSTORE_FILE = "KEYSTORE_FILE";
private static final String SUFFIX_KEYSTORE_PASS = "KEYSTORE_PASSWORD";
+ private static final String SUFFIX_TRUSTSTORE_FILE = "TRUSTSTORE_FILE";
+ private static final String SUFFIX_TRUSTSTORE_PASS = "TRUSTSTORE_PASSWORD";
+
// Configuration file properties
- protected static final String PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH =
- PREFIX_DISTRIBUTION_CLIENT + "ACTIVE_SERVER_TLS_AUTH";
- protected static final String PROP_ML_DISTRIBUTION_ASDC_CONNECTION_DISABLED =
- PREFIX_DISTRIBUTION_CLIENT + "ASDC_CONNECTION_DISABLE";
+ protected static final String PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH = PREFIX_DISTRIBUTION_CLIENT
+ + "ACTIVE_SERVER_TLS_AUTH";
+ protected static final String PROP_ML_DISTRIBUTION_ASDC_CONNECTION_DISABLED = PREFIX_DISTRIBUTION_CLIENT
+ + "ASDC_CONNECTION_DISABLE";
protected static final String PROP_ML_DISTRIBUTION_ASDC_ADDRESS = PREFIX_DISTRIBUTION_CLIENT + "ASDC_ADDRESS";
protected static final String PROP_ML_DISTRIBUTION_CONSUMER_GROUP = PREFIX_DISTRIBUTION_CLIENT + "CONSUMER_GROUP";
protected static final String PROP_ML_DISTRIBUTION_CONSUMER_ID = PREFIX_DISTRIBUTION_CLIENT + "CONSUMER_ID";
- protected static final String PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME =
- PREFIX_DISTRIBUTION_CLIENT + "ENVIRONMENT_NAME";
- protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD =
- PREFIX_DISTRIBUTION_CLIENT + SUFFIX_KEYSTORE_PASS;
- protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_FILE =
- PREFIX_DISTRIBUTION_CLIENT + SUFFIX_KEYSTORE_FILE;
+ protected static final String PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME = PREFIX_DISTRIBUTION_CLIENT
+ + "ENVIRONMENT_NAME";
+ protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD = PREFIX_DISTRIBUTION_CLIENT
+ + SUFFIX_KEYSTORE_PASS;
+ protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_FILE = PREFIX_DISTRIBUTION_CLIENT
+ + SUFFIX_KEYSTORE_FILE;
protected static final String PROP_ML_DISTRIBUTION_PASSWORD = PREFIX_DISTRIBUTION_CLIENT + "PASSWORD";
- protected static final String PROP_ML_DISTRIBUTION_POLLING_INTERVAL =
- PREFIX_DISTRIBUTION_CLIENT + "POLLING_INTERVAL";
+ protected static final String PROP_ML_DISTRIBUTION_POLLING_INTERVAL = PREFIX_DISTRIBUTION_CLIENT
+ + "POLLING_INTERVAL";
protected static final String PROP_ML_DISTRIBUTION_POLLING_TIMEOUT = PREFIX_DISTRIBUTION_CLIENT + "POLLING_TIMEOUT";
protected static final String PROP_ML_DISTRIBUTION_USER = PREFIX_DISTRIBUTION_CLIENT + "USER";
protected static final String PROP_ML_DISTRIBUTION_ARTIFACT_TYPES = PREFIX_DISTRIBUTION_CLIENT + "ARTIFACT_TYPES";
- protected static final String PROP_ML_DISTRIBUTION_MSG_BUS_ADDRESSES =
- PREFIX_DISTRIBUTION_CLIENT + "MSG_BUS_ADDRESSES";
- protected static final String PROP_ML_DISTRIBUTION_HTTPS_WITH_DMAAP =
- PREFIX_DISTRIBUTION_CLIENT + "USE_HTTPS_WITH_DMAAP";
+ protected static final String PROP_ML_DISTRIBUTION_MSG_BUS_ADDRESSES = PREFIX_DISTRIBUTION_CLIENT
+ + "MSG_BUS_ADDRESSES";
+ protected static final String PROP_ML_DISTRIBUTION_HTTPS_WITH_DMAAP = PREFIX_DISTRIBUTION_CLIENT
+ + "USE_HTTPS_WITH_DMAAP";
protected static final String PROP_AAI_BASE_URL = PREFIX_AAI + "BASE_URL";
protected static final String PROP_AAI_KEYSTORE_FILE = PREFIX_AAI + SUFFIX_KEYSTORE_FILE;
@@ -80,6 +83,8 @@ public class ModelLoaderConfig implements IConfiguration {
protected static final String PROP_BABEL_BASE_URL = PREFIX_BABEL + "BASE_URL";
protected static final String PROP_BABEL_KEYSTORE_FILE = PREFIX_BABEL + SUFFIX_KEYSTORE_FILE;
protected static final String PROP_BABEL_KEYSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_KEYSTORE_PASS;
+ protected static final String PROP_BABEL_TRUSTSTORE_FILE = PREFIX_BABEL + SUFFIX_TRUSTSTORE_FILE;
+ protected static final String PROP_BABEL_TRUSTSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_TRUSTSTORE_PASS;
protected static final String PROP_BABEL_GENERATE_RESOURCE_URL = PREFIX_BABEL + "GENERATE_ARTIFACTS_URL";
protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR";
@@ -95,8 +100,8 @@ public class ModelLoaderConfig implements IConfiguration {
private String modelVersion = null;
- protected static final String FILESEP =
- (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator");
+ protected static final String FILESEP = (System.getProperty("file.separator") == null) ? "/"
+ : System.getProperty("file.separator");
public static void setConfigHome(String configHome) {
ModelLoaderConfig.configHome = configHome;
@@ -113,8 +118,10 @@ public class ModelLoaderConfig implements IConfiguration {
/**
* Original constructor
*
- * @param modelLoaderProperties properties needed to be configured for the model loader
- * @param certLocation location of the certificate
+ * @param modelLoaderProperties
+ * properties needed to be configured for the model loader
+ * @param certLocation
+ * location of the certificate
*/
public ModelLoaderConfig(Properties modelLoaderProperties, String certLocation) {
this.modelLoaderProperties = modelLoaderProperties;
@@ -139,11 +146,10 @@ public class ModelLoaderConfig implements IConfiguration {
}
}
-
@Override
public boolean activateServerTLSAuth() {
String value = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH);
- return value == null ? false : Boolean.parseBoolean(value);
+ return value != null && Boolean.parseBoolean(value);
}
@Override
@@ -209,7 +215,7 @@ public class ModelLoaderConfig implements IConfiguration {
@Override
public Boolean isUseHttpsWithDmaap() {
String useHTTPS = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_HTTPS_WITH_DMAAP);
- return useHTTPS == null ? false : Boolean.valueOf(useHTTPS);
+ return useHTTPS != null && Boolean.valueOf(useHTTPS);
}
@Override
@@ -227,7 +233,7 @@ public class ModelLoaderConfig implements IConfiguration {
return null;
} else {
return certLocation + File.separator + filename;
- }
+ }
}
public String getAaiKeyStorePassword() {
@@ -238,6 +244,19 @@ public class ModelLoaderConfig implements IConfiguration {
return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_BABEL_KEYSTORE_PASSWORD));
}
+ public String getBabelTrustStorePath() {
+ String filename = modelLoaderProperties.getProperty(PROP_BABEL_TRUSTSTORE_FILE);
+ if (filename == null) {
+ return null;
+ } else {
+ return certLocation + File.separator + filename;
+ }
+ }
+
+ public String getBabelTrustStorePassword() {
+ return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_BABEL_TRUSTSTORE_PASSWORD));
+ }
+
public String getAaiBaseUrl() {
return modelLoaderProperties.getProperty(PROP_AAI_BASE_URL);
}
diff --git a/src/main/java/org/onap/aai/modelloader/entity/Artifact.java b/src/main/java/org/onap/aai/modelloader/entity/Artifact.java
index f576e24..f87535f 100644
--- a/src/main/java/org/onap/aai/modelloader/entity/Artifact.java
+++ b/src/main/java/org/onap/aai/modelloader/entity/Artifact.java
@@ -20,7 +20,7 @@
*/
package org.onap.aai.modelloader.entity;
-public abstract class Artifact {
+public class Artifact {
private String payload;
private ArtifactType type;
diff --git a/src/main/java/org/onap/aai/modelloader/entity/catalog/VnfCatalogArtifact.java b/src/main/java/org/onap/aai/modelloader/entity/catalog/VnfCatalogArtifact.java
index a8f4e60..9a84cf2 100644
--- a/src/main/java/org/onap/aai/modelloader/entity/catalog/VnfCatalogArtifact.java
+++ b/src/main/java/org/onap/aai/modelloader/entity/catalog/VnfCatalogArtifact.java
@@ -26,7 +26,10 @@ import org.onap.aai.modelloader.entity.ArtifactType;
public class VnfCatalogArtifact extends Artifact {
public VnfCatalogArtifact(String payload) {
- super(ArtifactType.VNF_CATALOG);
+ this(ArtifactType.VNF_CATALOG, payload);
+ }
+ public VnfCatalogArtifact(ArtifactType artifactType, String payload) {
+ super(artifactType);
setPayload(payload);
}
}
diff --git a/src/main/java/org/onap/aai/modelloader/entity/model/BabelArtifactParsingException.java b/src/main/java/org/onap/aai/modelloader/entity/model/BabelArtifactParsingException.java
index a3f14ba..dfb649c 100644
--- a/src/main/java/org/onap/aai/modelloader/entity/model/BabelArtifactParsingException.java
+++ b/src/main/java/org/onap/aai/modelloader/entity/model/BabelArtifactParsingException.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -36,13 +36,4 @@ public class BabelArtifactParsingException extends Exception {
super(message);
}
- /**
- * Constructor for an instance of this exception with a message and actual exception encountered.
- *
- * @param message information about the exception
- * @param cause the actual exception that was encountered
- */
- public BabelArtifactParsingException(String message, Throwable cause) {
- super(message, cause);
- }
}
diff --git a/src/main/java/org/onap/aai/modelloader/entity/model/ModelArtifact.java b/src/main/java/org/onap/aai/modelloader/entity/model/ModelArtifact.java
index 154cda1..705ceb5 100644
--- a/src/main/java/org/onap/aai/modelloader/entity/model/ModelArtifact.java
+++ b/src/main/java/org/onap/aai/modelloader/entity/model/ModelArtifact.java
@@ -209,7 +209,7 @@ public class ModelArtifact extends AbstractModelArtifact {
String subURL = config.getAaiModelUrl(getModelNamespaceVersion()).trim();
String instance = getModelInvariantId();
- if ((!baseURL.endsWith("/")) && (!subURL.startsWith("/"))) {
+ if (!baseURL.endsWith("/") && !subURL.startsWith("/")) {
baseURL = baseURL + "/";
}
@@ -230,7 +230,7 @@ public class ModelArtifact extends AbstractModelArtifact {
+ AAI_MODEL_VER_SUB_URL;
String instance = getModelVerId();
- if ((!baseURL.endsWith("/")) && (!subURL.startsWith("/"))) {
+ if (!baseURL.endsWith("/") && !subURL.startsWith("/")) {
baseURL = baseURL + "/";
}
diff --git a/src/main/java/org/onap/aai/modelloader/entity/model/ModelArtifactParser.java b/src/main/java/org/onap/aai/modelloader/entity/model/ModelArtifactParser.java
index e687be0..adab6df 100644
--- a/src/main/java/org/onap/aai/modelloader/entity/model/ModelArtifactParser.java
+++ b/src/main/java/org/onap/aai/modelloader/entity/model/ModelArtifactParser.java
@@ -54,8 +54,8 @@ public class ModelArtifactParser extends AbstractModelArtifactParser {
} else {
if (node.getNodeName().equalsIgnoreCase(MODEL_VER)) {
((ModelArtifact) model).setModelVer(node);
- if ((((ModelArtifact) model).getModelNamespace() != null)
- && (!((ModelArtifact) model).getModelNamespace().isEmpty())) {
+ if (((ModelArtifact) model).getModelNamespace() != null
+ && !((ModelArtifact) model).getModelNamespace().isEmpty()) {
Element e = (Element) node;
e.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns",
((ModelArtifact) model).getModelNamespace());
diff --git a/src/main/java/org/onap/aai/modelloader/entity/model/NamedQueryArtifact.java b/src/main/java/org/onap/aai/modelloader/entity/model/NamedQueryArtifact.java
index 4df9879..a8fdc8e 100644
--- a/src/main/java/org/onap/aai/modelloader/entity/model/NamedQueryArtifact.java
+++ b/src/main/java/org/onap/aai/modelloader/entity/model/NamedQueryArtifact.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -60,11 +60,11 @@ public class NamedQueryArtifact extends AbstractModelArtifact {
List<Artifact> completedArtifacts) {
OperationResult getResponse =
aaiClient.getResource(getNamedQueryUrl(config), distId, MediaType.APPLICATION_XML_TYPE);
- if ((getResponse == null) || (getResponse.getResultCode() != Response.Status.OK.getStatusCode())) {
+ if (getResponse == null || getResponse.getResultCode() != Response.Status.OK.getStatusCode()) {
// Only attempt the PUT if the model doesn't already exist
OperationResult putResponse = aaiClient.putResource(getNamedQueryUrl(config), getPayload(), distId,
MediaType.APPLICATION_XML_TYPE);
- if ((putResponse != null) && (putResponse.getResultCode() == Response.Status.CREATED.getStatusCode())) {
+ if (putResponse != null && putResponse.getResultCode() == Response.Status.CREATED.getStatusCode()) {
completedArtifacts.add(this);
logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
getType().toString() + " " + getUniqueIdentifier() + " successfully ingested.");
@@ -92,7 +92,7 @@ public class NamedQueryArtifact extends AbstractModelArtifact {
String subURL = config.getAaiNamedQueryUrl(getModelNamespaceVersion()).trim();
String instance = this.getNamedQueryUuid();
- if ((!baseURL.endsWith("/")) && (!subURL.startsWith("/"))) {
+ if (!baseURL.endsWith("/") && !subURL.startsWith("/")) {
baseURL = baseURL + "/";
}
diff --git a/src/main/java/org/onap/aai/modelloader/notification/ArtifactDownloadManager.java b/src/main/java/org/onap/aai/modelloader/notification/ArtifactDownloadManager.java
index 9dbe397..febc99a 100644
--- a/src/main/java/org/onap/aai/modelloader/notification/ArtifactDownloadManager.java
+++ b/src/main/java/org/onap/aai/modelloader/notification/ArtifactDownloadManager.java
@@ -39,7 +39,8 @@ import org.onap.aai.modelloader.entity.model.IModelParser;
import org.onap.aai.modelloader.entity.model.NamedQueryArtifactParser;
import org.onap.aai.modelloader.extraction.InvalidArchiveException;
import org.onap.aai.modelloader.restclient.BabelServiceClient;
-import org.onap.aai.modelloader.restclient.BabelServiceClientFactory;
+import org.onap.aai.modelloader.restclient.BabelServiceClientException;
+import org.onap.aai.modelloader.service.BabelServiceClientFactory;
import org.onap.aai.modelloader.service.ModelLoaderMsgs;
import org.onap.sdc.api.IDistributionClient;
import org.onap.sdc.api.notification.IArtifactInfo;
@@ -202,7 +203,7 @@ public class ArtifactDownloadManager {
try {
logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Creating Babel client");
babelClient = clientFactory.create(config);
- } catch (Exception e) {
+ } catch (BabelServiceClientException e) {
logger.error(ModelLoaderMsgs.BABEL_REST_REQUEST_ERROR, e, "POST", config.getBabelBaseUrl(),
"Error posting artifact " + artifact.getArtifactName() + " " + serviceVersion + " to Babel: "
+ e.getLocalizedMessage());
diff --git a/src/main/java/org/onap/aai/modelloader/notification/CompDoneStatusMessageBuilder.java b/src/main/java/org/onap/aai/modelloader/notification/CompDoneStatusMessageBuilder.java
index c389945..f198fa8 100644
--- a/src/main/java/org/onap/aai/modelloader/notification/CompDoneStatusMessageBuilder.java
+++ b/src/main/java/org/onap/aai/modelloader/notification/CompDoneStatusMessageBuilder.java
@@ -28,7 +28,7 @@ import org.onap.sdc.utils.DistributionStatusEnum;
/**
* This class is responsible for building an instance of {@link DistributionStatusMsg}.
*/
-public class CompDoneStatusMessageBuilder {
+public final class CompDoneStatusMessageBuilder {
private CompDoneStatusMessageBuilder() {}
diff --git a/src/main/java/org/onap/aai/modelloader/notification/DistributionStatusMessageBuilder.java b/src/main/java/org/onap/aai/modelloader/notification/DistributionStatusMessageBuilder.java
index 91cd3de..d799da0 100644
--- a/src/main/java/org/onap/aai/modelloader/notification/DistributionStatusMessageBuilder.java
+++ b/src/main/java/org/onap/aai/modelloader/notification/DistributionStatusMessageBuilder.java
@@ -29,7 +29,7 @@ import org.onap.sdc.utils.DistributionStatusEnum;
/**
* This class is responsible for building an instance of {@link DistributionStatusMsg}.
*/
-public class DistributionStatusMessageBuilder {
+public final class DistributionStatusMessageBuilder {
private DistributionStatusMessageBuilder() {}
diff --git a/src/main/java/org/onap/aai/modelloader/notification/EventCallback.java b/src/main/java/org/onap/aai/modelloader/notification/EventCallback.java
index 2baa217..42f72ce 100644
--- a/src/main/java/org/onap/aai/modelloader/notification/EventCallback.java
+++ b/src/main/java/org/onap/aai/modelloader/notification/EventCallback.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -28,13 +28,15 @@ import org.onap.aai.cl.mdc.MdcContext;
import org.onap.aai.modelloader.config.ModelLoaderConfig;
import org.onap.aai.modelloader.entity.Artifact;
import org.onap.aai.modelloader.extraction.ArtifactInfoExtractor;
-import org.onap.aai.modelloader.restclient.BabelServiceClientFactory;
+import org.onap.aai.modelloader.service.ArtifactDeploymentManager;
+import org.onap.aai.modelloader.service.BabelServiceClientFactory;
import org.onap.aai.modelloader.service.ModelLoaderMsgs;
import org.onap.sdc.api.IDistributionClient;
import org.onap.sdc.api.consumer.INotificationCallback;
import org.onap.sdc.api.notification.IArtifactInfo;
import org.onap.sdc.api.notification.INotificationData;
import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
public class EventCallback implements INotificationCallback {
private static Logger logger = LoggerFactory.getInstance().getLogger(EventCallback.class.getName());
@@ -42,8 +44,11 @@ public class EventCallback implements INotificationCallback {
private ArtifactDeploymentManager artifactDeploymentManager;
private ArtifactDownloadManager artifactDownloadManager;
+ private NotificationPublisher notificationPublisher;
private IDistributionClient client;
private ModelLoaderConfig config;
+ @Autowired
+ private BabelServiceClientFactory babelServiceClientFactory;
public EventCallback(IDistributionClient client, ModelLoaderConfig config) {
this.client = client;
@@ -63,18 +68,35 @@ public class EventCallback implements INotificationCallback {
getArtifactDownloadManager().downloadArtifacts(data, artifacts, modelArtifacts, catalogArtifacts);
if (success) {
- success = getArtifactDeploymentManager().deploy(data, artifacts, modelArtifacts, catalogArtifacts);
+ success = getArtifactDeploymentManager().deploy(data, modelArtifacts, catalogArtifacts);
}
String statusString = success ? "SUCCESS" : "FAILURE";
auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
"Processed distribution " + data.getDistributionID() + " (" + statusString + ")");
+
+ publishNotifications(data, "TOSCA_CSAR", artifacts, success);
+
MDC.clear();
}
+
+ private void publishNotifications(INotificationData data, String filterType, List<IArtifactInfo> artifacts,
+ boolean deploymentSuccess) {
+ if (deploymentSuccess) {
+ artifacts.stream().filter(a -> filterType.equalsIgnoreCase(a.getArtifactType()))
+ .forEach(a -> getNotificationPublisher().publishDeploySuccess(client, data, a));
+ getNotificationPublisher().publishComponentSuccess(client, data);
+ } else {
+ artifacts.stream().filter(a -> filterType.equalsIgnoreCase(a.getArtifactType()))
+ .forEach(a -> getNotificationPublisher().publishDeployFailure(client, data, a));
+ getNotificationPublisher().publishComponentFailure(client, data, "deploy failure");
+ }
+ }
+
private ArtifactDeploymentManager getArtifactDeploymentManager() {
if (artifactDeploymentManager == null) {
- artifactDeploymentManager = new ArtifactDeploymentManager(client, config);
+ artifactDeploymentManager = new ArtifactDeploymentManager(config);
}
return artifactDeploymentManager;
@@ -82,9 +104,18 @@ public class EventCallback implements INotificationCallback {
private ArtifactDownloadManager getArtifactDownloadManager() {
if (artifactDownloadManager == null) {
- artifactDownloadManager = new ArtifactDownloadManager(client, config, new BabelServiceClientFactory());
+ artifactDownloadManager = new ArtifactDownloadManager(client, config, babelServiceClientFactory);
}
return artifactDownloadManager;
}
+
+
+ private NotificationPublisher getNotificationPublisher() {
+ if (notificationPublisher == null) {
+ notificationPublisher = new NotificationPublisher();
+ }
+
+ return notificationPublisher;
+ }
}
diff --git a/src/main/java/org/onap/aai/modelloader/service/NotificationDataImpl.java b/src/main/java/org/onap/aai/modelloader/notification/NotificationDataImpl.java
index 536aa4a..566415e 100644
--- a/src/main/java/org/onap/aai/modelloader/service/NotificationDataImpl.java
+++ b/src/main/java/org/onap/aai/modelloader/notification/NotificationDataImpl.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.aai.modelloader.service;
+package org.onap.aai.modelloader.notification;
import java.util.Collections;
import java.util.List;
diff --git a/src/main/java/org/onap/aai/modelloader/notification/NotificationPublisher.java b/src/main/java/org/onap/aai/modelloader/notification/NotificationPublisher.java
index 967a290..626399e 100644
--- a/src/main/java/org/onap/aai/modelloader/notification/NotificationPublisher.java
+++ b/src/main/java/org/onap/aai/modelloader/notification/NotificationPublisher.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -20,8 +20,9 @@
*/
package org.onap.aai.modelloader.notification;
-import java.io.FileInputStream;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Properties;
@@ -41,7 +42,7 @@ import org.onap.sdc.utils.DistributionStatusEnum;
/**
* This class is responsible for publishing the status of actions performed working with artifacts.
*/
-class NotificationPublisher {
+public class NotificationPublisher {
private static Logger logger = LoggerFactory.getInstance().getLogger(NotificationPublisher.class);
private static Logger metricsLogger = LoggerFactory.getInstance().getMetricsLogger(NotificationPublisher.class);
@@ -51,7 +52,7 @@ class NotificationPublisher {
public NotificationPublisher() {
Properties configProperties = new Properties();
try {
- configProperties.load(new FileInputStream(ModelLoaderConfig.propertiesFile()));
+ configProperties.load(Files.newInputStream(Paths.get(ModelLoaderConfig.propertiesFile())));
} catch (IOException e) {
String errorMsg = "Failed to load configuration: " + e.getMessage();
logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, e, errorMsg);
@@ -141,28 +142,10 @@ class NotificationPublisher {
* @param data data about the notification that resulted in this message being created
* @param artifact the specific artifact to have its deployment status reported on
*/
- void publishDeployFailure(IDistributionClient client, INotificationData data, IArtifactInfo artifact) {
+ public void publishDeployFailure(IDistributionClient client, INotificationData data, IArtifactInfo artifact) {
publishDeployStatus(client, data, artifact, DistributionStatusEnum.DEPLOY_ERROR, "failure");
}
- private void publishDeployStatus(IDistributionClient client, INotificationData data, IArtifactInfo artifact,
- DistributionStatusEnum distributionStatusEnum, String result) {
- if (publishingEnabled) {
- MdcOverride override = initMDCStartTime();
-
- IDistributionClientResult sendStatus = client.sendDeploymentStatus(
- DistributionStatusMessageBuilder.build(client, data, artifact, distributionStatusEnum));
- metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy " + result,
- artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());
-
- if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
- logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
- "Failed to publish deploy " + result + " status: " + sendStatus.getDistributionMessageResult());
- }
- } else {
- logPublishingDisabled(distributionStatusEnum.toString(), result);
- }
- }
/**
* This method is responsible for publishing notification that the deployment of an artifact was succesful.
@@ -171,11 +154,11 @@ class NotificationPublisher {
* @param data data about the notification that resulted in this message being created
* @param artifact the specific artifact to have its deployment status reported on
*/
- void publishDeploySuccess(IDistributionClient client, INotificationData data, IArtifactInfo artifact) {
+ public void publishDeploySuccess(IDistributionClient client, INotificationData data, IArtifactInfo artifact) {
publishDeployStatus(client, data, artifact, DistributionStatusEnum.DEPLOY_OK, "success");
}
- void publishComponentSuccess(IDistributionClient client, INotificationData data) {
+ public void publishComponentSuccess(IDistributionClient client, INotificationData data) {
if (publishingEnabled) {
MdcOverride override = initMDCStartTime();
@@ -194,7 +177,7 @@ class NotificationPublisher {
}
}
- void publishComponentFailure(IDistributionClient client, INotificationData data, String errorReason) {
+ public void publishComponentFailure(IDistributionClient client, INotificationData data, String errorReason) {
if (publishingEnabled) {
MdcOverride override = initMDCStartTime();
@@ -214,6 +197,25 @@ class NotificationPublisher {
}
}
+ private void publishDeployStatus(IDistributionClient client, INotificationData data, IArtifactInfo artifact,
+ DistributionStatusEnum distributionStatusEnum, String result) {
+ if (publishingEnabled) {
+ MdcOverride override = initMDCStartTime();
+
+ IDistributionClientResult sendStatus = client.sendDeploymentStatus(
+ DistributionStatusMessageBuilder.build(client, data, artifact, distributionStatusEnum));
+ metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy " + result,
+ artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());
+
+ if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+ logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+ "Failed to publish deploy " + result + " status: " + sendStatus.getDistributionMessageResult());
+ }
+ } else {
+ logPublishingDisabled(distributionStatusEnum.toString(), result);
+ }
+ }
+
private void logPublishingDisabled(String statusType, String message) {
logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
"Notification publishing is disabled, skipping publishing of the following status: " + statusType
diff --git a/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java b/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java
index 5576ea9..27db741 100644
--- a/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java
+++ b/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -133,7 +133,7 @@ public class AaiRestClient {
public OperationResult getAndDeleteResource(String url, String transId) {
// First, GET the model
OperationResult getResponse = getResource(url, transId, MediaType.APPLICATION_XML_TYPE);
- if ((getResponse == null) || (getResponse.getResultCode() != Response.Status.OK.getStatusCode())) {
+ if (getResponse == null || getResponse.getResultCode() != Response.Status.OK.getStatusCode()) {
return getResponse;
}
@@ -151,7 +151,7 @@ public class AaiRestClient {
public boolean useBasicAuth() {
- return (config.getAaiAuthenticationUser() != null) && (config.getAaiAuthenticationPassword() != null);
+ return config.getAaiAuthenticationUser() != null && config.getAaiAuthenticationPassword() != null;
}
private RestClient setupClient() {
diff --git a/src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClient.java b/src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClient.java
index fa677a9..f69752b 100644
--- a/src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClient.java
+++ b/src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClient.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -18,168 +18,15 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
+
package org.onap.aai.modelloader.restclient;
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.google.json.JsonSanitizer;
-import com.sun.jersey.api.client.Client; // NOSONAR
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.security.KeyManagementException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import java.util.Base64;
-import java.util.Collections;
import java.util.List;
-import java.util.Objects;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import javax.ws.rs.core.Response;
-import org.json.JSONObject;
import org.onap.aai.babel.service.data.BabelArtifact;
-import org.onap.aai.cl.api.Logger;
-import org.onap.aai.cl.eelf.LoggerFactory;
-import org.onap.aai.modelloader.config.ModelLoaderConfig;
-import org.onap.aai.modelloader.service.ModelLoaderMsgs;
-
-/**
- * Initial version for testing End to End scenarios
- *
- */
-public class BabelServiceClient {
-
- private static Logger logger = LoggerFactory.getInstance().getLogger(BabelServiceClient.class);
-
- private static final String SSL_PROTOCOL = "TLS";
- private static final String KEYSTORE_ALGORITHM = "SunX509";
- private static final String KEYSTORE_TYPE = "PKCS12";
-
- private ModelLoaderConfig config;
- private Client client;
-
- private TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- return null; // NOSONAR
- }
-
- @Override
- public void checkClientTrusted(X509Certificate[] certs, String authType) {
- // Do nothing
- }
-
- @Override
- public void checkServerTrusted(X509Certificate[] certs, String authType) {
- // Do nothing
- }
- }};
-
- public class BabelServiceException extends Exception {
-
- /**
- * Babel Service error response
- */
- private static final long serialVersionUID = 1L;
-
- public BabelServiceException(String message) {
- super(message);
- }
-
- }
-
- /**
- * @param config
- * @throws NoSuchAlgorithmException
- * @throws KeyStoreException
- * @throws CertificateException
- * @throws IOException
- * @throws UnrecoverableKeyException
- * @throws KeyManagementException
- */
- public BabelServiceClient(ModelLoaderConfig config) throws NoSuchAlgorithmException, KeyStoreException,
- CertificateException, IOException, UnrecoverableKeyException, KeyManagementException {
- this.config = config;
-
- logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Creating Babel Service client");
-
- SSLContext ctx = SSLContext.getInstance(SSL_PROTOCOL);
- KeyManagerFactory kmf = KeyManagerFactory.getInstance(KEYSTORE_ALGORITHM);
- KeyStore ks = KeyStore.getInstance(KEYSTORE_TYPE);
-
- String clientCertPassword = config.getBabelKeyStorePassword();
-
- char[] pwd = null;
- if (clientCertPassword != null) {
- pwd = clientCertPassword.toCharArray();
- }
-
- String clientCertFileName = config.getBabelKeyStorePath();
- if (clientCertFileName != null) {
- FileInputStream fin = new FileInputStream(clientCertFileName);
- ks.load(fin, pwd);
- kmf.init(ks, pwd);
- ctx.init(kmf.getKeyManagers(), trustAllCerts, null);
- } else {
- ctx.init(null, trustAllCerts, null);
- }
-
- logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Initialised context");
-
- HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
- HttpsURLConnection.setDefaultHostnameVerifier((host, session) -> true);
-
- client = Client.create(new DefaultClientConfig());
-
- logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Jersey client created");
- }
-
- /**
- * @param artifactPayload
- * @param artifactName
- * @param artifactVersion
- * @param transactionId
- * @return
- * @throws BabelServiceException
- */
- public List<BabelArtifact> postArtifact(byte[] artifactPayload, String artifactName, String artifactVersion,
- String transactionId) throws BabelServiceException {
- Objects.requireNonNull(artifactPayload);
-
- String encodedPayload = Base64.getEncoder().encodeToString(artifactPayload);
-
- JSONObject obj = new JSONObject();
- obj.put("csar", encodedPayload);
- obj.put("artifactVersion", artifactVersion);
- obj.put("artifactName", artifactName);
-
- logger.info(ModelLoaderMsgs.BABEL_REST_REQUEST_PAYLOAD, " Artifact Name: " + artifactName
- + " Artifact version: " + artifactVersion + " Artifact payload: " + encodedPayload);
-
- WebResource webResource = client.resource(config.getBabelBaseUrl() + config.getBabelGenerateArtifactsUrl());
- ClientResponse response = webResource.type("application/json")
- .header(AaiRestClient.HEADER_TRANS_ID, Collections.singletonList(transactionId))
- .header(AaiRestClient.HEADER_FROM_APP_ID, Collections.singletonList(AaiRestClient.ML_APP_NAME))
- .post(ClientResponse.class, obj.toString());
- String sanitizedJson = JsonSanitizer.sanitize(response.getEntity(String.class));
- logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT,
- "Babel response " + response.getStatus() + " " + sanitizedJson);
+public interface BabelServiceClient {
- if (response.getStatus() != Response.Status.OK.getStatusCode()) {
- throw new BabelServiceException(sanitizedJson);
- }
+ List<BabelArtifact> postArtifact(byte[] artifactPayload, String artifactName, String artifactVersion,
+ String transactionId) throws BabelServiceClientException;
- return new Gson().fromJson(sanitizedJson, new TypeToken<List<BabelArtifact>>() {}.getType());
- }
}
diff --git a/src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClientException.java b/src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClientException.java
new file mode 100644
index 0000000..0ce8037
--- /dev/null
+++ b/src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClientException.java
@@ -0,0 +1,37 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2018 European Software Marketing Ltd.
+ * ================================================================================
+ * 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.aai.modelloader.restclient;
+
+public class BabelServiceClientException extends Exception {
+
+ /**
+ * Babel Service Client Exception.
+ */
+ private static final long serialVersionUID = 1L;
+
+ public BabelServiceClientException(String message) {
+ super(message);
+ }
+
+ public BabelServiceClientException(Exception ex) {
+ super(ex);
+ }
+}
diff --git a/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java b/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java
new file mode 100644
index 0000000..f07d0d3
--- /dev/null
+++ b/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java
@@ -0,0 +1,230 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2018 European Software Marketing Ltd.
+ * ================================================================================
+ * 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.aai.modelloader.restclient;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.google.json.JsonSanitizer;
+import com.sun.jersey.api.client.Client; // NOSONAR
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.Base64;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
+import javax.ws.rs.core.Response;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.onap.aai.babel.service.data.BabelArtifact;
+import org.onap.aai.cl.api.Logger;
+import org.onap.aai.cl.eelf.LoggerFactory;
+import org.onap.aai.modelloader.config.ModelLoaderConfig;
+import org.onap.aai.modelloader.service.ModelLoaderMsgs;
+
+/**
+ * HTTPS Client for interfacing with Babel.
+ *
+ */
+public class HttpsBabelServiceClient implements BabelServiceClient {
+
+ private static final Logger logger = LoggerFactory.getInstance().getLogger(HttpsBabelServiceClient.class);
+
+ private static final String SSL_PROTOCOL = "TLS";
+ private static final String KEYSTORE_ALGORITHM = "SunX509";
+ private static final String KEYSTORE_TYPE = "PKCS12";
+
+ private final ModelLoaderConfig config;
+ private final Client client;
+
+ /**
+ * @param config
+ * @throws NoSuchAlgorithmException
+ * @throws KeyStoreException
+ * @throws CertificateException
+ * @throws IOException
+ * @throws UnrecoverableKeyException
+ * @throws KeyManagementException
+ * @throws BabelServiceClientException
+ */
+ public HttpsBabelServiceClient(ModelLoaderConfig config)
+ throws NoSuchAlgorithmException, KeyStoreException, CertificateException, IOException,
+ UnrecoverableKeyException, KeyManagementException, BabelServiceClientException {
+ this.config = config;
+
+ logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Creating Babel Service client");
+
+ SSLContext ctx = SSLContext.getInstance(SSL_PROTOCOL);
+ KeyManagerFactory kmf = KeyManagerFactory.getInstance(KEYSTORE_ALGORITHM);
+ KeyStore keyStore = KeyStore.getInstance(KEYSTORE_TYPE);
+
+ String clientCertPassword = config.getBabelKeyStorePassword();
+
+ char[] pwd = null;
+ if (clientCertPassword != null) {
+ pwd = clientCertPassword.toCharArray();
+ }
+
+ TrustManager[] trustManagers = getTrustManagers();
+
+ String clientCertFileName = config.getBabelKeyStorePath();
+ if (clientCertFileName == null) {
+ ctx.init(null, trustManagers, null);
+ } else {
+ InputStream fin = Files.newInputStream(Paths.get(clientCertFileName));
+ keyStore.load(fin, pwd);
+ kmf.init(keyStore, pwd);
+ ctx.init(kmf.getKeyManagers(), trustManagers, null);
+ }
+
+ logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Initialised context");
+
+ HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
+ HttpsURLConnection.setDefaultHostnameVerifier((host, session) -> true);
+
+ client = Client.create(new DefaultClientConfig());
+
+ logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Jersey client created");
+ }
+
+ private TrustManager[] getTrustManagers() throws NoSuchAlgorithmException, KeyStoreException, CertificateException,
+ IOException, BabelServiceClientException {
+ TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+ // Using null here initializes the TMF with the default trust store.
+ tmf.init((KeyStore) null);
+
+ // Create a new Trust Manager from the local trust store.
+ String trustStoreFile = config.getBabelTrustStorePath();
+ if (trustStoreFile == null) {
+ throw new BabelServiceClientException("No Babel trust store defined");
+ }
+ try (InputStream myKeys = Files.newInputStream(Paths.get(trustStoreFile))) {
+ KeyStore myTrustStore = KeyStore.getInstance(KeyStore.getDefaultType());
+ myTrustStore.load(myKeys, config.getBabelTrustStorePassword().toCharArray());
+ tmf.init(myTrustStore);
+ }
+ X509TrustManager localTm = findX509TrustManager(tmf);
+
+ // Create a custom trust manager that wraps both our trust store and the default.
+ final X509TrustManager finalLocalTm = localTm;
+
+ // Find the default trust manager.
+ final X509TrustManager defaultTrustManager = findX509TrustManager(tmf);
+
+ return new TrustManager[] {new X509TrustManager() {
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return defaultTrustManager.getAcceptedIssuers();
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+ try {
+ finalLocalTm.checkServerTrusted(chain, authType);
+ } catch (CertificateException e) {
+ defaultTrustManager.checkServerTrusted(chain, authType);
+ }
+ }
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+ defaultTrustManager.checkClientTrusted(chain, authType);
+ }
+ }};
+ }
+
+ private X509TrustManager findX509TrustManager(TrustManagerFactory tmf) {
+ X509TrustManager trustManager = null;
+ for (TrustManager tm : tmf.getTrustManagers()) {
+ if (tm instanceof X509TrustManager) {
+ trustManager = (X509TrustManager) tm;
+ break;
+ }
+ }
+ return trustManager;
+ }
+
+ /**
+ * @param artifactPayload
+ * @param artifactName
+ * @param artifactVersion
+ * @param transactionId
+ * @return
+ * @throws BabelServiceClientException
+ * @throws JSONException
+ */
+ @Override
+ public List<BabelArtifact> postArtifact(byte[] artifactPayload, String artifactName, String artifactVersion,
+ String transactionId) throws BabelServiceClientException {
+ Objects.requireNonNull(artifactPayload);
+
+ String encodedPayload = Base64.getEncoder().encodeToString(artifactPayload);
+
+ JSONObject obj = new JSONObject();
+ try {
+ obj.put("csar", encodedPayload);
+ obj.put("artifactVersion", artifactVersion);
+ obj.put("artifactName", artifactName);
+ } catch (JSONException ex) {
+ throw new BabelServiceClientException(ex);
+ }
+
+ if (logger.isInfoEnabled()) {
+ logger.info(ModelLoaderMsgs.BABEL_REST_REQUEST_PAYLOAD, " Artifact Name: " + artifactName
+ + " Artifact version: " + artifactVersion + " Artifact payload: " + encodedPayload);
+ }
+
+ WebResource webResource = client.resource(config.getBabelBaseUrl() + config.getBabelGenerateArtifactsUrl());
+ ClientResponse response = webResource.type("application/json")
+ .header(AaiRestClient.HEADER_TRANS_ID, Collections.singletonList(transactionId))
+ .header(AaiRestClient.HEADER_FROM_APP_ID, Collections.singletonList(AaiRestClient.ML_APP_NAME))
+ .post(ClientResponse.class, obj.toString());
+ String sanitizedJson = JsonSanitizer.sanitize(response.getEntity(String.class));
+
+ if (logger.isDebugEnabled()) {
+ logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT,
+ "Babel response " + response.getStatus() + " " + sanitizedJson);
+ }
+
+ if (response.getStatus() != Response.Status.OK.getStatusCode()) {
+ throw new BabelServiceClientException(sanitizedJson);
+ }
+
+ return new Gson().fromJson(sanitizedJson, new TypeToken<List<BabelArtifact>>() {}.getType());
+ }
+}
diff --git a/src/main/java/org/onap/aai/modelloader/notification/ArtifactDeploymentManager.java b/src/main/java/org/onap/aai/modelloader/service/ArtifactDeploymentManager.java
index ca17261..af006f5 100644
--- a/src/main/java/org/onap/aai/modelloader/notification/ArtifactDeploymentManager.java
+++ b/src/main/java/org/onap/aai/modelloader/service/ArtifactDeploymentManager.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.aai.modelloader.notification;
+package org.onap.aai.modelloader.service;
import java.util.ArrayList;
import java.util.List;
@@ -27,8 +27,6 @@ import org.onap.aai.modelloader.entity.Artifact;
import org.onap.aai.modelloader.entity.catalog.VnfCatalogArtifactHandler;
import org.onap.aai.modelloader.entity.model.ModelArtifactHandler;
import org.onap.aai.modelloader.restclient.AaiRestClient;
-import org.onap.sdc.api.IDistributionClient;
-import org.onap.sdc.api.notification.IArtifactInfo;
import org.onap.sdc.api.notification.INotificationData;
/**
@@ -36,29 +34,25 @@ import org.onap.sdc.api.notification.INotificationData;
*/
public class ArtifactDeploymentManager {
- private IDistributionClient client;
private ModelLoaderConfig config;
private ModelArtifactHandler modelArtifactHandler;
private VnfCatalogArtifactHandler vnfCatalogArtifactHandler;
- private NotificationPublisher notificationPublisher;
- public ArtifactDeploymentManager(IDistributionClient client, ModelLoaderConfig config) {
- this.client = client;
+ public ArtifactDeploymentManager(ModelLoaderConfig config) {
this.config = config;
}
/**
- * Deploys model and catalog artifacts to A&AI
+ * Deploys model and catalog artifacts to A&AI.
*
* @param data data about the notification that is being processed
- * @param artifacts the specific artifacts found in the data.
* @param modelArtifacts collection of artifacts that represent yml files found in a TOSCA_CSAR file that have been
* converted to XML and also those for model query specs
* @param catalogArtifacts collection of artifacts that represent vnf catalog files
* @return boolean <code>true</code> if all deployments were successful otherwise <code>false</code>
*/
- public boolean deploy(final INotificationData data, final List<IArtifactInfo> artifacts,
- final List<Artifact> modelArtifacts, final List<Artifact> catalogArtifacts) {
+ public boolean deploy(final INotificationData data, final List<Artifact> modelArtifacts,
+ final List<Artifact> catalogArtifacts) {
AaiRestClient aaiClient = new AaiRestClient(config);
String distributionId = data.getDistributionID();
@@ -79,24 +73,9 @@ public class ArtifactDeploymentManager {
}
}
- publishNotifications(data, "TOSCA_CSAR", artifacts, deploySuccess);
-
return deploySuccess;
}
- private void publishNotifications(INotificationData data, String filterType, List<IArtifactInfo> artifacts,
- boolean deploymentSuccess) {
- if (deploymentSuccess) {
- artifacts.stream().filter(a -> filterType.equalsIgnoreCase(a.getArtifactType()))
- .forEach(a -> getNotificationPublisher().publishDeploySuccess(client, data, a));
- getNotificationPublisher().publishComponentSuccess(client, data);
- } else {
- artifacts.stream().filter(a -> filterType.equalsIgnoreCase(a.getArtifactType()))
- .forEach(a -> getNotificationPublisher().publishDeployFailure(client, data, a));
- getNotificationPublisher().publishComponentFailure(client, data, "deploy failure");
- }
- }
-
private ModelArtifactHandler getModelArtifactHandler() {
if (modelArtifactHandler == null) {
modelArtifactHandler = new ModelArtifactHandler(config);
@@ -105,14 +84,6 @@ public class ArtifactDeploymentManager {
return modelArtifactHandler;
}
- private NotificationPublisher getNotificationPublisher() {
- if (notificationPublisher == null) {
- notificationPublisher = new NotificationPublisher();
- }
-
- return notificationPublisher;
- }
-
private VnfCatalogArtifactHandler getVnfCatalogArtifactHandler() {
if (vnfCatalogArtifactHandler == null) {
this.vnfCatalogArtifactHandler = new VnfCatalogArtifactHandler(config);
diff --git a/src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClientFactory.java b/src/main/java/org/onap/aai/modelloader/service/BabelServiceClientFactory.java
index 4354710..ce690c5 100644
--- a/src/main/java/org/onap/aai/modelloader/restclient/BabelServiceClientFactory.java
+++ b/src/main/java/org/onap/aai/modelloader/service/BabelServiceClientFactory.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -18,21 +18,13 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.aai.modelloader.restclient;
-import java.io.IOException;
-import java.security.KeyManagementException;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-import org.onap.aai.modelloader.config.ModelLoaderConfig;
-
-public class BabelServiceClientFactory {
+package org.onap.aai.modelloader.service;
- public BabelServiceClient create(ModelLoaderConfig config) throws UnrecoverableKeyException, KeyManagementException,
- NoSuchAlgorithmException, KeyStoreException, CertificateException, IOException {
- return new BabelServiceClient(config);
- }
+import org.onap.aai.modelloader.config.ModelLoaderConfig;
+import org.onap.aai.modelloader.restclient.BabelServiceClient;
+import org.onap.aai.modelloader.restclient.BabelServiceClientException;
+public interface BabelServiceClientFactory {
+ public BabelServiceClient create(ModelLoaderConfig config) throws BabelServiceClientException;
}
diff --git a/src/main/java/org/onap/aai/modelloader/service/HttpsBabelServiceClientFactory.java b/src/main/java/org/onap/aai/modelloader/service/HttpsBabelServiceClientFactory.java
new file mode 100644
index 0000000..2414991
--- /dev/null
+++ b/src/main/java/org/onap/aai/modelloader/service/HttpsBabelServiceClientFactory.java
@@ -0,0 +1,56 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2018 European Software Marketing Ltd.
+ * ================================================================================
+ * 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.aai.modelloader.service;
+
+import java.io.IOException;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+import org.onap.aai.modelloader.config.ModelLoaderConfig;
+import org.onap.aai.modelloader.restclient.BabelServiceClient;
+import org.onap.aai.modelloader.restclient.BabelServiceClientException;
+import org.onap.aai.modelloader.restclient.HttpsBabelServiceClient;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
+
+@Service
+@Primary
+public class HttpsBabelServiceClientFactory implements BabelServiceClientFactory {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.aai.modelloader.service.BabelServiceClientFactory#create(org.onap.aai.modelloader.config.
+ * ModelLoaderConfig)
+ */
+ @Override
+ public BabelServiceClient create(ModelLoaderConfig config) throws BabelServiceClientException {
+ try {
+ return new HttpsBabelServiceClient(config);
+ } catch (UnrecoverableKeyException | KeyManagementException | NoSuchAlgorithmException | KeyStoreException
+ | CertificateException | IOException ex) {
+ throw new BabelServiceClientException(ex);
+ }
+ }
+
+}
diff --git a/src/main/java/org/onap/aai/modelloader/service/ModelLoaderInterface.java b/src/main/java/org/onap/aai/modelloader/service/ModelLoaderInterface.java
index 6796090..e65e02c 100644
--- a/src/main/java/org/onap/aai/modelloader/service/ModelLoaderInterface.java
+++ b/src/main/java/org/onap/aai/modelloader/service/ModelLoaderInterface.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -31,15 +31,15 @@ public interface ModelLoaderInterface {
@RequestMapping(value = "/loadModel/{modelid}", //
method = RequestMethod.GET, produces = "application/json")
@ResponseBody
- public Response loadModel(String modelid);
+ Response loadModel(String modelid);
@RequestMapping(value = "/saveModel/{modelid}/{modelname}", //
method = RequestMethod.PUT, produces = "application/json")
@ResponseBody
- public Response saveModel(String modelid, String modelname);
+ Response saveModel(String modelid, String modelname);
@RequestMapping(value = "/ingestModel/{modelName}/{modelVersion}", //
method = RequestMethod.POST, produces = "application/json")
@ResponseBody
- public Response ingestModel(String modelid, String modelVersion, String payload) throws IOException;
+ Response ingestModel(String modelid, String modelVersion, String payload) throws IOException;
}
diff --git a/src/main/java/org/onap/aai/modelloader/service/ModelLoaderService.java b/src/main/java/org/onap/aai/modelloader/service/ModelLoaderService.java
index 06d6e30..f8ab60f 100644
--- a/src/main/java/org/onap/aai/modelloader/service/ModelLoaderService.java
+++ b/src/main/java/org/onap/aai/modelloader/service/ModelLoaderService.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -20,8 +20,9 @@
*/
package org.onap.aai.modelloader.service;
-import java.io.FileInputStream;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Date;
@@ -30,21 +31,22 @@ import java.util.Properties;
import java.util.Timer;
import java.util.TimerTask;
import javax.annotation.PostConstruct;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.onap.aai.cl.api.Logger;
import org.onap.aai.cl.eelf.LoggerFactory;
import org.onap.aai.modelloader.config.ModelLoaderConfig;
import org.onap.aai.modelloader.entity.Artifact;
-import org.onap.aai.modelloader.notification.ArtifactDeploymentManager;
import org.onap.aai.modelloader.notification.ArtifactDownloadManager;
import org.onap.aai.modelloader.notification.EventCallback;
-import org.onap.aai.modelloader.restclient.BabelServiceClientFactory;
+import org.onap.aai.modelloader.notification.NotificationDataImpl;
+import org.onap.aai.modelloader.notification.NotificationPublisher;
import org.onap.sdc.api.IDistributionClient;
import org.onap.sdc.api.notification.IArtifactInfo;
-import org.onap.sdc.api.notification.INotificationData;
import org.onap.sdc.api.results.IDistributionClientResult;
import org.onap.sdc.impl.DistributionClientFactory;
import org.onap.sdc.utils.DistributionActionResultEnum;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@@ -58,15 +60,14 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/services/model-loader/v1/model-service")
public class ModelLoaderService implements ModelLoaderInterface {
- static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());
-
- protected static final String FILESEP =
- (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator");
+ private static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());
@Value("${CONFIG_HOME}")
private String configDir;
private IDistributionClient client;
private ModelLoaderConfig config;
+ @Autowired
+ private BabelServiceClientFactory babelClientFactory;
/**
* Responsible for loading configuration files and calling initialization.
@@ -78,7 +79,7 @@ public class ModelLoaderService implements ModelLoaderInterface {
ModelLoaderConfig.setConfigHome(configDir);
Properties configProperties = new Properties();
try {
- configProperties.load(new FileInputStream(configDir + FILESEP + "model-loader.properties"));
+ configProperties.load(Files.newInputStream(Paths.get(configDir, "model-loader.properties")));
config = new ModelLoaderConfig(configProperties);
if (!config.getASDCConnectionDisabled()) {
initSdcClient();
@@ -92,7 +93,7 @@ public class ModelLoaderService implements ModelLoaderInterface {
/**
* Responsible for stopping the connection to the distribution client before the resource is destroyed.
*/
- protected void preShutdownOperations() {
+ public void preShutdownOperations() {
logger.info(ModelLoaderMsgs.STOPPING_CLIENT);
if (client != null) {
client.stop();
@@ -110,19 +111,13 @@ public class ModelLoaderService implements ModelLoaderInterface {
IDistributionClientResult initResult = client.init(config, callback);
- if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
- String errorMsg = "Failed to initialize distribution client: " + initResult.getDistributionMessageResult();
- logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-
- // Kick off a timer to retry the SDC connection
- Timer timer = new Timer();
- TimerTask task = new SdcConnectionJob(client, config, callback, timer);
- timer.schedule(task, new Date(), 60000);
- } else {
+ if (initResult.getDistributionActionResult() == DistributionActionResultEnum.SUCCESS) {
// Start distribution client
logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client...");
IDistributionClientResult startResult = client.start();
- if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+ if (startResult.getDistributionActionResult() == DistributionActionResultEnum.SUCCESS) {
+ logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established");
+ } else {
String errorMsg = "Failed to start distribution client: " + startResult.getDistributionMessageResult();
logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
@@ -130,10 +125,17 @@ public class ModelLoaderService implements ModelLoaderInterface {
Timer timer = new Timer();
TimerTask task = new SdcConnectionJob(client, config, callback, timer);
timer.schedule(task, new Date(), 60000);
- } else {
- logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established");
}
+ } else {
+ String errorMsg = "Failed to initialize distribution client: " + initResult.getDistributionMessageResult();
+ logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
+
+ // Kick off a timer to retry the SDC connection
+ Timer timer = new Timer();
+ TimerTask task = new SdcConnectionJob(client, config, callback, timer);
+ timer.schedule(task, new Date(), 60000);
}
+
Runtime.getRuntime().addShutdownHook(new Thread(this::preShutdownOperations));
}
@@ -160,51 +162,57 @@ public class ModelLoaderService implements ModelLoaderInterface {
@Override
public Response ingestModel(@PathVariable String modelName, @PathVariable String modelVersion,
@RequestBody String payload) throws IOException {
- boolean success;
+ Response response;
if (config.getIngestSimulatorEnabled()) {
- try {
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact");
+ response = processTestArtifact(modelName, modelVersion, payload);
+ } else {
+ logger.debug("Simulation interface disabled");
+ response = Response.serverError().build();
+ }
- List<Artifact> catalogArtifacts = new ArrayList<>();
- List<Artifact> modelArtifacts = new ArrayList<>();
+ return response;
+ }
- IArtifactInfo artifactInfo = new ArtifactInfoImpl();
- ((ArtifactInfoImpl) artifactInfo).setArtifactName(modelName);
- ((ArtifactInfoImpl) artifactInfo).setArtifactVersion(modelVersion);
+ private Response processTestArtifact(String modelName, String modelVersion, String payload) {
+ IArtifactInfo artifactInfo = new ArtifactInfoImpl();
+ ((ArtifactInfoImpl) artifactInfo).setArtifactName(modelName);
+ ((ArtifactInfoImpl) artifactInfo).setArtifactVersion(modelVersion);
- byte[] csarFile = Base64.getDecoder().decode(payload);
+ Response response;
+ try {
+ logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact " + modelName + " " + modelVersion);
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Generating xml models from test artifact");
+ byte[] csarFile = Base64.getDecoder().decode(payload);
- new ArtifactDownloadManager(client, config, new BabelServiceClientFactory()).processToscaArtifacts(
- modelArtifacts, catalogArtifacts, csarFile, artifactInfo, "test-transaction-id", modelVersion);
+ logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Generating XML models from test artifact");
- List<IArtifactInfo> artifacts = new ArrayList<>();
- artifacts.add(artifactInfo);
- INotificationData notificationData = new NotificationDataImpl();
- ((NotificationDataImpl) notificationData).setDistributionID("TestDistributionID");
+ List<Artifact> modelArtifacts = new ArrayList<>();
+ List<Artifact> catalogArtifacts = new ArrayList<>();
- logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Loading xml models from test artifact");
+ new ArtifactDownloadManager(client, config, babelClientFactory).processToscaArtifacts(modelArtifacts,
+ catalogArtifacts, csarFile, artifactInfo, "test-transaction-id", modelVersion);
- success = new ArtifactDeploymentManager(client, config).deploy(notificationData, artifacts,
- modelArtifacts, catalogArtifacts);
+ logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Loading xml models from test artifacts: "
+ + modelArtifacts.size() + " model(s) and " + catalogArtifacts.size() + " catalog(s)");
- } catch (Exception e) {
- return Response.serverError().entity(e).build();
+ NotificationDataImpl notificationData = new NotificationDataImpl();
+ notificationData.setDistributionID("TestDistributionID");
+ boolean success =
+ new ArtifactDeploymentManager(config).deploy(notificationData, modelArtifacts, catalogArtifacts);
+ logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Deployment success was " + success);
+ response = success ? Response.ok().build() : Response.serverError().build();
+ } catch (Exception e) {
+ String responseMessage = e.getMessage();
+ logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Exception handled: " + responseMessage);
+ if (config.getASDCConnectionDisabled()) {
+ // Make sure the NotificationPublisher logger is invoked as per the standard processing flow.
+ new NotificationPublisher().publishDeployFailure(client, new NotificationDataImpl(), artifactInfo);
+ } else {
+ responseMessage += "\nSDC publishing is enabled but has been bypassed";
}
- } else {
- logger.debug("Simulation interface disabled");
- success = false;
- }
-
- Response response;
- if (success) {
- response = Response.ok().build();
- } else {
- response = Response.serverError().build();
+ response = Response.serverError().entity(responseMessage).type(MediaType.APPLICATION_XML).build();
}
-
return response;
}
}
diff --git a/src/main/java/org/onap/aai/modelloader/service/SdcConnectionJob.java b/src/main/java/org/onap/aai/modelloader/service/SdcConnectionJob.java
index 82e0bc6..9a6c6e9 100644
--- a/src/main/java/org/onap/aai/modelloader/service/SdcConnectionJob.java
+++ b/src/main/java/org/onap/aai/modelloader/service/SdcConnectionJob.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -31,14 +31,15 @@ import org.onap.sdc.api.results.IDistributionClientResult;
import org.onap.sdc.utils.DistributionActionResultEnum;
public class SdcConnectionJob extends TimerTask {
- static Logger logger = LoggerFactory.getInstance().getLogger(SdcConnectionJob.class.getName());
+ private static final Logger logger = LoggerFactory.getInstance().getLogger(SdcConnectionJob.class.getName());
- private IDistributionClient client;
+ private final IDistributionClient client;
private ModelLoaderConfig config;
private EventCallback callback;
private Timer timer;
public SdcConnectionJob(IDistributionClient client, ModelLoaderConfig config, EventCallback callback, Timer timer) {
+ super();
this.client = client;
this.timer = timer;
this.callback = callback;
@@ -48,26 +49,27 @@ public class SdcConnectionJob extends TimerTask {
@Override
public void run() {
if (!config.getASDCConnectionDisabled()) {
-
- IDistributionClientResult initResult = client.init(config, callback);
-
- if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
- String errorMsg =
- "Failed to initialize distribution client: " + initResult.getDistributionMessageResult();
- logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
- return;
- }
-
- IDistributionClientResult startResult = client.start();
- if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
- String errorMsg = "Failed to start distribution client: " + startResult.getDistributionMessageResult();
- logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
- return;
+ final IDistributionClientResult initResult = client.init(config, callback);
+ if (initResult.getDistributionActionResult() == DistributionActionResultEnum.SUCCESS) {
+ startClient();
+ } else {
+ logConnectionError("Failed to initialize", initResult);
}
+ }
+ }
- // Success. Cancel the timer job
+ private void startClient() {
+ final IDistributionClientResult startResult = client.start();
+ if (startResult.getDistributionActionResult() == DistributionActionResultEnum.SUCCESS) {
timer.cancel();
logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established");
+ } else {
+ logConnectionError("Failed to start", startResult);
}
}
+
+ private void logConnectionError(String msgPrefix, IDistributionClientResult result) {
+ final String errorMsg = msgPrefix + " distribution client: " + result.getDistributionMessageResult();
+ logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
+ }
}
diff --git a/src/main/java/org/onap/aai/modelloader/util/JsonXmlConverter.java b/src/main/java/org/onap/aai/modelloader/util/JsonXmlConverter.java
index 48a33b5..87cfdcc 100644
--- a/src/main/java/org/onap/aai/modelloader/util/JsonXmlConverter.java
+++ b/src/main/java/org/onap/aai/modelloader/util/JsonXmlConverter.java
@@ -1,74 +1,77 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * Copyright © 2017-2018 European Software Marketing Ltd.
- * ================================================================================
- * 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.aai.modelloader.util;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.json.XML;
-
-public class JsonXmlConverter {
-
- private JsonXmlConverter() {
- throw new AssertionError("Instantiating utility class.");
- }
-
- /**
- * Determines whether or not the supplied text string represents a valid JSON structure or not.
- *
- * @param text The text to be evaluated.
- * @return - true if the string represents a valid JSON object, false, otherwise.
- */
- public static boolean isValidJson(String text) {
- try {
- new JSONObject(text);
- } catch (JSONException ex) {
- try {
- new JSONArray(text);
- } catch (JSONException ex1) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Takes a text string representing a valid JSON structure and converts it to an equivalent XML string.
- *
- * @param jsonText The JSON string to convert to XML.
- * @return an XML string representation of the supplied JSON string.
- */
- public static String convertJsonToXml(String jsonText) {
- return XML.toString(new JSONObject(jsonText));
- }
-
- /**
- * Takes a text string representing a valid XML structure and converts it to an equivalent JSON string.
- *
- * @param xmlText The XML string to convert to JSON.
- * @return a JSON string representation of the supplied XML string.
- */
- public static String convertXmlToJson(String xmlText) {
- JSONObject jsonObj = XML.toJSONObject(xmlText);
- return jsonObj.toString();
- }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2018 European Software Marketing Ltd.
+ * ================================================================================
+ * 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.aai.modelloader.util;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.json.XML;
+
+public final class JsonXmlConverter {
+
+ private JsonXmlConverter() {
+ throw new AssertionError("Instantiating utility class.");
+ }
+
+ /**
+ * Determines whether or not the supplied text string represents a valid JSON structure or not.
+ *
+ * @param text The text to be evaluated.
+ * @return - true if the string represents a valid JSON object, false, otherwise.
+ */
+ public static boolean isValidJson(String text) {
+ boolean isValid;
+ try {
+ new JSONObject(text);
+ isValid = true;
+ } catch (JSONException ex) {
+ try {
+ new JSONArray(text);
+ isValid = true;
+ } catch (JSONException ex1) {
+ isValid = false;
+ }
+ }
+
+ return isValid;
+ }
+
+ /**
+ * Takes a text string representing a valid JSON structure and converts it to an equivalent XML string.
+ *
+ * @param jsonText The JSON string to convert to XML.
+ * @return an XML string representation of the supplied JSON string.
+ */
+ public static String convertJsonToXml(String jsonText) {
+ return XML.toString(new JSONObject(jsonText));
+ }
+
+ /**
+ * Takes a text string representing a valid XML structure and converts it to an equivalent JSON string.
+ *
+ * @param xmlText The XML string to convert to JSON.
+ * @return a JSON string representation of the supplied XML string.
+ */
+ public static String convertXmlToJson(String xmlText) {
+ JSONObject jsonObj = XML.toJSONObject(xmlText);
+ return jsonObj.toString();
+ }
+}